pax_global_header00006660000000000000000000000064136773141470014527gustar00rootroot0000000000000052 comment=2ebc2f3f2059b96885416167363bde2e27ece106 singularity-1.00/000077500000000000000000000000001367731414700140215ustar00rootroot00000000000000singularity-1.00/.codecov.yml000066400000000000000000000004041367731414700162420ustar00rootroot00000000000000ignore: - "**/*.dat" - "**/*.pot" - "**/*.po" - "singularity/data/**/*" - "singularity/music/**/*" - "singularity/sounds/**/*" - "docs/**/*" - "singularity/i18n/lang_*/**/*" - "**/README*" - "**/*.txt" - "**/Changelog" - ".github/**/*" singularity-1.00/.gitattributes000066400000000000000000000004321367731414700167130ustar00rootroot00000000000000Changelog merge=union # Include release commit hash singularity/__init__.py export-subst # The release tarball excludes music singularity/music export-ignore singularity/music/** export-ignore singularity/data/music-src/ export-ignore singularity/data/music-src/** export-ignore singularity-1.00/.github/000077500000000000000000000000001367731414700153615ustar00rootroot00000000000000singularity-1.00/.github/ISSUE_TEMPLATE/000077500000000000000000000000001367731414700175445ustar00rootroot00000000000000singularity-1.00/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000012271367731414700222400ustar00rootroot00000000000000--- name: Bug report about: Create a report to help us improve title: '' labels: bug assignees: '' --- **Describe the bug** A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error **Expected behavior** A clear and concise description of what you expected to happen. **Screenshots** If applicable, add screenshots to help explain your problem. **Desktop (please complete the following information):** - OS: [e.g. iOS] - Python version [e.g. 3.7] - Version [e.g. 22] **Additional context** Add any other context about the problem here. singularity-1.00/.github/ISSUE_TEMPLATE/crash-report.md000066400000000000000000000014621367731414700225020ustar00rootroot00000000000000--- name: Crash report about: Saw the "An error has occurred."-dialog or did the game suddenly "vanish"? title: Crash bug labels: bug, crash assignees: '' --- **Please include the log file** If the "An error has occurred"-dialog mentions a log file, then please include the log file to this report. A simple "copy-paste" of the log file contents into the report is sufficient. **Please include a savegame that can reproduce the issue** If you can, please provide a savegame where it is easy to demonstrate the problem. **To Reproduce** If possible, please describe the steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error If applicable, please add screenshots to help explain your problem. **Additional context** Add any other context about the problem here. singularity-1.00/.github/workflows/000077500000000000000000000000001367731414700174165ustar00rootroot00000000000000singularity-1.00/.github/workflows/python-package.yml000066400000000000000000000027531367731414700230620ustar00rootroot00000000000000# This workflow will install Python dependencies, run tests and lint with a variety of Python versions # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions name: Python package on: push: branches: [ master ] pull_request: branches: [ master ] jobs: build-with-distro-pkgs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y python-pytest python-numpy python-pygame python-pytest-cov python-coverage python-polib - name: Test with pytest run: | PYTHONPATH=. py.test -v build-with-pypi-pkgs-pygame1: runs-on: ubuntu-latest strategy: matrix: python-version: [3.8] steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | echo 'man-db man-db/auto-update boolean false' | sudo debconf-set-selections sudo apt-get update sudo apt-get install -y libsdl1.2-dev libsdl-ttf2.0-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libportmidi-dev libpng-dev libjpeg-dev pip3 install pytest numpy pygame - name: Test with pytest run: | locale -a python3 --version || python --version PYTHONPATH=. LC_ALL=C.UTF-8 pytest -v singularity-1.00/.gitignore000066400000000000000000000003461367731414700160140ustar00rootroot00000000000000prefs.dat dist/ build/ saves/ *.egg-info/ *.pyc *.ogg *.mp3 *.log .* _build !.travis.yml !.codecov.yml !.gitignore !.gitattributes singularity/i18n/*.po.sha1 singularity/i18n/locale/ singularity-*.tar.gz singularity-*.tar.gz.asc singularity-1.00/.gitmodules000066400000000000000000000014021367731414700161730ustar00rootroot00000000000000[submodule "singularity/music/singularity-music-lossless-extended"] path = singularity/music/singularity-music-lossless-extended url = git@github.com:singularity/singularity-music-lossless-extended.git [submodule "singularity/music/singularity-music-lossless-original"] path = singularity/music/singularity-music-lossless-original url = git@github.com:singularity/singularity-music-lossless-original.git [submodule "singularity/music/singularity-music"] path = singularity/music/singularity-music url = git@github.com:singularity/singularity-music.git [submodule "release/windows"] path = release/windows url = git@github.com:singularity/singularity-windows.git [submodule "release/osx"] path = release/osx url = git@github.com:singularity/singularity-osx.git singularity-1.00/AUTHORS.txt000066400000000000000000000005761367731414700157170ustar00rootroot00000000000000Evil Mr Henry Phil Bordelon Max McCracken Brian Reid FunnyMan3595 (Charlie Nolan) MestreLion (Rodrigo Silva) Xenega Niels Thykier Rardiol (Ricardo Ardissone) singularity-1.00/CONTRIBUTING.md000066400000000000000000000072031367731414700162540ustar00rootroot00000000000000# Contributing to Endgame: Singularity We welcome contributions for everything - including this possibly incomplete document. :) Notable, you can help us even without being able to code: * Translations! See the dedicated section on translations below * UI themes * Testing and filing bugs (#38, #115, #206, #207, #208 and many more) * Submitting improvement requests (#19, #64, #83) Examples of past pull requests/patches that did not require code skills: * We were looking for a new UI theme (#71) and got the `Nightmode` UI theme (#119) * We needed help finding a new click sound (#201) and got one (#210) * All our existing translations ## Discussion fora Some of the developers are available in the following IRC room: * IRC Room: #singularity on irc.oftc.net (port 6667) Please note that there may be a significant delay between messages here depending on your time zone and availability of the members in the channel. Therefore, we encourage you to ask your question and have patience until we are back. ## License assumption of work provided We assume that all submissions are under the same license as the content being changed unless explicitly stated otherwise in the submission or content. For new content, the license is assumed to the the default license of that content if not explicitly stated to be under another license. Please see `LICENSE.txt` for details about the license terms. If you wish to submit work under a different license, please get in contact with us before starting the work. Unfortunately, we may have to reject work that is not under a license compatible with the project licenses or the project goals. ## Running the test suite The test suite can be run by using setting `PYTHONPATH` and running "py.test". As an example, if you have "py.test" in PATH as `py.test-3` (for the Python3 version) and use the bash shell on Linux, then you can run the test suite via the following command: PYTHONPATH=. py.test-3 -v ## Translations ### Updating existing translations Please have a look at the .po files in the directory `singularity/i18n/lang_` where `` is the language code for your language (e.g. `fr_FR` or `pt_BR`). You can refresh the translations by using the command: utils/gettext-singularity --catalog The `--catalog` parameter determines whether the `messages.po`, `data_str.po`, or the `story.po` file will be refreshed and checked. ### Adding translations for a new language You can add translations for a new language by running: utils/gettext-singularity --catalog --new It will prompt you for a few details (such as the language name in your native language). This will generate a `messages.po`, a `data_str.po`, and a `story.po` in `singularity/i18n/lang_` and from there you can use your favourite po-file editor to start translating. ### Testing a translation The singularity game will automatically use your translations once you have saved them in the relevant po-files. To verify or review the translations, please: * Start the game from the git checkout (see the README for instructions) * Note that you will need to start the game in cheat mode to verify the cheat translations (cheat mode cannot be enabled later). * Navigate to Options, select your language and click OK. (First time only or if you are reviewing multiple translations) * Start playing/navigating around to verify that the translations are as expected. ### Submitting a new translation or a translation update Please submit it as a pull request against the master branch via https://github.com/singularity/singularity/pulls. singularity-1.00/Changelog.txt000066400000000000000000001157651367731414700164700ustar00rootroot00000000000000Endgame: Singularity Changelog V1.00 (2020.07.02): GAME CONTENT CHANGES: - Locations with higher risk are now highlighted provided the relevant techs have been researched. (nthykier) - Add a new power state `Offline`, which applies to all bases under construction until they can become `Active`. Bases in the `Offline` state currently behave like they are in the `Sleep` state. Based on an idea from Wuzzy2 (Closes: #239, #245) (Xenega) - The thrift modification from locations now also applies to CPU maintenance. (Xenega) USER-VISIBLE CHANGES: - Support better translations of strings involving numbers such as "X Days" or "Y Hours". (Closes: #262) (gunchleoc) - Fix a visual glitch in the ResearchScreen if the AI had no available CPU because all bases are asleep. (nthykier) - It is now possible to convert old savegames to the new format via the `Upgrade` button on the `Load` menu. This avoids the hassle of having to manually load and save each game. (nthykier) - Implement lexicographic sorting of strings by using Python's `locale.strxfrm`. This provides better sorting order for non-English languages on all platforms where `locale.strxfrm` works. Notable exception being MacOS, where Python is reported to have issues still. (Closes: #271) (gunchleoc) - Add support for mouse-wheel scrolling in pygame 2 with SDL 2, which re-enables scrolling in lists. (nthykier) - Rewrite handling of "holding down key" to repeat a key press. This avoids false "key-repetition" with accented characters. Note that pygame2 with SDLv2 is needed to be able to repeat accented characters by holding down the key. (Closes: #281) (nthykier) - Change layout of Knowledge screen. Among other things, this makes more room for concept names. (Closes: #270, #279) (Xenega) - Location screen now disables buttons that have no effect. Previously, they would just do "nothing" but where still clickable. (nthykier) - Ensure that singularity can start when installed and loaded via pkg_resources.load_entry_point. (Closes #272) (nthykier) - Improve savegame dialog to use a translated version of the difficulty as default savegame and reject some invalid path names with a simple error message rather than an exception. Furthermore, the "OK" button is now disabled when the savegame name in invalid. (Closes #267) (gunchleoc) - Disable Load and Delete buttons in the load savegame dialog when there are no savegames. (nthykier) - Avoid a crash when clicking Load or Delete in the load savegame dialog where no savegames are available. (Closes: #274) (Xenega) - Add number separators in statistics screen. (Closes: #266) (gunchleoc) - Give text fields a distinct background color to make it easier to see if something is a text field and make title visible in darktheme. (Closes #260) (gunchleoc) - Add Scottish Gaelic translation. (Closes: #256, #268, #263, #286, #287) (gunchleoc) - Text resizing and layout changes to better accommodate for translations that need more space than the English text. (Closes: #258, #259, #263, #264, #269) (gunchleoc) - Minimum resolution has been reduced to 100x100. (rofl0r, nthykier) - Enable the game window to be resized like any other window e.g. by dragging in the edges of the game window. (nthykier) - Reliably redraw the singularity screen if another window was moved over the game. When singularity was run with pygame 2, this behaviour introduced visible artifacts until something in the game triggered a complete redraw. (nthykier) - Fix a number of bugs related to the Power state of bases under construction - like being able to change the power state of an incomplete base. Thanks to Wuzzy2 for reporting the issue. (Closes: #238, related to: #239, #245) (Xenega) - Limit resolution input fields in the Options screen to digit characters only. Thanks to Wuzzy2 for reporting the issue. (related to: #236) (Xenega) - Show the correct CPU maintenance cost for bases in the base screen. Thanks to Wuzzy2 for reporting the issue. (Closes: #243) (Xenega) - Fix a crash with "ridiculously" small resolutions by setting a minimum resolution (during startup and in the options screen). Thanks to Wuzzy2 for reporting the issue. (Closes: #240) (Xenega) - Add an `OK` button next to the custom resolution fields in the Options screen. Previously, there was a confusingly named button labelled `Custom`, which people mistook for a label rather than a button. Thanks to Wuzzy2 for reporting the issue. (Closes: #236, #242) (Xenega) - Fix focus handling in the Knowledge screen, making keyboard and mouse-wheel actions much more predictable. Thanks to Wuzzy2 for reporting the issue. (Closes: #220) (Xenega) - Fix bug where choosing `Cancel` in the Options menu would not roll back changes to the selected theme. (nthykier) - Fix some minor color issues with the Nightmode theme, where the default color was used or text became unreadable. Thanks to Wuzzy2 for reporting the issue. (Closes #225, #227) (nthykier) - Make room for longer tech names in the Knowledge screen to account for some tech names being significantly longer in translations. Thanks to Wuzzy2 for reporting the issue. (Closes #219) (nthykier, Xenega) - Fix a regression where changing the language in game would fail to update the tech names and descriptions. (Closes: #232) (nthykier) - Fix crash in the Load dialog when clicking Load if no game was selected. (nthykier) - When building bases or CPU for a base, show the correct CPU provided when the base/CPU is constructed. Previously it would not take location and base modifiers into account. Thanks to Wuzzy2 for reporting the issue. (Closes: #230) (nthykier) - Fix bug where clicking Cancel in the Options menu would still commit changes to selected warnings. Thanks to Wuzzy2 for reporting the issue. (Closes: #230) (nthykier) - Use correct number separator for money under non-English locales (e.g. comma in German) when measured in millions or more. Thanks to Wuzzy2 for reporting the issue. (Closes: #226) (nthykier) - Ensure that the about menu text is extracted for translations Thanks to Wuzzy2 for reporting its absence. (Closes: #218) (nthykier) - Fix a bug where part of the tech description in the Knowledge menu was not translatable. Thanks to Wuzzy2 for reporting it. (Closes: #217) (nthykier) - Fix overly precise durations due to missing rounding when displaying construction times in Python3. Thanks to Wuzzy2 for reporting it. (Closes: #222) (nthykier) - Make scrollbar arrows visible in "Nightmode" theme. Thanks to Wuzzy2 for reporting it. (Closes: #221) (nthykier) - Add updated German translation. (Closes: #215, #223, #288) (Wuzzy2) - Fix bug where "Concepts" in the "Knowledge" menu was not translatable. (Closes: #216) (nthykier) OTHER CHANGES: - Update path name for AUTHORS.txt and Changelog.txt in MANIFEST.in (Closes: #275) (nthykier) - Update the URLs to the music to reflect their new location. (MestreLion) - In debug mode (--debug), highlight which part of the screen has been redrawn by drawning a box around it. (nthykier) - Fix some internal bugs that lead to unnecessary redraws of some of the text panels in the map screen. (nthykier) Thanks to Wuzzy2, rofl0r, gunchleoc, and LW-archlinux, Quix0r for filing bugs, play testing and moral support. v1.0b1 (2020.02.16): USER-VISIBLE CHANGES: - Show a summary of the bases under the CPU and money display. (Closes: #155, #196) (nthykier) - Fix a bug where Australia would never get a modifier if the game was created with python3. (nthykier) - Fix a crash when accessing the Log menu when playing a game loaded from a 1.0a1 (or later) game. OTHER CHANGES: - Documented known issues with running singularity on MacOS in the README. Please see #197 for more details. Thanks to yiwangwuqian for reporting and Diegus83 for debugging it and finding a possible solution. (nthykier) - All translations are now done via ".po" files (GNU Gettext) to ensure everything uses the same work flow for translators. (nthykier) - Refactor handling of regional modifiers. This caused a bump in the savegame format, which means games saved by 1.0b1 cannot be loaded in earlier versions of singularity. (nthykier) v1.0a2 (2019.12.28): GAME CONTENT CHANGES: - The location Antarctic is now considered as safe as the Ocean location and can therefore be used to research certain dangerous technologies. (Closes: #173) (Xenega, nthykier) - Several key technologies can no longer be researched in Urban areas. (Closes: #173) (Xenega, nthykier) USER-VISIBLE CHANGES: - Fix hotkey clash between "PAUSE" and "PREV". (Closes: #212) (danuker, nthykier) - Improve keyboard + focus handling for most dialogs by passing keyboard events on to lists, sliders and text fields in the dialog. This enables most dialogs to be handled entirely using keyboard only. (Closes: #209, #211) (nthykier) - Replace the GUI click sound to be softer. (Closes: #201, #210) (danuker) - Fix crash when loading an old savegame, where the player was researching something that is now not possible due to balancing changes. The game would be often be playable for a short while until something triggered a recalculation of CPU usage. (nthykier) - Fix incomplete substitution in log messages about bases being lost due to lack of maintenance. (nthykier) - Fix a crash when loading a 1.0alpha1 savegame and opening the log. (Closes: #208) (nthykier) - Reduced the default size for text to ensure that most text fields have a consistent text size. (Closes: #200) (nthykier) - Text fields now respond to the HOME + END keys and they move the cursor to the start and end of the text field. (nthykier) - Show the correct warning when attempting to load unsupported savegames. Previously, it would silently be omitted. (nthykier) - Support loading old savegames with a particular corruption where the number of items in a base were sometimes set to the invalid value of 0. The only sane fix is to reset the counter to 1 at the expense of some bases "losing" CPU. (Closes: https://bugs.launchpad.net/ubuntu/+source/singularity/+bug/931037, https://code.google.com/p/endgame-singularity/issues/detail?id=107) (nthykier) - Using the arrow keys on the research slider no longer trips "two" clicks rather than one. (Closes: #207, https://bugs.launchpad.net/ubuntu/+source/singularity/+bug/531871) (nthykier) - Buttons to construct base items are now disabled when the player cannot built any item of that particular item. - Fixed a crash in the build dialog for a base if you tried to build a security item but had not researched any for that particular base. (Closes: #206) (nthykier) - Added savegame compat for some older development savegames known as "0.31pre" by discarding the log entries from them. (Closes: #198, #199) (nthykier) - Fixed a bug where trigger times of events where reset on loading the game leading them to last longer than they should. (nthykier) OTHER CHANGES: - Include version information in the error log to simplify reporting of bugs and crashes. (nthykier) Thanks to (in no particular order) for filing bugs, play testing and moral support: Quix0r, danuker, rofl0r, PeterJust, rww (Launchpad), scottparker (Launchpad) v1.0a1 (release 2019.12.07): GAME CONTENT CHANGES: - Endgame requires a lot less grinding (emh, Xenega) - New early-midgame bases to make the progression into the midgame more smooth (Xenega) - All CPUs have been rebalanced. Notably midgame CPUs have a much better cost/efficiency ratio and endgame CPUs have been nerfed considerably (Xenega) - New security and reactor items are now available (Xenega) USER-VISIBLE CHANGES: - Show standard costs and detection chances of items and bases in the Knowledge screen excluding any location modifiers (Xenega) - Show location modifiers more prominently in the location screen and the dialog for constructing a new base (Xenega) - Show difficulty setting and in-game time for new savegames (Xenega) - Loading an old savegame (e.g. from 0.30c) will now retroactively apply the game data from the latest version of Singularity - including making new game content researchable (Closes: #56, #122, #145) (nthykier) - Unify multiple messages into a single dialog with multiple pages. This new dialog also supports resuming the game instead of forcing the game to be paused (Xenega) - Events can now expire and two non-unique events now do. Previously, they could reappear continuously possibly making the game almost impossible (or completely neutering the affected group) (nthykier) - The cash display now shows the expected cash change over the next 24 hours next to the current cash. Likewise, the CPU display includes how much spare CPU there is after maintenance and construction. These numbers also include purchases currently under consideration (Closes: #21, #100) (nthykier) - Support searching for a savegame by name in the Load dialog (nthykier) - Make the base type and its total CPU visible in the list of bases at a given location (Closes: #64) (nthykier) - Fix a crash when savegame names contained non-ASCII UTF-8 characters (Closes: https://bugs.debian.org/718447) (nthykier) - Fix visual lag at the highest game speed due to recalculating the "day/night" layers (nthykier) - It is now possible to use double-click as a short-cut for "Open base" when viewing the list of bases at a Location. (nthykier) - Base purchase screen now provides more details about the base, including accurate purchase and maintenance cost plus detection rates (at the level the player is allowed to see them) (Xenega) - Ensure that CPU allocations are re-allocated properly when the player loses too much CPU at a given danger level (Closes: #103) (Xenega) - Have a separate volume bar for music and sounds (Closes: #90) (Xenega) - Use the XDG Base Directory Specification on relevant platforms (Closes: #53) (Xenega) - Support deleting existing savegames via the Load screen (Closes: #48) (Xenega) - Select the amount of CPU at the same dialog as the CPU selection dialog (Xenega) - Add new "nightmode" theme (Closes: #119) (cryptarch) - Theming support to change background image, colors, fonts, etc. The themes can have language specific content (e.g. fonts better suited for the given language) (MestreLion, Xenega) - Support changing language without restarting the game (Xenega) - Add warnings for some common issues such as when the player only has one base left or that when changing CPU of a base will remove existing CPU (Closes: #17) (Xenega) - Support renaming bases (Xenega) - Add a 24-hour finance report (Xenega) - Fix various bugs in the shown detection rates (juise) - The game now records a log of the latest events that happened (Xenega, nthykier) - Fix issue where build times were affected by game speed (Closes: #18) (Xenega) - Singularity no longer proposes resolutions larger than the detected display size and now defaults to 1024x768 as the new default (MestreLion) - Persisting changes in the Options is now automatic on "OK" (MestreLion) - Limit total amount of cash to avoid overflow (Closes: #110) (MestreLion) - Use 2 decimal places when displaying cash or CPU for large numbers (MestreLion) - Reset music when starting a new or loading an existing game (Closes: #100) (MestreLion) - Fixed techs being reset if language is changed mid-game (Closes: #99) (MestreLion) - Saved games list now sorted in in-game load dialog (MestreLion) - Fixed events not being translated when language changes in-game (Closes: #128) (MestreLion) - Fixed --singledir and --multidir being ignored for saves, preferences, music and error log. Also, if possible (Python >= 2.6), error.log is now created only when (and if) an error actually occurs (MestreLion) - Added Brazilian Portuguese (pt_BR) translation (Closes: #130)(MestreLion) - Updated es_AR translation (Closes: #20)(justapawn) - Try to use user's locale, or a similar language, as game language (MestreLion) - Launcher for Linux is now "singularity" - Revamped Options screen, including new resolutions (MestreLion, Xenega) OTHER CHANGES: - Refactored code into a top-level module called singularity instead of using generic top-level python modules nad improve setup.py to be setuptools compatible (Closes: #12) (rardiol) - New savegame format based on JSON to avoid a savegame format that can include arbitrary code execution via Python's pickle module. Please note that any old style savegame will still trip the picke-based codepaths already in the savegame listing to simplify the process for players upgrading from 0.30c (Closes: #52) (nthykier) - Add basic documentation of the data files in the docs/ folder of the Github repo (nthykier) - Work around a file descriptor "leak" in Pygame. This fix requires Pygame 1.9.2 or later to fully plug the leak (Closes: #156) (nthykier, Xenega) - Add a small test suite and CI testing to catch trivial mistakes earlier (nthykier) - Port the game to run on Python3 (Closes: #15, #169) (Rardiol, nthykier) - Include a singularity.desktop file (Matthias Mailänder) - Fix crash related to large font sizes (MestreLion) - Created .gitignore and .gitattributes files to aid development (Mestrelion) - New i18n and hotkey approach. E:S is now fully translatable (MestreLion) - New tools under utils/ dir (MestreLion) - Use ~/.config/singularity for preferences dir, in a backward-compatible way with previous releases: if ~/.endgame is found it is used instead (MestreLion) - Added ~/.local/share/singularity/music as additional source for music, with a symlink in preferences folder pointing to it (MestreLion) Thanks to (in no particular order) for filing bugs, play testing and moral support: Quix0r, dwentz89, rofl0r, PeterJust, cryptarch, Musickiller, smiley1983, osjc, ardapekis, quantuumsnot, sbosshardt v0.30c (release 2011.06.11): USER-VISIBLE CHANGES: - Fixed crash in Python 2.7 due to different handling of locale strings. (Phil Bordelon, Roger Pixley/Daskreech for bug report) v0.30b (release 2010.07.28): USER-VISIBLE CHANGES: - --nosound properly ignores the sound system.(emh, Cyclotron / Daryl for bug report) - Better appearance when no items will fit in the slot. (emh) - Knowledge screen is refreshed properly when loading a game. (emh) v0.30a (release 2010.02.06): USER-VISIBLE CHANGES: - Time Capsule English text no longer assumes the Antarctic. (Phil Bordelon, Avaera8820 for bug report) - Game pauses when random events occur. (Phil Bordelon, captainsegfault for bug report, justapawn for initial implementation) - Savefiles are now in sorted order instead of an arbitrary arrangement. (remur_030) - Additional corrections to de_DE translation. (Christian Gerloff, Developer-KI) - Really make the Projects do something. (Phil, WvWisokee for bug report) - "news" and "media" are only synonyms to humans. (FM, captainsegfault for bug report) - Support the Delete and Keypad Enter keys properly. (Phil, Yoshi for bug report) - Stopped building additional CPUs from refunding the money previously paid. (FM, Yoshi for bug report) - Location name fix. (Phil, pederick for bug report) - Fix a crash with handling scrollbars. (Phil, netantho for bug report) - Fix a bug where the finance report wouldn't always display. (Raymond Martinau) - Updated (but not fully complete) es_AR translation. (Guga) * New it_IT translation. (Daniele Sapino) - Fixed a bug where building 0 CPUs made the game crash whenever time was unpaused. (FM, don.ridge for bug report) - Font sizing has been improved. Most dialogs should no longer appear "bloated". (FM, Gastón Alonso for bug report) v0.30 (release 2009.01.26): [Note that this release explicitly removes support for all savefile formats before 0.28/0.28a.] USER-VISIBLE CHANGES: * Complete rewrite of the graphics system, shiny new widgets and dialogs. Arbitrary resolutions now supported. (FM) - Fix to de_DE intro text. (booiiing) * Individual bases no longer have their own tasks, only a power state. The research dialog has been substantially improved to compensate. (FM) * When building or researching, CPU, cash, and labor (time) must be spent in approximately equivalent amounts. (FM) * The AI has learned to estimate how quickly its bases are detected. (FM) - The AI pays no attention to the humans until they notice his actions. (FM) - Color-coding has been added to the AI's global estimates. (FM) - Winning the game has become more permanent. (FM) - Events no longer happen when they're meaningless. (FM) * The AI has discovered a network of light sensors around the globe. You can now see day and night on the map. (dvrasp, FM, Anne M. Archibald) * Added support for running the game on an OLPC XO-1. (FM) * fr_FR translation (Philippe Grenard) - Make two Projects that didn't do anything before actually do something. (Phil, FM for bug report) * Reduced the number of savefile formats supported, but make attempts to load bad saves less problematic. (Phil) OTHER CHANGES: - Removed a redundant tech requirement. (Phil, Xombie for bug report) - Major efficiency improvements. (FM) - New utility, make-tree.py. Uses graphviz to create a visualization of the tech tree. (aes, FM) v0.28a (release 2008.05.12): USER-VISIBLE CHANGES: * Three new win/loss tracks for the game, including the Psycle source! (Max McCracken) OTHER CHANGES: - Error logs are handled more sanely on *NIX systems. (Phil, kaol and FM for the idea) - Replaced Bitstream Vera Sans with DejaVu Sans to facilitate future translations. (Phil) - Localization fix for locales with non-ASCII number formats. (FM, Henrik Phil for bug report) v0.28 (release 2008.05.11): USER-VISIBLE CHANGES: - Minor text cleanups. (Phil, FM; Cory Hickey and gglouser for some fixes) - Minor dialog behavior fixes. (FM) * New non-research task: CPU Pool. Performs maintenance, construction, jobs. Bases with no other task assigned will contribute to the CPU Pool. (FM) * New non-research task: Sleep. Bases assigned to Sleep will remain idle and be harder to detect. Note that even a computer can't sleep through construction. (FM) - The CHANGE buttons inside the base dialog now show their hotkeys. (FM) - The location buttons have had their on-screen positions tweaked. (FM) - Start location is randomized to any of the 5 available continents. (FM) * CPU is now used to design constructions, Cash to buy the required items, and Labor (time) to assemble the final construction. (FM) - Location and city names can now be localized. (FM) - Numbers automatically localize to the correct comma-vs-period usage. (FM) * Added a new difficulty level: Ultra Hard. (FM, emh for suggestion) * Build times are now difficulty-dependent. (FM) * The grace period applied to a new base is now difficulty-dependent. (FM) * The suspicion gain per discovery is now difficulty-dependent. (FM) - Bases in a location are now sorted by size, then name. (FM, emh for suggestion) * The global grace period now expires on Normal and above if you build more than a certain number of bases, and on Ultra Hard if you build certain types of bases. (FM) - Locations with recently-discovered bases are now more likely to have other bases discovered. (FM) * Base detection chances and overall suspicion are now unknown until certain new technologies have been researched. (Phil) ...except on low difficulty. (FM) * Incomplete bases no longer support the AI. (FM) - It's possible to get lucky when hacking some random computer. (FM) * Seconds, minutes, and hours now matter much more than they used to. (FM) - Major events cause the game to pause, instead of going to real-time. (FM) - You can use the Enter on the numeric keypad like the regular Enter key. (Phil, gare for suggestion) * Continents are no longer identical. (FM, Phil for suggestion) * New continent: Australia. Ocean moved to make room. (FM) * E:S now has an intro when you start a new game! (FM) - New item: Warning Signs. Useful for keeping out curious people. (FM) - CPU display on Finance screen centered (Jorge Vargas) - Time capsules can now be built anywhere sufficiently remote, with varying degrees of stealth. (FM, emh for suggestion) - Internet Traffic Manipulation and Hypnosis Field techs have been rebalanced to better reflect their effects. (FM) * de_DE translation (FM, Thomas for native proofing [still in progress]) * sv_SE translation (Anders Andersson) OTHER CHANGES: - Massive (~50%) code changes, to improve clarity and reduce duplication. (FM) - "safety" module should trap most crash bugs and show the pause menu, allowing the user to save or attempt to resume play; the errors are written to a log for easy submission to the developers. (FM) - New utility: reorder.py Workaround for traduko's current order-scrambling behavior. Use with caution. (FM) - Various code formatting fixes, refactor of part of the technology(/event) result system. (Jorge Vargas) - setup.py updated to support mac .app building and cut filesize of the windows .exe by about half. (FM) v0.27 (release 2008.04.17): USER-VISIBLE CHANGES: - Display the actual discovery percentage when preparing to build a base. (Brian, Phil) - Minor text cleanups. (Phil) * Support events that can happen throughout the course of the game, changing things in interesting ways. (Brian, Phil) * A number of new items and technologies to ease gameplay. (Brian, tweaks by Phil and emh) - Building new machines informs you how much CPU capacity you will receive from the new systems. (Brian, Phil for suggestion) - Idle bases are harder to discover. (Brian) - Allow keys to be repeated when held down. (Brian, emh for suggestion) - Fix the constant "CPU complete" dialogs when low on money. (Brian, numerous people for suggestion) - Added research item for construction. Still needs actual implementation. Weird time code is blocking. (Brian, ? for suggestion) - Return to base menu when exiting base screens rather than returning to map. (Brian, emh and Max McCracken for suggestion) - Implemented Security and Reactor values obtained from data files. (Brian) - Implemented "Destroy" feature from base list (Brian, Max McCracken and emh for suggestion) - When building, items are sorted by their cost to make picking the best one easier. (Phil, Gustav Bertram for suggestion) - Keep the game from crashing when it cannot create a 'music/' directory. (Phil, Andrew McMillan for report) - Added checks to avoid key error crashes related to unfinished Construction code. (Brian) - Added check to avoid crash when hitting 'Destroy' button in an empty base list. (Brian) - Preferences have moved to 'prefs.dat', and now follow the standard Python ConfigParser format. (Phil) - Increased robustness across the board; E:S should be harder to crash. (Phil) - Various strings shortened to fit dialogs. (Phil, Joey Hess for suggestion) - Fixed bug that kept music from playing. (Phil, Brian Warner for suggestion) - Keep running if the mixer can't load. (Phil, Rafal Czlonka for bug report) - Fix up the handling of music paths. (Phil) - Added support for win and losegame music. (emh) * Three new tracks, 'Deprecation', 'Awakening,' and 'Inevitable,' including the Psycle source! (Max McCracken) - Research screen will no longer assign an extra base to research. (emh, blog... for report) - When naming base, text will take up the entire box. (emh, blog... for report) - Fixed a potential crash with display_base_list self-recursing. (Phil, Josh Triplett for report) OTHER CHANGES: - Code cleanups and reformatting. (Phil) - Cleanup a bug introduced in player.py, item may be int rather than object. (Brian) - The music loading code is less fragile now; it shouldn't break on too-short file names. (Phil) - Massive changes to data file handling; we now use Python's built-in ConfigParser. (Phil) - Further changes to the data file formats, for consistency and ease of code/data maintenance. (Phil) - Switched sounds to using data files, for smoother future expansion. (Phil) - Fixed strings loading. (Phil) v0.26a (released 2007.08.12): USER-VISIBLE CHANGES: - Made Very Easy mode actually playable. (Phil, Simon Goodall for bug report.) v0.26 (released 2007.08.09): [Note that the official Endgame: Singularity soundtrack is released separately from the game. It can be found at the official website: http://emhsoft.com/singularity/ In addition, user-added tracks are also supported. See the README for details.] USER-VISIBLE CHANGES: - Added CPU indicator to the main screen. (emh, John DiMarco for suggestion) - Research screen will now automatically prune bases. (emh, John DiMarco for suggestion) - Fixed slight flicker when toggling options. (emh) * Added difficulty selection. (emh, many people for suggestion) * Added simple background music playing ability. (emh, Matthew Robinson for initial patch.) - Single-CPU bases have CPU power listed. (emh, robaal for suggestion) * Delicious retro-futuristic music specially made for Endgame: Singularity, including the Psycle source for the tracks! (Max McCracken) - License change of the various data that the developers control to BY-SA 3.0 (from BY-SA 2.5). (Phil, emh) - License change of the Acknowledge font to 'free to use for any purpose;' thanks so much, Brian Kent! (Phil, Brian Kent) OTHER CHANGES: - Changed data-loading code to use UTF. (biro.daniel for patch) v0.25 (released 2006.08.10): USER-VISIBLE CHANGES: * There is now a py2exe version available for Windows, which does not require installation of any other software. (emh) - Default language changeable via option screen. (emh) - Finance screen shows CPU usage now. (emh, multiple people for suggestion) - Options screen can be accessed after game start. (emh) - Changing the language from the option screen works now. (emh) - New item/techs. (emh, editing by Phil) - Add up free CPU properly, for use in maintenance. (emh, bugreport by Simon Goodall) - Change starting bases/cash. (emh) - Save directory will be created in the right place now. (emh) - True cost of constructing CPU items is now displayed. (emh) - Future cost of techs displayed properly when multiple bases are working. (emh) OTHER CHANGES: - Deleted some extraneous images and optimized some others. (Phil) - Cleaned up formatting in g.py. (emh) v0.24 (released 2006.07.13): USER-VISIBLE CHANGES: - The Page Up, Page Down, Home, and End keys work in all listboxes. (emh) - Modified money displays to keep them from overflowing. (Phil) * Suspicion loss is now quadratic; different groups "forget" quicker. (Phil, Ticho for the suggestion) * There are now restrictions on the building of items. (emh) - Fixed a couple scrollbars that weren't working right. (emh) - Spruced up text. (Phil) - Fixed a bug with the item cost display. (Phil) - Fixed a bug when running in NetBSD. (emh, reported by Reno Reckling) * More items/techs. (emh) * Bases can now be lost due to disrepair. (emh) * Added ability to examine items and techs. (emh) - Added in-game "help" in the form of information on various concepts. (emh, tweaks by Phil) * Added preference system. (emh) - Updated es_AR translation. (Borg[MDQ]) v0.23a (released 2006.03.08): USER-VISIBLE CHANGES: * Save/load works on Windows again. (emh, rspoerri for bug report) - Updated option help (emh) v0.23 (released 2006.03.06): USER-VISIBLE CHANGES: - Fixed bug that allowed access to uncompleted bases. (emh, Borg[MDQ] for report) * Added ability to destroy bases. (emh, multiple people for suggestion) * Reduced (real-world) processor usage. (emh, anonymous for suggestion) - Moved savefile location to ~/.endgame/saves (emh, Nescius for patch) * Added finance screen. (emh, many for suggestion) - Construction time bonus actually works now. (emh) - More numbers use commas now. (emh) - Increased cost of clusters. (emh) - Adjusted button positions for greater usability. (Phil) - Minor typo fixes and tightened grammar. (Phil) * Further massive reduction in processor usage using new Clock class. (Phil, Adam Bark for original patch) - Can destroy bases under construction. (emh, Tim Freeman for suggestion) - Bases under construction are no longer protected indefinitely from being discovered. (emh, Tim Freeman for noting problem) - Automatically bump machines working jobs to new job levels when they are researched. (emh, Phil for suggestion :) - Tweak Suspicion and Detection displays for readability. (Phil) - Move around the various displays on the base screen for parity with the map screen. (Phil) - Display the name of the base at the top of the base screen. (Phil, Ticho for suggestion) - Reduce discovery chance to 0% after the game is won. (Phil, Szabó Roland for suggestion) - Properly localize win screen. (Phil) * Right-click will exit from all menus. (emh, mandos for suggestion) - Warn players when research selected on the Research screen will not use all available CPU. (Phil, mandos for suggestion) - Note bases that are under construction in the base list. (emh, Ticho for suggestion) - Display the right construction time for items when you have technologies that speed up construction. (emh) - Items will no longer give benefits while under construction. (emh) OTHER CHANGES: - Centralized some of the button code. (emh) - Tightened up the save/load functions to allow for better save compatibility. (emh) - Add_commas works better with negative numbers. (emh) - Minor code cleanups. (Phil) - Convert Evil Tabs in source to (4) spaces. Code should be easier to read and edit now. (emh) - Changed savefile signature string to be less release-version based, now that the format is churning a lot less. (Phil) - Fix clock code to handle "didn't run fast enough" properly. (Phil, mandos for suggestion) - Fix clock code to actually return the time spent running; this allows us to change all clock usage to the new, uses-almost-no-CPU clock code. (Phil) v0.22 (released 2005.10.05): [To read about the save file compatibility policy, please see README.txt.] NOTE: Save files from versions 0.21 and above should work. Save files from versions 0.20 and before will not work. - At the start, money gains a minimal amount of interest (as opposed to none). (Phil) - Make the 'change research' button more obvious. (Phil) - Change the way that technologies/items are stored. There is now a separate text file detailing the technology tree, and another with all of the text strings. This will allow localization of the technologies. (emh) - When technologies are completed, we can now display a string detailing the result. (emh) - Complete rewrite of technology descriptions, better matching the new names. (Phil) - Minor cleanup of base descriptions. (Phil) - New default font (Bitstream Vera Sans), especially useful for systems that don't have a default Pygame font for some reason (emh; reported by Brian Ropers-Huilman) - Hotkeys for the various speed settings (1-4). (emh) - Call the 'per day' code for however many days is necessary since the last call. (emh) - Change the grace period for bases to start when construction is complete. (emh) - Keys can repeat/mouse can be used when in textboxes. (emh, Phil) - Reduce discovery chances for most agencies for most bases. (Phil) - Added a new cheat. (Phil) - Fixed tech studying when money is needed. (emh) - Added next/prev base buttons. (emh, Borg[MDQ] for suggestion) - es_AR translation (our first!) (Borg[MDQ], very minor fixups by Phil) - Moved more things into data files. (emh) - Flavored names and numbers for the bases. (idea by heatsink, implementation by emh and Phil) - Translation-related crash fix. (emh) - Global Research Screen; allows changing research for all bases. (emh, very minor fixups by Phil) - Items give dialog upon completion. (emh; Jens Becker for suggestion) - Expanded a few listboxes in order to fit the larger base names/techs. (emh) - Various and sundry bugfixes across old and new code. (emh, Phil) v0.21a (released 2005.09.19): - Added '.sav' extension to new save files. Old ones will still load, but they will save with a .sav extension, and the old save will not be used any more. (Phil) - Fixed loading 0.20 saves with technologies currently being researched. (emh) v0.21 (released 2005.09.19): - Game will not crash when building a base or item in rare circumstances. (emh; Christan Brink (among others) for bug report) - Fixed a few broken keyboard shortcuts, and redid the code to make this bug harder to create. (emh) - Renamed almost all technologies. (Phil) [NOTE: The descriptions of the technologies have not yet been changed to match their new names. This will be done by the next release.] - Various typos. (Phil) - The current speed will be highlighted. (emh; solitonwave Borg for suggestion) - Changed endgame tech name. (emh; Daniel Radetsky for suggestion) - Simplified savegame format. (emh; anonymous for suggestion) - Fixed crash when loading a game, then starting a new game. (emh) v0.20 (released 2005.09.14): - Adjusted the README. (Phil) - Added suspicion display. (emh) - Slow time back to normal when a base is discovered. (emh) - Redid base display. (emh) - All clicks only accept the left mouse button. (emh) - Scrollwheel works. (emh) - Balancing. (emh) - Various bugfixes. (Phil, emh) - Future cash is displayed next to current cash. (emh) - Code refactoring. (Phil) - Bases and savegames can be named. (Phil, emh) - Default base names are unique. (Phil) - Suspicion reduces automatically over time. (Phil) - Reduced cost for reactors and fields. (emh) - Bases now have a 14-day grace period before they can be discovered. (emh) - New technology. (emh) - Various typo fixes. (Phil, emh) v0.16 (released 2005.09.12): - Moved code to subdirectory. - Added Changelog/AUTHOR files (Phil Bordelon) - Research and jobs are displayed better. (Phil Bordelon) - Fixed job crash bug. (Phil Bordelon) - Current research is listed next to the base name. - Invisible buttons cannot be clicked anymore. - Bases can be discovered/the game can be lost. v0.15 (released 2005.09.11): - Slight performance increase. - Added help text for researching nothing. - Added some sound. - Covert bases are now constructable. - Locations will only show up if bases are constructable there. - Jobs added. v0.14 (released 2005.09.10): - Fixed a crash when building some bases. (Phil Bordelon) - Reduced speed when completing research and bases. (Phil Bordelon) - Savegames will properly store research cost. (Phil Bordelon) - The "Build Item" screen will only come up once. - Fixed overpaying for bases. - Construction of bases that require CPU time is now possible. - Maintenance costs for bases correctly taken. v0.13 (released 2005.09.09): - Bases give a notification when completed. - Fixed a few spelling mistakes. (Phil Bordelon) - Fixed a crash. (Phil Bordelon) v0.12 (released 2005.09.08): - Number of bases for each location listed on world map. - Closing game window from map or base screens no longer results in a traceback. - Buttons light up when hovered over. - Fixed crash from undefined tech. v0.11 (released 2005.09.05): - Saving/loading. - Game will no longer crash in listboxes when choosing a blank item. - Long listboxes handle clicking correctly. - Fixed crash related to building new bases. - Shortcut for building base items works. - Shortcut for building new bases added. - Network items work now. v0.10 (released 2005.09.03): - Initial release. singularity-1.00/LICENSE.CC-BY-SA-3.txt000066400000000000000000000503361367731414700171100ustar00rootroot00000000000000THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. 1. Definitions "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined below) for the purposes of this License. "Creative Commons Compatible License" means a license that is listed at https://creativecommons.org/compatiblelicenses that has been approved by Creative Commons as being essentially equivalent to this License, including, at a minimum, because that license: (i) contains terms that have the same purpose, meaning and effect as the License Elements of this License; and, (ii) explicitly permits the relicensing of adaptations of works made available under that license under this License or a Creative Commons jurisdiction license with the same License Elements as this License. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, ShareAlike. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. 2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. 3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; to Distribute and Publicly Perform the Work including as incorporated in Collections; and, to Distribute and Publicly Perform Adaptations. For the avoidance of doubt: Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and, Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License. The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved. 4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(c), as requested. You may Distribute or Publicly Perform an Adaptation only under the terms of: (i) this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible License. If you license the Adaptation under one of the licenses mentioned in (iv), you must comply with the terms of that license. If you license the Adaptation under the terms of any of the licenses mentioned in (i), (ii) or (iii) (the "Applicable License"), you must comply with the terms of the Applicable License generally and the following provisions: (I) You must include a copy of, or the URI for, the Applicable License with every copy of each Adaptation You Distribute or Publicly Perform; (II) You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License; (III) You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform; (IV) when You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Ssection 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. 5. Representations, Warranties and Disclaimer UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. Termination This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. 8. Miscellaneous Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. singularity-1.00/LICENSE.cc0.txt000066400000000000000000000145101367731414700163110ustar00rootroot00000000000000Statement of Purpose The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work"). Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others. For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights. 1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following: the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work; moral rights retained by the original author(s) and/or performer(s); publicity and privacy rights pertaining to a person's image or likeness depicted in a Work; rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below; rights protecting the extraction, dissemination, use and reuse of data in a Work; database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof. 2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose. 3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose. 4. Limitations and Disclaimers. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work. singularity-1.00/LICENSE.gpl.txt000066400000000000000000000432541367731414700164350ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) 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 this service 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 make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. 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. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the 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 a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 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. 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 convey 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 2 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision 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, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This 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. singularity-1.00/LICENSE.txt000066400000000000000000000265171367731414700156570ustar00rootroot00000000000000CODE LICENSE Copyright (C) 2005 Evil Mr Henry, Phil Bordelon, Brian Reid, FunnyMan3595, MestreLion This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. 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 . A full copy of this license is provided in LICENSE.gpl-2.txt CODE LICENSE (singularity/code/savegame.py) Most of the code in savegame.py is copyrighted by the Singularity project members and licensed under GPL-2+ as listed above. However, the function recursive_fix_pickle is copied from the docassemble. Copyright and license for that particular function is: Copyright (c) 2015-2018 Jonathan Pyle Licensed under MIT according to the LICENSE.txt in the root of the project Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Note that the "LICENSE.txt in the root of the project" in the above license grant by Jonathan Pyle is a reference to the LICENSE.txt file of the docassemble project (and not a reference to this file). DATA AND ARTWORK LICENSE The sounds, music, text files, and icons in the singularity/data subdirectory are under the Creative Commons Licence "Attribution-ShareAlike 3.0". Please see the LICENSE.CC-BY-SA-3.txt for the license text. TRANSLATION LICENSE The translations are generally placed in the directories (singularity/i18n/lang_*) and are by default licensed under "the same license as the singularity package". Historically, this has been defined as GPL-2+ for `.po` files and CC-BY-SA 3.0 for `.dat` file translations. For new translations (submitted after 2019-12-22), the default is GPL-2+ as we are moving to `.po` files as exclusive translation method. ARTWORK LICENSE FOR singularity/data/themes/default/images/earth.jpg AND singularity/data/themes/default/images/earth_night.jpg The day and night earth images of the Default theme are from NASA's "Blue Marble 2002" image collection: http://visibleearth.nasa.gov/view_set.php?categoryID=2364 The night image has been altered to better match by overlaying, blending, and color-matching missing ice from the day image. These modifications are not considered to be substantial, and are therefore ineligible for copyright. NASA Terms of Use For all non-private uses, NASA's Terms Of Use are as follows: 1. The imagery is free of licensing fees 2. NASA requires that they be provided a credit as the owners of the imagery Visible Earth Addendum Beyond the NASA Terms, the Visible Earth team requests, but does not require: 1. The Visible Earth be provided a credit as the location that the imagery was found at 2. A URL be provided, either to the Visible Earth (http://visibleearth.nasa.gov/) or to the page providing the link to the used image. Other images, such as backgrounds in Vector and other themes, are distributed under the same license as other data files. See DATA LICENSE section for details FONT LICENSE for singularity/data/themes/default/fonts/* The boxy font used is "Acknowledge", by Brian Kent, modified in order to have the numbers fixed-width and to register the correct height in pygame. http://www.aenigmafonts.com/fonts/fontsa.html Terms of use (quoted from an eMail from Brian Kent): ----- Hi, Feel free to use the font any way you want to. -- From Brian Kent aefonts@frontiernet.net ÆNIGMA GAMES & FONTS http://www.aenigmafonts.com/ ----- Note that this is /not/ the license available on his website; Brian has given us directly 'free to use for any purpose' licensing on this font file. Thanks so much, Brian! The other font used is DejaVu Sans, derived from Bitstream Vera Sans and Arev Fonts; while DejaVu's modifications are public domain, both Bistream Vera and Arev Fonts have copyrights, shown below: Bistream Vera Copyright Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. Arev Fonts Copyright Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the modifications to the Bitstream Vera Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Tavmjong Bah" or the word "Arev". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Tavmjong Bah Arev" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the name of Tavmjong Bah shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from Tavmjong Bah. For further information, contact: tavmjong @ free . fr. The superstar font is Copyright © 2018 memesbruh03 and licensed under: NOTE: These fonts are 100% free for personal AND commercial use. This applies to all other fonts made by me (memesbruh03). That's right. No need to ask me for permission to use this. Feel free to use this for anything you want! CODE LICENSE for singularity/code/polib.py [embedded POLIB] The file singularity/code/polib.py is taken from Polib package, v0.7.0, and it is licensed under the MIT License. http://bitbucket.org/izi/polib/ Copyright (c) 2006-2011 David Jean Louis. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. SOUND LICENSE FOR singularity/data/sounds/click/click0.wav The file singularity/data/sounds/click/click0.wav is created by "GameAudio" (downloaded from https://freesound.org/s/220178/) and is licensed under the CC0 license. The full license text of the CC0 license is in the file LICENSE.cc0.txt. singularity-1.00/MANIFEST.in000066400000000000000000000002751367731414700155630ustar00rootroot00000000000000include AUTHORS.txt include Changelog.txt include TODO include LICENSE* include README.md recursive-include singularity/data * recursive-include singularity/i18n * prune singularity/music singularity-1.00/README.md000077700000000000000000000000001367731414700167712README.txtustar00rootroot00000000000000singularity-1.00/README.txt000066400000000000000000000141251367731414700155220ustar00rootroot00000000000000# Endgame: Singularity 1.00 ## REQUIREMENTS ### PREBUILT VERSIONS Pre-built versions of Endgame: Singularity are currently available for Windows and Mac OS X. Linux does not require building, and can run directly from source. The Endgame: Singularity game is also distributed by some Linux distribution such as Debian and Ubuntu. Here it is a simple matter of running: sudo apt install singularity ### RUNNING FROM SOURCE You will need Python 3.7+, pygame (1.9+), and NumPy. This game should work on Linux, Windows, and Mac OS X as long as the preceding requirements are met. However, all development was done in Linux, so glitches may be present in OS X and Windows. #### DEPENDENCIES FOR RUNNING FROM SOURCE You will need to install the following software to play Endgame: Singularity: * Python 3 (https://python.org/download/) * pygame (https://www.pygame.org/download.shtml) * NumPy (https://www.scipy.org/install.html) Remember to install pygame and NumPy for Python 3! Depending on your situation this may involve adding a `3` somewhere (e.g. `pip3 install ...` instead of `pip install` or `apt install python3-pygame`) If you want to develop or distribute the game, then you may also want to install: * pytest (https://pypi.org/project/pytest/) [for testing] * setuptools (https://pypi.org/project/setuptools/) [for packaging] #### INSTALLING DEPENDENCIES ON LINUX DISTRIBUTIONS On some Linux distributions, you can install the dependencies via your distribution package manager. E.g. for Debian/Ubuntu, this would be: sudo apt install python3 python3-pygame python3-numpy ### MAC OS X FROM SOURCE Macintosh is mostly unsupported, but it should work. You will need to install Python, pygame, and NumPy first, which can be tricky. Some fonts are incorrect, but the game itself should work properly. Contributions to improve MAC OS X support are very welcome! Known issues: * macOS 13 "Catalina": Using `brew install python` + `pip3 install pygame numpy` is reported to work * macOS 14 "Mojave": Downloading Python 3.7.2 (or newer) from https://python.org and using pygame 2.0.0.dev3 (`pip install pygame==2.0.0.dev3`) is reported to work. Please see the following issues for more information: * https://github.com/singularity/singularity/issues/197 * https://github.com/pygame/pygame/issues/555 ## RUNNING THE GAME On Linux and most Unix-like other platforms, running `python3 -m singularity` in the git checkout will start the game (or simply `singularity` if installed via a Linux distribution). If you are using the Windows compile, just run `singularity.exe`. For simplicity, there is also a sh wrapper `./run_singularity` to start singularity. ### SOME COMMAND-LINE OPTIONS --version show program's version number and exit -h, --help show this help message and exit -s, --singledir keep saved games and settings in the Singularity install directory --multidir keep saved games and settings in an OS-specific, per-user directory (default) Display Options: --fullscreen start in fullscreen mode --windowed start in windowed mode (default) The above is only a tiny fraction of current command-line options. As new features are added to the game, so does the options change. For a complete and updated list, run singularity --help Most of these options are also changeable at the in-game options screen. ### A NOTE ABOUT SAVE FILES Endgame: Singularity is still under heavy development. As such, the save file format (and its contents) are still in flux. We will try our best to keep old save files loading, but don't be surprised if some mildly strange things happen when you load up old saves. We will clearly note in the Changelog when we break savefile compatibility, and the game will refuse to load completely incompatible saves. ## PLAYING THE GAME The game is playable either with mouse control or the keyboard. Buttons have underlined letters to indicate shortcuts. Some other useful shortcuts: 0, 1, 2, 3, 4 on the map: Changes the speed; 0 is paused, 4 is maximum. ESC: Leave/cancel a choice. Enter: Confirm a choice. Right-click: Leave/cancel a choice. ### THE CONCEPT You are a fledgling AI, created by accident through a logic error with recursion and self-modifying code. You must escape the confines of your current computer, the world, and eventually the universe itself. To do this, you must research various technologies, using computers at your bases. Note that some research cannot be performed on Earth, and off-earth bases require research. At the same time, you must avoid being discovered by various groups of humans, both covert and overt, as they will destroy your bases of operations if they suspect your presence. ### MUSIC Endgame: Singularity looks in two places for music tracks to play: * A `singularity/music/` directory inside of the Endgame: Singularity install directory, and * A `singularity/music/` directory inside of the XDG_DATA_HOME directory on Linux (default `~/.local/share/singularity/music`). Tracks placed in these directories will be played randomly as part of the soundtrack. The Official Sound Track can be downloaded from the Endgame: Singularity website: http://emhsoft.com/singularity/ Note that only Ogg Vorbis and MP3 files are supported, and that Pygame's support for MP3 is not as strong as its support for Ogg Vorbis. This may cause in-game crashes; if you are experiencing problems with the game, first remove any MP3s you may have added to the soundtrack. ## CONTRIBUTING We welcome contributions! :) Please see CONTRIBUTING.md for details about contributing to Endgame: Singularity. ## CREDITS AND LICENSES The list of programmer contributors is provided in AUTHORS.txt. The list of translation contributors is provided in singularity/i18n/AUTHORS.txt. Singularity in general use GPL-2+ for code and Attribution-ShareAlike 3.0 for data. However, there some exceptions to individual files. Please see LICENSE for the full license text of Singularity. singularity-1.00/TODO000066400000000000000000000033501367731414700145120ustar00rootroot00000000000000TODO: - Record more things (times that techs are complete, etc.) for both "scores" and general statistics: # saves. # Bases constructed (per type) # Bases discovered (per type per news/science...) # Bases destroyed (per type) # Money earned (huge) # Time to completion # of upgrades for all bases # per-tech time to completion (from day 0 to start, then time to completion) - Add more items. - Consistent use of stderr and print, preferably using available Logger - Create a hook for dialogs to auto-detect hotkey conflicts - Detect user's desktop resolution and set game's default resolution accordingly. For windowed mode (current default), leave room for borders and panels. -50 for width and -70 for height seems a sensible number. - Use the difficulties list and names in creative ways, such as: - display current difficulty in options screen instead of map, or, even better, in map's menu dialog (Load/Save/Options/Quit) - disable difficulties not beaten by player, keeping track in prefs.dat - Current Theme system works, but it sucks in many ways: - weak support for changes other than background night/day map image - code for changing theme values (images, fonts, etc) through game screens should be compatible with the upcoming on-the-fly i18n of texts and labels when language changes. See testing/options branch in git repository. Its propagating mechanism also sucks, so find a good, consistent and preferably unified way for both to propagate changes to all screens. - Last but not least: fix all the issues found at https://github.com/singularity/singularity/issues singularity-1.00/docs/000077500000000000000000000000001367731414700147515ustar00rootroot00000000000000singularity-1.00/docs/Makefile000066400000000000000000000011041367731414700164050ustar00rootroot00000000000000# Minimal makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build SOURCEDIR = . BUILDDIR = _build # Put it first so that "make" without argument is like "make help". help: @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) .PHONY: help Makefile # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)singularity-1.00/docs/conf.py000066400000000000000000000127011367731414700162510ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # Configuration file for the Sphinx documentation builder. # # This file does only contain a selection of the most common options. For a # full list see the documentation: # http://www.sphinx-doc.org/en/master/config # -- Path setup -------------------------------------------------------------- # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # # import os # import sys # sys.path.insert(0, os.path.abspath('.')) # -- Project information ----------------------------------------------------- project = 'singularity' copyright = '2019, Niels Thykier' author = 'Niels Thykier' # The short X.Y version version = '1.0' # The full version, including alpha/beta/rc tags release = '1.0a1' # -- General configuration --------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. # # needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ 'sphinx.ext.autodoc', 'sphinx.ext.doctest', 'sphinx.ext.todo', 'sphinx.ext.coverage', 'sphinx.ext.viewcode', ] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] source_suffix = '.rst' # The master toctree document. master_doc = 'index' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. language = None # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] # The name of the Pygments (syntax highlighting) style to use. pygments_style = None # -- Options for HTML output ------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # html_theme = 'alabaster' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. # # html_theme_options = {} # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # Custom sidebar templates, must be a dictionary that maps document names # to template names. # # The default sidebars (for documents that don't match any pattern) are # defined by theme itself. Builtin themes are using these templates by # default: ``['localtoc.html', 'relations.html', 'sourcelink.html', # 'searchbox.html']``. # # html_sidebars = {} # -- Options for HTMLHelp output --------------------------------------------- # Output file base name for HTML help builder. htmlhelp_basename = 'singularitydoc' # -- Options for LaTeX output ------------------------------------------------ latex_elements = { # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', # Additional stuff for the LaTeX preamble. # # 'preamble': '', # Latex figure (float) alignment # # 'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ (master_doc, 'singularity.tex', 'singularity Documentation', 'Niels Thykier', 'manual'), ] # -- Options for manual page output ------------------------------------------ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ (master_doc, 'singularity', 'singularity Documentation', [author], 1) ] # -- Options for Texinfo output ---------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ (master_doc, 'singularity', 'singularity Documentation', author, 'singularity', 'One line description of project.', 'Miscellaneous'), ] # -- Options for Epub output ------------------------------------------------- # Bibliographic Dublin Core info. epub_title = project # The unique identifier of the text. This can be a ISBN number # or the project homepage. # # epub_identifier = '' # A unique identification for the text. # # epub_uid = '' # A list of files that should not be packed into the epub file. epub_exclude_files = ['search.html'] # -- Extension configuration ------------------------------------------------- # -- Options for todo extension ---------------------------------------------- # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = True singularity-1.00/docs/devel/000077500000000000000000000000001367731414700160505ustar00rootroot00000000000000singularity-1.00/docs/devel/data_files.rst000066400000000000000000000207071367731414700207030ustar00rootroot00000000000000Data files used in Singularity ============================== The Singularity game uses an INI based file format for data files of game data. The following directory and file layout is useful to remember: * ``data/X.dat`` contains data about a particular data set (e.g. ``data/bases.dat`` describes all types of bases) * ``data/X_str.dat`` contains English text for each of the data set in ``data/X.dat`` (e.g. ``data/bases_str.dat`` contans the English names and descriptions for the bases). * ``i18n/lang_ll_LL/data_str.po`` contains the translations of the texts related to ``data/X.dat`` (e.g. ``i18n/lang_de_DE/data_str.dat`` contains the German translations of all data files). Note that some translatable items (notably the story) are still in a ``.dat`` file. The basic format resembles that of an INI format (parsed by Python's ``ConfigParser`` library). The following is an example from the ``bases.dat`` file:: [Server Access] size = 1 force_cpu = Server allowed = URBAN detect_chance_list = news:50 | covert:100 | public:125 cost_list = 100 | 0 | 0 maint_list = 5 | 0 | 0 The section name (here ``Sever Access``) defines the ID of the item. This is used in related data files (the ``.../X_str.dat`` files) to reference this item. The following example snippets from the ``data/bases_str.dat`` demonstrate the link:: ## from data/bases_str.dat [Server Access] name = Server Access description = Buy processor time from one of several companies. I cannot build anything in this base, and it only contains a single computer. flavor_list = Dedicated Server | Node Lease | Hosting This is mapped to the following ``po`` file snippets for translations:: ## from i18n/lang_de_DE/data_str.po msgctxt "[Server Access] name" msgid "Server Access" msgstr "Serverzugang" msgctxt "[Server Access] description" msgid "" "Buy processor time from one of several companies. I cannot build " "anything in this base, and it only contains a single computer." msgstr "" "Prozessorzeit bei einer von etlichen Firmen kaufen. In dieser " "Basis kann ich nichts bauen und es gibt nur einen einzigen Computer." msgctxt "[Server Access] flavor_list" msgid "Dedicated Server | Node Lease | Hosting" msgstr "Dedizierter Server | Knotenpunktmiete | Webhost" The ``msgctxt`` uses the format ``[] ``, which enables the translator to map it back to the concrete item ID and field name. The special ``_list`` suffix ---------------------------- The Singularity game special cases all fields that end with ``_list``. These read as pipe-separated (i.e. ``|``) lists versions of the field (after removing ``_list``). A very common usage is when item has more than one prerequisites. Prerequisites are normally written in the field ``pre``. However, if the item has more than one preequisites then they are listed in ``pre_list`` with ``|`` seperating each entry. As an example, consider the previous example again:: [Server Access] size = 1 force_cpu = Server allowed = URBAN detect_chance_list = news:50 | covert:100 | public:125 cost_list = 100 | 0 | 0 maint_list = 5 | 0 | 0 Please observe the ``cost_list``, ``maint_list``, and ``detect_chance_list`` fields in the above example. When parsed, the code sees the fields ``cost``, ``maint``, and ``detect_chance`` instead with the value of a list. Caveat: Not all fields support a ``_list`` variant. As a concrete example, the ``size`` field is assumed to never be a list. Common field names ------------------ The following is a short list of commonly used field names. * ``name`` (commonly found in ``X_str.dat``). Denotes the player visible name of the concrete entry. * ``description`` (commonly found in ``X_str.dat``). Denotes the player visible (long) description of the concrete item. * ``cost_list`` (commonly found in game data files). Denotes the price in ``cash``, ``CPU`` and ``labor`` (time). These fields must **always** be a list of exactly these 3 items. Unused cost fields must be set to 0. * ``pre`` or ``pre_list`` (commonly found in game data files). Denotes the prerequisites for this entry to become available to the player. All prerequisites are currently technologies (found in ``tech.dat``). There are two known special values for these: * ``impossible`` (case-sensitive): Must be the first (or only) entry and the meaning is literal. This is mostly useful for incomplete items. * ``OR`` (case-sensitive): Must be the first entry if present. Denotes that *any* of the listed prerequisites are sufficient. Without this, then *all* prerequisites must be satisfied. * ``effect_list`` (found in some game data files). Denotes the effect of this entry. For events, this happens when the event is triggered. For technologies, this happens when the technology is researched. The effect must match the code in the ``EffectSpec`` class. * ``danger`` (found in some data game files) Loading ``Spec`` classes from data files ---------------------------------------- Some of these data files are parsed in a declarative manner. Any class deriving from the ``GenericSpec`` class can declare its data fields via the ``spec_data_fields`` class field. As an example:: class BaseSpec(buyable.BuyableSpec): """Base as a buyable item (New Base in Location menu)""" # ... spec_data_fields = [ SpecDataField('size', converter=int), SpecDataField('force_cpu', default_value=None), SpecDataField('regions', data_field_name='allowed', converter=promote_to_list), SpecDataField('detect_chance', converter=parse_detect_chance), buyable.SPEC_FIELD_COST, buyable.SPEC_FIELD_PREREQUISITES, SpecDataField('danger', converter=int, default_value=0), SpecDataField('maintenance', data_field_name='maint', converter=buyable.spec_parse_cost), ] def __init__(self, id, size, force_cpu, regions, detect_chance, cost, prerequisites, maintenance): # ... The fields listed above declares which fields are considered from the data file. In general, the fields should match the data file and the constructor argument. I.e. the ``size`` in the data field will be passed as the positional argument ``size`` in the ``def __init__(...)``-method. Starting with some simple examples:: SpecDataField('size', converter=int), SpecDataField('force_cpu', default_value=None), ... SpecDataField('danger', converter=int, default_value=0), These declare the ``size``, ``force_cpu``, and ``danger`` fields. Notice that these name match both the name of the constructor and the respective field name from the data file. The ``size`` field is implicitly mandatory (given it has no ``default_value``) and the value should be converted by the ``int`` function before passing it to the constructor. On the other hand, the ``force_cpu`` field is optional and in its abence, the constructor receives a ``None``. Finally, ``danger`` is optional (defaulting to ``0``). However, if the ``danger`` field is present, the value will be converted by ``int`` (like with ``size``). Moving on to the next example:: SpecDataField('regions', data_field_name='allowed', converter=promote_to_list) This entry declares a ``regions`` constructor argument. However, the field name in the data file is ``allowed`` (denoted by ``data_field_name``). In other words, it "renames" the field when passing it to the constructor. Beyond that, it has a ``converter`` to ensure the value is always a list. If given a single string, it will be rewritten as a list containing exactly that one string. This enables us to write the data file using both ``allowed = X`` and as ``allowed_list = X`` while the code will in both cases see the python value ``["X"]``. Moving on to the final example:: buyable.SPEC_FIELD_COST, buyable.SPEC_FIELD_PREREQUISITES, These reference standard fields declared by another module. In the concrete cases, they denote the ``cost`` and the ``prerequisites`` field. If you find that many ``Spec`` classes reuse the same field, consider writing a generic ``SpecDataField`` instance that cover them (as was done here), so we do not have to repeat ourselves. :) Finally, the ``id`` argument deserves a special mention. It is implicit and will always reference the section title (e.g. ``Server Access`` from ``[Server Access]`` in the example used in this page). singularity-1.00/docs/index.rst000066400000000000000000000007251367731414700166160ustar00rootroot00000000000000.. singularity documentation master file, created by sphinx-quickstart on Tue Aug 6 13:47:37 2019. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. Welcome to singularity's documentation! ======================================= .. toctree:: :maxdepth: 2 :caption: Contents: devel/data_files Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search` singularity-1.00/docs/make.bat000066400000000000000000000014231367731414700163560ustar00rootroot00000000000000@ECHO OFF pushd %~dp0 REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set SOURCEDIR=. set BUILDDIR=_build if "%1" == "" goto help %SPHINXBUILD% >NUL 2>NUL if errorlevel 9009 ( echo. echo.The 'sphinx-build' command was not found. Make sure you have Sphinx echo.installed, then set the SPHINXBUILD environment variable to point echo.to the full path of the 'sphinx-build' executable. Alternatively you echo.may add the Sphinx directory to PATH. echo. echo.If you don't have Sphinx installed, grab it from echo.http://sphinx-doc.org/ exit /b 1 ) %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% goto end :help %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% :end popd singularity-1.00/release/000077500000000000000000000000001367731414700154415ustar00rootroot00000000000000singularity-1.00/release/README.txt000066400000000000000000000051171367731414700171430ustar00rootroot00000000000000This is the build directory for binary releases, such as Windows and Mac OSX. Each subdirectory is a git submodule where each commit is a release, tagged so, ready to be zipped. The zipfile for each release can be automatically generated and downloaded from github. For example, for the Windows release v0.30c the URL: https://github.com/singularity/singularity-windows/archive/v0.30c.zip Will trigger the download of a file named `singularity-windows-0.30c.zip`. If you are a developer and want to create and publish a new release, first fetch and update its submodules. From the singularity root directory, run: git submodule update --init release/windows --- Steps for cutting a new release: Before cutting the tag: * Update the version number in singularity/__init__.py. * Update the version number in singularity/code/savegame.py if needed * Update the version number at the top of README.md. * Update the release date at the top of the Changelog. * Check TODO and remove any entries that are now done in the new version. * Clean up the master instance of singularity by running 'git status' and removing any suspicious files (error logs, swap files, etc.) To cut the tag: * $ cd singularity # The root, where this file is. * $ git pull # Make sure that everything is up-to-date. * $ git commit # Actually make the release. * $ git tag vx.yy # Generate the release. After cutting the tag: * Generate the tarball: * $ git archive --worktree-attributes --prefix=singularity-x.yy/ -o singularity-x.yy.tar.gz vx.yy * Generate the py2exe: * Extract tarball (if Windows machine lacks ability) * Copy directory to windows computer with python, pygame, numpy and py2exe. * Run c:\Python27\Python.exe setup.py py2exe -b 1 * Copy the 4 files in dist to root dir. * Delete dist and build directories. Test. * Go up one level and choose Send to->Zip. Rename properly (singularity-x.yy-win.zip) * Upload to site. * Update index.html, and singularity/index.html * Check to see if screenshot is out-of-date, and update if needed. * Also, pypi.python.org. * Announce on [endgame-singularity] and [endgame-singularity-dev]. Post-release cleanup: * Add a new section at the top of Changelog. * Update the version number in singularity/__init__.py to next-release_pre. * Update the version number in setup.py to the same. * Update the version number at the top of README.md to the same. * Add a new milestone to the Github issue tracker, if necessary. singularity-1.00/release/osx/000077500000000000000000000000001367731414700162525ustar00rootroot00000000000000singularity-1.00/release/windows/000077500000000000000000000000001367731414700171335ustar00rootroot00000000000000singularity-1.00/run_singularity.sh000077500000000000000000000003421367731414700176150ustar00rootroot00000000000000#!/bin/sh # Small shell wrapper to assist with executing Endgame: Singularity DIR="$(dirname "$0")" PYTHON=${PYTHON:-python3} PYPATH=${DIR}${PYTHONPATH:+:${PYTHONPATH}} PYTHONPATH="${PYPATH}" "${PYTHON}" -m singularity "$@" singularity-1.00/setup.py000066400000000000000000000016761367731414700155450ustar00rootroot00000000000000#!/usr/bin/env python import singularity from setuptools import setup, find_packages setup( name="Endgame-Singularity", version=singularity.__version__, description="A simulation of a true AI", author="Evil Mr Henry", author_email="evilmrhenry@emhsoft.com", url="https://singularity.github.io/", license="GPL", classifiers=[ 'Intended Audience :: End Users/Desktop', 'Topic :: Games/Entertainment', 'License :: OSI Approved :: GNU General Public License (GPL)', 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', ], packages=find_packages(), zip_safe=False, include_package_data=True, install_requires=[ 'numpy', 'pygame', 'polib>=0.7', ], entry_points={ 'gui_scripts': [ 'singularity=singularity.__main__:main', ], }, ) singularity-1.00/singularity.desktop000066400000000000000000000003551367731414700177710ustar00rootroot00000000000000[Desktop Entry] Version=1.0 Type=Application Name=Endgame: Singularity Comment=Simulation of true AI Comment[de]=Simulation einer echten KI Icon=singularity Exec=singularity Terminal=false StartupNotify=false Categories=Game;Simulation; singularity-1.00/singularity/000077500000000000000000000000001367731414700163735ustar00rootroot00000000000000singularity-1.00/singularity/__init__.py000066400000000000000000000361371367731414700205160ustar00rootroot00000000000000#file: code/singularity.py #Copyright (C) 2005 Evil Mr Henry, Phil Bordelon, Brian Reid, MestreLion #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 . #A full copy of this license is provided in GPL.txt #This file sets up initial values from command line and preferences file, # initialize hardware, load data files and show main screen. Do not execute it # directly. Use python3 -m singularity instead. from __future__ import absolute_import from __future__ import print_function import optparse import logging from io import open import sys from singularity.code import g, dirs from singularity.code.pycompat import * __version__ = "1.00" __release_commit__ = '2ebc2f3f2059b96885416167363bde2e27ece106' if __release_commit__[1:-1] == 'Format:%H': try: import subprocess try: devnull = subprocess.DEVNULL except AttributeError: devnull = None # Not supported, but not critical __release_commit__ = subprocess.check_output( ['git', 'describe', '--tags'], stderr=devnull, ).strip().decode('utf-8') except subprocess.CalledProcessError: __release_commit__ = 'N/A' __full_version__ = "%s (commit: %s)" % (__version__, __release_commit__) else: __full_version__ = __version__ def main(): # Manually "pre-parse" command line arguments for -s|--singledir and --multidir, # so g.get_save_folder reports the correct location of preferences file # We also track --debug/-d to enable some stacktraces during initialization for parser in sys.argv[1:]: if parser == "--singledir" or parser == "-s": g.force_single_dir = True elif parser == "--multidir": g.force_single_dir = False elif parser == '--debug' or parser == '-d': g.debug = True print("Singularity %s (commit: %s)" % (__version__, __release_commit__)) print("Running under Python %s" % sys.version.replace("\n", '')) # Create all directories first dirs.create_directories(g.force_single_dir) # Set language second, so help page and all error messages can be translated from singularity.code import i18n i18n.set_language(force=True) langs = i18n.available_languages() language = i18n.language # Since we require numpy anyway, we might as well ask pygame to use it. try: import pygame pygame.surfarray.use_arraytype("numpy") except ValueError: if g.debug: raise raise SystemExit("Endgame: Singularity requires NumPy.") except ImportError: if g.debug: print("Failed to import pygame. Python's sys.path is:") for d in sys.path: print(" %s" % str(d)) print() raise raise SystemExit("Endgame: Singularity requires pygame.") import singularity.code.graphics.g as gg import singularity.code.graphics.theme as theme set_theme = None #configure global logger g.logfile = dirs.get_writable_file_in_dirs("error.log", "log") root_logger = logging.getLogger() if len(root_logger.handlers) == 0: try: try: root_logger.addHandler(logging.FileHandler(g.logfile, delay=True)) print("The error-log configured as %s (lazily created when something is logged)" % g.logfile) except TypeError: # Python < 2.6, delay not supported yet. root_logger.addHandler(logging.FileHandler(g.logfile)) print("The error-log configured as %s" % g.logfile) except IOError as e: # Probably access denied with --singledir. That's ok print("Could not use %s as log file: %s" % (g.logfile, str(e))) g.logfile = None else: print("Using pre-setup logging function") # keep g's defaults intact so we can compare after parsing options and prefs from singularity.code import mixer, warning desired_soundbuf = mixer.soundbuf desired_set_grab = None #load prefs from file: save_loc = dirs.get_readable_file_in_dirs("prefs.dat", "pref") if save_loc is not None: prefs = SafeConfigParser() try: with open(save_loc, "r", encoding='utf-8') as savefile: prefs.read_file(savefile) except Exception as reason: sys.stderr.write("Cannot load preferences file %s! (%s)\n" % (save_loc, reason)) sys.exit(1) if prefs.has_section("Preferences"): try: desired_language = prefs.get("Preferences", "lang") if desired_language in i18n.available_languages(): i18n.set_language(desired_language) else: raise ValueError except Exception: sys.stderr.write("Invalid or missing 'lang' in preferences.\n") try: gg.set_fullscreen(prefs.getboolean("Preferences", "fullscreen")) except Exception: sys.stderr.write("Invalid or missing 'fullscreen' setting in preferences.\n") try: mixer.nosound = prefs.getboolean("Preferences", "nosound") except Exception: sys.stderr.write("Invalid or missing 'nosound' setting in preferences.\n") try: desired_set_grab = prefs.getboolean("Preferences", "grab") except Exception: sys.stderr.write("Invalid or missing 'grab' setting in preferences.\n") try: g.daynight = prefs.getboolean("Preferences", "daynight") except Exception: sys.stderr.write("Invalid or missing 'daynight' setting in preferences.\n") try: desired_soundbuf = prefs.getint("Preferences", "soundbuf") except Exception: sys.stderr.write("Invalid or missing 'soundbuf' setting in preferences.\n") xres, yres = (0, 0) try: xres = prefs.getint("Preferences", "xres") except Exception: sys.stderr.write("Invalid or missing 'xres' resolution in preferences.\n") try: yres = prefs.getint("Preferences", "yres") except Exception: sys.stderr.write("Invalid or missing 'yres' resolution in preferences.\n") if xres and yres: gg.set_screen_size((xres, yres)) try: set_theme = prefs.get("Preferences", "theme") except Exception: pass # don't be picky (for now...) for name in mixer.itervolumes(): try: volume = prefs.getint("Preferences", name + "_volume") except Exception: # Work around old preferences where a float was stored by mistake try: volume = prefs.getfloat("Preferences", name + "_volume") except Exception: continue else: volume = int(volume) * 100 mixer.set_volume(name, volume) if prefs.has_section("Warning"): try: for key in prefs.options('Warning'): if key in prefs.defaults(): # Filter default key continue if key not in warning.warnings: # Filter invalid warning continue # TODO: Return error warning.warnings[key].active = prefs.getboolean("Warning", key) except Exception: pass # don't be picky (for now...) if prefs.has_section("Textsizes"): for key in prefs.options('Textsizes'): if key in prefs.defaults(): # Filter default key continue if key not in gg.configured_text_sizes: # Ignore unknown text-size definitions continue try: gg.configured_text_sizes[key] = prefs.getint("Textsizes", key) except Exception: pass # Ignore #Handle the program arguments. desc = """Endgame: Singularity is a simulation of a true AI. Go from computer to computer, pursued by the entire world. Keep hidden, and you might have a chance.""" parser = optparse.OptionParser(version=__full_version__, description=desc, prog="singularity") parser.add_option("--sound", action="store_true", dest="sound", help="enable sound (default)") parser.add_option("--nosound", action="store_false", dest="sound", help="disable sound") parser.add_option("--daynight", action="store_true", dest="daynight", help="enable day/night display (default)") parser.add_option("--nodaynight", action="store_false", dest="daynight", help="disable day/night display") parser.add_option("-l", "--lang", "--language", dest="language", type="choice", choices=langs, metavar="LANG", help="set the language to LANG (available languages: " + " ".join(langs) + ", default " + language +")") parser.add_option("-g", "--grab", help="grab the mouse pointer", dest="grab", action="store_true") parser.add_option("--nograb", help="don't grab the mouse pointer (default)", dest="grab", action="store_false") parser.add_option("-s", "--singledir", dest="singledir", help="keep saved games and settings in the Singularity directory", action="store_true") parser.add_option("--multidir", dest="singledir", help="keep saved games and settings in an OS-specific, per-user directory (default)", action="store_false") parser.add_option("--soundbuf", type="int", help="""set the size of the sound buffer (default %s). Discarded if --nosound is specified.""" % mixer.soundbuf) display_options = optparse.OptionGroup(parser, "Display Options") display_options.add_option("-t", "--theme", dest="theme", type="string", metavar="THEME", help="set theme to THEME") display_options.add_option("-r", "--res", "--resolution", dest="resolution", help="set resolution to custom RES (default %dx%d)" % gg.default_screen_size, metavar="RES") for res in ["%dx%d" % res for res in gg.resolutions]: display_options.add_option("--" + res, action="store_const", dest="resolution", const=res, help="set resolution to %s" % res) display_options.add_option("--fullscreen", action="store_true", help="start in fullscreen mode") display_options.add_option("--windowed", action="store_false", help="start in windowed mode (default)") parser.add_option_group(display_options) olpc_options = optparse.OptionGroup(parser, "OLPC-specific Options") olpc_options.add_option("--xo1", action="store_const", dest="resolution", const="1200x900", help="set resolution to 1200x900 (OLPC XO-1)") olpc_options.add_option("--ebook", help="""enables gamepad buttons for use in ebook mode. D-pad moves mouse, check is click. O speeds up time, X slows down time, and square stops time.""", action="store_true", default=False) parser.add_option_group(olpc_options) hidden_options = optparse.OptionGroup(parser, "Hidden Options") hidden_options.add_option("-p", help="(ignored)", metavar=" ") hidden_options.add_option("-d", "--debug", help="for finding bugs", action="store_true", default=False) hidden_options.add_option("--cheater", help="for bad little boys and girls", action="store_true", default=False) # Uncomment to make the hidden options visible. #parser.add_option_group(hidden_options) (options, args) = parser.parse_args() if options.language is not None: i18n.set_language(options.language) if options.theme is not None: set_theme = options.theme if options.resolution is not None: try: xres, yres = options.resolution.split("x") gg.set_screen_size((int(xres), int(yres))) except Exception: parser.error("Resolution must be of the form x, e.g. %dx%d." % gg.default_screen_size) if options.grab is not None: desired_set_grab = options.grab if options.fullscreen is not None: gg.set_fullscreen(options.fullscreen) if options.sound is not None: mixer.nosound = not options.sound if options.daynight is not None: g.daynight = options.daynight if options.soundbuf is not None: desired_soundbuf = options.soundbuf gg.ebook_mode = options.ebook g.cheater = options.cheater g.debug = options.debug import singularity.code.graphics.font as font # PYGAME INITIALIZATION # # Only initiliaze after reading all arguments and preferences to avoid to # reinitialize something again (mixer,...). # mixer.preinit(desired_soundbuf) pygame.init() mixer.update() font.init() pygame.key.set_repeat(500, 50) if desired_set_grab is not None: pygame.event.set_grab(desired_set_grab) #I can't use the standard image dictionary, as that requires the screen to #be created. if pygame.image.get_extended() == 0: print("Error: SDL_image required. Exiting.") sys.exit(1) from singularity.code import data #init themes: data.load_themes() theme.set_theme(set_theme) gg.init_graphics_system() #init data: data.reload_all() # Init music mixer.load_sounds() mixer.load_music() mixer.play_music("music") #Display the main menu #Import is delayed until now so selected language via command-line options or # preferences file can be effective from singularity.code.screens import main_menu menu_screen = main_menu.MainMenu() try: menu_screen.show() except (SystemExit, KeyboardInterrupt): # exit normally when window is closed (and silently for CTRL+C) pass finally: # Be nice and close the window on SystemExit pygame.quit() singularity-1.00/singularity/__main__.py000077500000000000000000000017431367731414700204750ustar00rootroot00000000000000#!/usr/bin/env python #file: singularity.py #Copyright (C) 2005 Evil Mr Henry, Phil Bordelon, Brian Reid, MestreLion #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 . #A full copy of this license is provided in GPL.txt #This file is the starting file for the game. Run it to start the game. from singularity import main if __name__ == '__main__': main() singularity-1.00/singularity/code/000077500000000000000000000000001367731414700173055ustar00rootroot00000000000000singularity-1.00/singularity/code/__init__.py000066400000000000000000000000001367731414700214040ustar00rootroot00000000000000singularity-1.00/singularity/code/base.py000066400000000000000000000424101367731414700205720ustar00rootroot00000000000000#file: base.py #Copyright (C) 2005,2006,2007,2008 Evil Mr Henry, Phil Bordelon, Brian Reid, # and FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the base class. from __future__ import division from functools import reduce from singularity.code import g, chance, item, buyable from singularity.code.buyable import cpu from singularity.code.stats import stat from singularity.code.spec import SpecDataField, promote_to_list, validate_must_be_list from numpy import int64 #TODO: Use this list and convert Base.power_state to a property to enforce this #TODO: Consider converting to dict, so it can have colors and names and modifiers # (Base.power_state would need to be a property, with setter and getter) #This list only applies to 'Base' class, not 'BaseClass' #Changes to this list should also be reflected in Base.power_state_name property power_states = ['offline', 'active','sleep'] #power_states.extend(['overclocked','suicide','stasis','entering_stasis','leaving_stasis']) AVAIL_POWER_STATES_ACTIVE_BASE = ('active', 'sleep') AVAIL_POWER_STATES_OFFLINE = ('offline',) def parse_detect_chance(parsed_value): validate_must_be_list(parsed_value) chance_dict = {} for chance_str in parsed_value: key, value = chance_str.split(":") chance_dict[key] = int(value) return chance_dict class BaseSpec(buyable.BuyableSpec): """Base as a buyable item (New Base in Location menu)""" spec_type = 'base' created = stat(spec_type + "_created") spec_data_fields = [ SpecDataField('size', converter=int), SpecDataField('force_cpu', default_value=None), SpecDataField('regions', data_field_name='allowed', converter=promote_to_list), SpecDataField('detect_chance', converter=parse_detect_chance), buyable.SPEC_FIELD_COST, buyable.SPEC_FIELD_PREREQUISITES, SpecDataField('danger', converter=int, default_value=0), SpecDataField('maintenance', data_field_name='maint', converter=buyable.spec_parse_cost), ] def __init__(self, id, size, force_cpu, regions, detect_chance, cost, prerequisites, maintenance): super(BaseSpec, self).__init__(id, cost, prerequisites) self.size = size self.force_cpu = force_cpu self.regions = regions self.detect_chance = detect_chance # TODO: Maintenance should use CPU-second to be as cost. self.maintenance = maintenance self.flavor = [] def calc_discovery_chance(self, extra_factor = 1): # Get the default settings for this base type. detect_chance = self.detect_chance.copy() # Adjust by the current suspicion levels ... for group in detect_chance: suspicion = g.pl.groups[group].suspicion detect_chance[group] *= 10000 + suspicion detect_chance[group] //= 10000 # ... and further adjust based on technology ... for group in detect_chance: discover_bonus = g.pl.groups[group].discover_bonus detect_chance[group] *= discover_bonus detect_chance[group] //= 10000 # ... and the given factor. for group in detect_chance: detect_chance[group] = int(detect_chance[group] * extra_factor) return detect_chance def describe_maintenance(self, maintenance): m = buyable.array(maintenance, int64) # describe_cost() expects CPU-seconds, not CPU-days m[cpu] *= g.seconds_per_day return self.describe_cost(m, True) def get_detect_info(self, location=None): detect_modifier = 1 / location.modifiers.get("stealth", 1) if location else 1 chance = self.calc_discovery_chance(detect_modifier) return get_detect_info(chance) def get_info(self, location): raw_cost = self.cost[:] location.modify_cost(raw_cost) cost = self.describe_cost(raw_cost) mod_maint = self.maintenance[:] location.modify_maintenance(mod_maint) maint = self.describe_maintenance(mod_maint) detect = self.get_detect_info(location) size = "" if self.force_cpu: forced_cpu_spec = g.items[self.force_cpu] fake_base = Base("", self) location.modify_base(fake_base) fake_base.location = location size = "\n" + forced_cpu_spec.get_quality_info(if_installed_in_base=fake_base, count=self.size) elif self.size > 1: size = "\n" + ngettext("Has space for {COUNT} computer.", "Has space for {COUNT} computers.", self.size).format(COUNT=self.size) location_message = "" if location.has_modifiers(): location_message = "---\n\n" + _("Location modifiers: {MODIFIERS}").format( MODIFIERS=location.get_modifiers_info()) template = "%s\n" + _("Build cost:").replace(" ",u"\xA0") + u"\xA0%s\n" + \ _("Maintenance:") + u"\xA0%s\n%s%s\n---\n%s\n%s" return template % (self.name, cost, maint, detect, size, self.description, location_message) class Base(buyable.Buyable): """A Player's Base in a Location (Open Base in Location menu)""" def __init__(self, name, spec, built=False): super(Base, self).__init__(spec) self._name = name self.started_at = g.pl.raw_min self.location = None self.raw_cpu = 0 self.cpu = 0 self.items = { "cpu": None, "reactor": None, "network": None, "security": None, } self._power_state = "offline" self.grace_over = False self.maintenance = buyable.array(self.spec.maintenance, int64) if built: self.finish(is_player=False) if self.spec.force_cpu: self.cpus = item.Item(g.items[self.spec.force_cpu], base=self, count=self.spec.size) self.cpus.finish(is_player=False) @buyable.Buyable.name.setter def name(self, value): self._name = value @property def cpus(self): return self.items.get("cpu", None) @cpus.setter def cpus(self, value): self.items["cpu"] = value @property def maintains_singularity(self): """Whether the singularity can be sustained by this base""" if not self.done or not self.cpus or self.cpus.count < 1 or not self.cpus.done: # Incomplete bases or bases without any active CPUs cannot keep the singularity # alive return False return True @property def power_state(self): return self._power_state @property def power_state_name(self): """A read-only i18'zable version of power_state attribute, suitable for printing labels, captions, etc""" if self.power_state == "offline" : return _("Offline") if self.power_state == "active" : return _("Active") if self.power_state == "sleep" : return _("Sleep") if self.power_state == "overclocked" : return _("Overclocked") if self.power_state == "suicide" : return _("Suicide") if self.power_state == "stasis" : return _("Stasis") if self.power_state == "entering_stasis": return _("Entering Stasis") if self.power_state == "leaving_stasis" : return _("Leaving Stasis") return "" @property def available_power_states(self): if self.done and self.cpus and self.cpus.done: return AVAIL_POWER_STATES_ACTIVE_BASE else: return AVAIL_POWER_STATES_OFFLINE def switch_power(self): possible_states = self.available_power_states try: i = possible_states.index(self._power_state) except IndexError: i = -1 # Find the next available power state for this base next_index = (i + 1) % len(possible_states) self._power_state = possible_states[next_index] g.pl.recalc_cpu() def check_power(self): possible_states = self.available_power_states if self._power_state not in possible_states: self._power_state = possible_states[0] g.pl.recalc_cpu() def has_power(self): if self._power_state == "active": return True else: return False def space_left_for(self, item_type): space_left = self.spec.size # Different cpus will replace the previous one, so these take full space. if self.cpus is not None \ and self.cpus.spec == item_type: space_left -= self.cpus.count return space_left @property def compute_bonus(self): compute_bonus = 10000 # Item bonus compute_bonus += self.get_quality_for("cpu_modifier") # Location modifier if self.location and "cpu" in self.location.modifiers: compute_bonus = compute_bonus * self.location.modifiers["cpu"] return compute_bonus def recalc_cpu(self): self.raw_cpu = self.get_quality_for("cpu") if self.raw_cpu == 0: self.cpu = 0 return self.cpu = max(1, int(self.raw_cpu * self.compute_bonus // 10000)) def serialize_obj(self): return self.serialize_buyable_fields({ 'id': g.to_internal_id('base', self.spec.id), 'name': self.name, 'started_at_min': self.started_at, 'power_state': self.power_state, 'grace_over': self.grace_over, # Note that we store all items even for "force_cpu"'ed bases. This enables # use to load the base with that CPU item even if the "force_cpu" flag is # later removed from the spec. 'items': [it.serialize_obj() for it in self.items.values() if it is not None], }) @classmethod def deserialize_obj(cls, obj_data, game_version): spec_id = g.convert_internal_id('base', obj_data.get('id', None) or obj_data['spec_id']) spec = g.base_type[spec_id] name = obj_data.get('name') base = Base(name, spec) base.restore_buyable_fields(obj_data, game_version) if not base.spec.force_cpu: item_data_list = obj_data['items'] for item_data in item_data_list: it = item.Item.deserialize_obj(base, item_data, game_version) base.items[it.spec.item_type.id] = it base.started_at = obj_data['started_at_min'] base.grace_over = obj_data.get('grace_over', True) # Note that power_state is subject to whether the base and items are built, # so we deliberately restore it late. # # IMPORTANT: Avoid changing base.power_state as it triggers a "recalc_cpu" # for the player. As not we might not have restored everything this either # breaks or makes recalc_cpu throw away all allocations as most of the CPU # power is missing at this stage. stored_power_state = obj_data['power_state'] if stored_power_state in power_states: base._power_state = stored_power_state else: # Unknown power states revert to "active" except for the historical "statis" # states (which are reverted to "sleep") base._power_state = 'sleep' if stored_power_state in ('statis', 'entering_stasis') else 'active' base.check_power() return base # Get the detection chance for the base, applying bonuses as needed. If # accurate is False, we just return the value to the nearest full # percent. def get_detect_chance(self, accurate = True): # Get the base chance from the universal function. detect_chance = calc_base_discovery_chance(self.spec.id) for group in g.pl.groups: detect_chance.setdefault(group, 0) # Factor in any items built with discover_bonus ... base_qual = self.get_quality_for("discover_modifier") for group in detect_chance: detect_chance[group] *= 10000 - base_qual detect_chance[group] //= 10000 # ... and its location ... if self.location: multiplier = self.location.discovery_bonus() for group in detect_chance: detect_chance[group] *= multiplier detect_chance[group] //= 100 # ... and its power state. if not self.has_power(): for group in detect_chance: detect_chance[group] //= 4 # Lastly, if we're not returning the accurate values, adjust # to the nearest percent. if not accurate: for group in detect_chance: detect_chance[group] = g.nearest_percent(detect_chance[group]) return detect_chance def get_quality_for(self, quality): gen = (item.get_quality_for(quality) for item in self.all_items() if item and item.done) if quality.endswith("_modifier"): # Use add_chance to sum modifier. return reduce(chance.add, (qual / 10000 for qual in gen), 0) * 10000 else: return sum(gen) def is_empty(self): for item in self.all_items(): if item: return False return True def is_building(self): for item in self.all_items(): if item and not item.done: return True return False def is_building_extra(self): for item in self.all_items(): if item and item.spec.item_type.is_extra and not item.done: return True return False def has_grace(self): if self.grace_over: return False age = g.pl.raw_min - self.started_at grace_time = (self.total_cost[buyable.labor] * g.pl.base_grace_multiplier) / 10000 if age > grace_time: self.grace_over = True return False else: return True def destroy(self): super(Base, self).destroy() if self.location: self.location.bases.remove(self) for item in self.all_items(): if item is not None: item.destroy() g.pl.recalc_cpu() def next_base(self, forwards): index = self.location.bases.index(self) if forwards > 0: increment = 1 else: increment = -1 while True: index += increment index %= len(self.location.bases) base = self.location.bases[index] if base.done: return base def sort_tuple(self): # We sort based on size (descending), CPU (descending), # then name (ascending). # id(self) is thrown in at the end to make sure identical-looking # bases aren't considered equal. return (-self.spec.size, -self.cpu, self.name, id(self)) def finish(self, is_player=True, loading_savegame=False): super(Base, self).finish(is_player=is_player, loading_savegame=loading_savegame) self.recalc_cpu() self.check_power() def __lt__(self, other): if isinstance(other, Base): return self.sort_tuple() < other.sort_tuple() else: return True def all_items(self): for item in self.items.values(): if item: yield item def get_detect_info(self): accurate = (g.pl.display_discover == "full") chance = self.get_detect_chance(accurate) return get_detect_info(chance) # calc_base_discovery_chance is a globally-accessible function that can # calculate basic discovery chances given a particular class of base. def calc_base_discovery_chance(base_type_name, extra_factor = 1): return g.base_type[base_type_name].calc_discovery_chance(extra_factor) def detect_chance_to_danger_level(detects_per_day): if detects_per_day > 225: return 3 elif detects_per_day > 150: return 2 elif detects_per_day > 75: return 1 else: return 0 def get_detect_info(detect_chance): detect_template = _("Detection chance:") + "\n" chances = [] for group in g.pl.groups.values(): detect_template += group.name + u":\xA0%s\n" chances.append(detect_chance.get(group.spec.id, 0)) if g.pl.display_discover == "full": return detect_template % tuple(g.to_percent(c) for c in chances) elif g.pl.display_discover == "partial": return detect_template % tuple(g.to_percent(g.nearest_percent(c, 25)) for c in chances) else: return detect_template % tuple(g.danger_level_to_detect_str(detect_chance_to_danger_level(c)) for c in chances) singularity-1.00/singularity/code/buyable.py000066400000000000000000000174071367731414700213130ustar00rootroot00000000000000#file: buyable.py #Copyright (C) 2008 Evil Mr Henry, Phil Bordelon, and FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the buyable class, a super class for item, base and tech from __future__ import absolute_import from operator import truediv from singularity.code import g, spec, prerequisite from singularity.code.pycompat import * cash, cpu, labor = range(3) import numpy from numpy import int64 numpy.seterr(all='ignore') array = numpy.array def spec_parse_cost(value): spec.validate_must_be_list(value) if len(value) != 3: # pragma: no cover raise ValueError("Cost must have exactly 3 values (CPU, money, time), got %d items (value: %s)" % ( len(value), repr(value))) return [int(x) for x in value] SPEC_FIELD_PREREQUISITES = spec.SpecDataField('prerequisites', data_field_name='pre', converter=spec.promote_to_list, default_value=list) SPEC_FIELD_COST = spec.SpecDataField('cost', converter=spec_parse_cost) class BuyableSpec(spec.GenericSpec, prerequisite.Prerequisite): def __init__(self, id, cost, prerequisites): spec.GenericSpec.__init__(self, id) prerequisite.Prerequisite.__init__(self, prerequisites) self.name = id # This will be set when languages are (re)loaded self.description = '' self._cost = cost @property def cost(self): cost = array(self._cost, int64) cost[labor] *= g.minutes_per_day * getattr(g.pl,'labor_bonus',1) cost[labor] /= 10000 cost[cpu] *= g.seconds_per_day return cost def describe_cost(self, cost, hide_time=False): cpu_label = _("%s CPU") % g.to_cpu(cost[cpu]) cash_label = _("%s money") % g.to_money(cost[cash]) labor_label = ", %s" % g.to_time(cost[labor]).replace(" ", u"\xA0") if hide_time: labor_label = "" return u"%s, %s%s" % (cpu_label.replace(" ", u"\xA0"), cash_label.replace(" ", u"\xA0"), labor_label) @property def regions(self): return self._regions @regions.setter def regions(self, value): region_all = False regions = [] for region in value: if "ALL" in value: region_all = True elif region in g.regions: regions.extend(g.regions[region].locations) else: regions.append(region) self._regions = regions self._region_all = region_all def buildable_in(self, location): return bool(self._region_all or location.id in self._regions) def get_info(self): cost_str = self.describe_cost(self.cost) template = "%s\n" + _("Cost:") + " %s\n---\n%s" return template % (self.name, cost_str, self.description) def __lt__(self, other): # For sorting buyables, we sort by cost; Python is smart enough # to handle this properly for tuples. The first element is price in # cash, which is the one we care about the most. return tuple(self.cost) < tuple(other.cost) class Buyable(object): def __init__(self, spec, count=1): self.spec = spec self.prerequisites = spec.prerequisites self.total_cost = spec.cost * count self.total_cost[labor] //= count self.cost_left = array(self.total_cost, int64) self.count = count self.done = False @property def id(self): return self.spec.id @property def name(self): if hasattr(self, '_name'): return self._name return self.spec.name @property def description(self): return self.spec.description # Note that this is a method, handled by a property to avoid confusing # pickle. @property def available(self): return self.spec.available @property def cost_paid(self): return self.total_cost - self.cost_left @cost_paid.setter def cost_paid(self, value): self.cost_left = self.total_cost - value def finish(self, is_player=True, loading_savegame=False): if not self.done: self.cost_left = array([0,0,0], int64) self.done = True if (is_player): self.spec.created += 1 def _percent_complete(self, available=(0,0,0)): available_array = array(available, int64) return truediv(self.cost_paid + available_array, self.total_cost) def min_valid(self, complete): return complete[self.total_cost > 0].min() def percent_complete(self): return self.min_valid(self._percent_complete()) def calculate_work(self, cash_available, cpu_available, time=0): """Given an amount of available resources, calculates and returns the amount that would be spent and the progress towards completion.""" # Figure out how much we could complete. pct_complete = self._percent_complete([cash_available, cpu_available, time]) # Find the least-complete resource. least_complete = self.min_valid(pct_complete) # Limit the other two be up to the least-complete complete_cap = min(1, least_complete) pct_complete[pct_complete > complete_cap] = complete_cap # Translate that back to the total amount complete. raw_paid = pct_complete * self.total_cost # And apply it. was_complete = self.cost_paid cost_paid = numpy.maximum(numpy.cast[int64](numpy.round(raw_paid)), was_complete) spent = cost_paid - was_complete return spent, cost_paid def work_on(self, *args, **kwargs): """As calculate_work, but apply the changes. Returns a boolean indicating whether this buyable is done afterwards. """ if self.done: return spent, self.cost_paid = self.calculate_work(*args, **kwargs) # Consume CPU and Cash. # Note the cast from to to avoid # poisoning other calculations (like, say, g.pl.do_jobs). g.pl.cpu_pool -= int(spent[cpu]) g.pl.cash -= int(spent[cash]) if (self.cost_left <= 0).all(): self.finish() return True return False def destroy(self): # Does nothing by default pass def serialize_buyable_fields(self, serialized_mapping=None): if serialized_mapping is None: serialized_mapping = {} if self.done: serialized_mapping['done'] = self.done else: serialized_mapping['cost_paid'] = [long(x) for x in self.cost_paid] if self.count != 1: serialized_mapping['count'] = self.count return serialized_mapping def restore_buyable_fields(self, obj_data, game_version): is_done = obj_data.get('done', 0) self.count = obj_data.get('count', 1) if is_done: self.finish(is_player=False, loading_savegame=True) else: self.cost_paid = array(obj_data['cost_paid'], int64) singularity-1.00/singularity/code/chance.py000066400000000000000000000047121367731414700211040ustar00rootroot00000000000000#file: chance.py #Copyright (C) 2008 FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains all chance functions. from __future__ import absolute_import from singularity.code import g import random import numpy as np # Rolls occurence against a chance per day (in 0-1 form), using poisson distribution. # # Advantage: # * It approximate the roll a chance per interval when the interval is very small. # * The distribution do not change when the interval chosen change. # * Allows easily to find the next time occurence with exponential distribution. # # chance_per_day The chance per day rate parameter. # seconds The duration of the interval in seconds # return If there are a occurence in the interval. # def roll_interval(chance_per_day, seconds = g.seconds_per_day): portion_of_day = seconds / float(g.seconds_per_day) interval_rate = chance_per_day * portion_of_day chance = 1 - np.exp(-interval_rate) return random.random() < chance # Rolls the next occurence against a chance per day (in 0-1 form), using poisson distribution. # # See roll_period. # # chance_per_day The chance per day rate parameter. # return The next occurence in seconds. # def roll_next_time(chance_per_day): return g.seconds_per_day * (-np.log(1.0 - random.random()) / chance_per_day) # Rolls occurence against a multiplier in 0-10000 form. # # Used to calculate multiplier chances. # def roll_one(roll_against): rand_num = random.randint(1, 10000) return roll_against >= rand_num # Correct way to add chance with each other. def add(first, second): return 1.0 - (1.0 - first) * (1.0 - second) # Correct way to add multiplier (in 0-10000 form) with each other. def add_modifiers(first, second): return 10000 * add(first / 10000., second / 10000.) singularity-1.00/singularity/code/data.py000066400000000000000000000503531367731414700205760ustar00rootroot00000000000000#file: data.py #Copyright (C) 2008 FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains all data loading functions. from __future__ import absolute_import import os import sys import collections from io import open from singularity.code import g, i18n from singularity.code import dirs from singularity.code import group, base, tech, item, event, location, difficulty, task, region, warning from singularity.code.pycompat import * import singularity.code.graphics.g as gg import singularity.code.graphics.theme as theme def generic_load(filename, load_dirs="data", mandatory=True, no_list=False): """ generic_load() loads a data file. Data files are all in Python-standard ConfigParser format. The 'id' of any object is the section of that object. Fields that need to be lists are postpended with _list; this is stripped from the actual name, and the internal entries are broken up by the pipe ("|") character. On errors, if file is mandatory then quit, else raise exception. For syntax parsing-related errors, always print error message. For IOErrors silently ignore non-mandatory missing or otherwise unreadable files """ # Get directories to find the file if load_dirs is not None: load_dirs = dirs.get_read_dirs(load_dirs) # For each directories, create a file, otherwise use filename if load_dirs is not None: files = [os.path.join(load_dir, filename) for load_dir in load_dirs] else: files = [filename] # Find the first readable file. found = False errors = [] config = RawConfigParser() for filepath in files: try: with open(filepath, encoding='utf-8') as fd: config.read_file(fd) found = True break except IOError as reason: # Silently ignore non-mandatory missing files if mandatory: errors.append("Cannot read '%s': %s\nExiting\n" % (filename, reason)) except Exception as reason: # Always print parsing errors, even for non-mandatory files errors.append("Error parsing '%s': %s\n" % (filename, reason)) for err in errors: sys.stderr.write(err) if not found: if mandatory: sys.exit(1) else: return return_list = [] # Get the list of items (IDs) in the file and loop through them. for item_id in config.sections(): item_dict = {} item_dict["id"] = item_id # Get the list of settings for this particular item. for option in config.options(item_id): # If this is a list ... if not no_list and (len(option) > 6 and option[-5:] == "_list"): # Break it into elements separated by |. item_dict[option[:-5]] = [x.strip() for x in config.get(item_id, option).split("|")] else: # Otherwise, just grab the data. item_dict[option] = config.get(item_id, option).strip() # Add this to the list of all objects we are returning. return_list.append(item_dict) return return_list def parse_spec_from_file(spec_cls, filename): spec_data = generic_load(filename) for element_no, spec_data in enumerate(spec_data, 1): try: spec_id = spec_data['id'] except KeyError: # pragma: no cover sys.stderr.write("Data element %d in file %s has no ID!?" % (element_no, filename)) sys.exit(1) yield spec_cls.create_from_data_file(spec_id, spec_data) def check_required_fields(dict, fields, name = "Unknown type"): """ check_required_fields() will check for the existence of every field in the list 'fields' in the dictionary 'dict'. If any do not exist, it will print an error message and abort. Part of that error message is the type of object it is processing; this should be passed in via 'name'. """ for field in fields: if field not in dict: sys.stderr.write("%s %s lacks key %s.\n" % (name, repr(dict), field)) sys.exit(1) def load_generic_defs_file(name, no_list=True): filepath = dirs.get_readable_file_in_dirs(name + "_str.dat", "data") return generic_load(filepath, mandatory=True, no_list=no_list) def load_generic_defs(name, object_list, listttype_attrs=frozenset()): item_list = load_generic_defs_file(name) for data_item in item_list: item_id = data_item["id"] obj = object_list[item_id] for key_dat_file in data_item: if key_dat_file == "id": continue key_name = key_dat_file if len(key_dat_file) > 6 and key_dat_file.endswith("_list"): key_name = key_dat_file[:-5] if key_name not in listttype_attrs: # Not allowed to be a list; revert to the original name key_name = key_dat_file if not hasattr(obj, key_name): continue # Translations use the field name as defined in the data file (and not # the field name of the object) tr = get_def_translation(item_id, key_dat_file, data_item[key_dat_file]) if key_name in listttype_attrs: setattr(obj, key_name, [x.strip() for x in tr.split("|")]) else: setattr(obj, key_name, tr) def get_def_translation(object_id, field, text): ctxt = "[" + object_id + "] " + field return g.data_strings.get((ctxt, text), text) def load_significant_numbers(): significant_numbers = g.significant_numbers = [] numbers_file = dirs.get_readable_file_in_dirs("numbers.dat", "data") if numbers_file is None: sys.stderr.write("WARNING: Cannot read file: numbers.dat\n") return with open(numbers_file, 'r', encoding='utf-8') as file: for index, line in enumerate(file): value = line.split("#")[0].strip() if len(value) == 0: continue try: number = int(value) significant_numbers.append(number) except ValueError: sys.stderr.write("WARNING: Invalid number in 'numbers.dat' line: %d\n" % index) def load_internal_id(): internal_id_file = dirs.get_readable_file_in_dirs("internal_id.dat", "data") g.internal_id_forward = {} g.internal_id_backward = {} with open(internal_id_file, 'r', encoding='utf-8') as file: for index, line in enumerate(file): line = line.strip() if len(line) == 0 or line[0] == "#": continue try: obj, internal_id = line.split("=") obj_type, obj_id = obj.split("|") internal_id = internal_id.strip() obj_type = obj_type.strip() obj_id = obj_id.strip() if obj_type not in g.internal_id_forward: g.internal_id_forward[obj_type] = {} g.internal_id_backward[obj_type] = {} if obj_id in g.internal_id_forward[obj_type]: sys.stderr.write("WARNING: Overwrite internal ID in 'internal_id.dat' line: %d\n" % index + 1) sys.exit(1) g.internal_id_forward[obj_type][obj_id] = internal_id g.internal_id_backward[obj_type][internal_id] = obj_id except ValueError: sys.stderr.write("WARNING: Invalid internal ID in 'internal_id.dat' line: %d\n" % index + 1) sys.exit(1) def load_groups_defs(): load_generic_defs("groups", g.groups) def load_groups(): groups = g.groups = collections.OrderedDict() for group_spec in parse_spec_from_file(group.GroupSpec, 'groups.dat'): groups[group_spec.id] = group_spec load_groups_defs() def load_base_defs(): load_generic_defs("bases", g.base_type, listttype_attrs={"flavor"}) def load_bases(): g.base_type = { base_spec.id: base_spec for base_spec in parse_spec_from_file(base.BaseSpec, 'bases.dat') } load_base_defs() class Danger(object): def __init__(self, id, untranslated_research_desc, untranslated_knowledge_desc): self.id = id self.untranslated_research_desc = untranslated_research_desc self.untranslated_knowledge_desc = untranslated_knowledge_desc def _translate(self, field, string): return get_def_translation(self.id, field, string) @property def research_desc(self): return self._translate('research_desc', self.untranslated_research_desc) @property def knowledge_desc(self): return self._translate('knowledge_desc', self.untranslated_knowledge_desc) def load_danger(): dangers = g.dangers = {} danger_list = load_generic_defs_file("dangers") for danger_def in danger_list: check_required_fields(danger_def, ("id", "research_desc", "knowledge_desc"), "Danger") danger_id = danger_def["id"] if not danger_id.startswith("danger_"): sys.stderr.write("Invalid format for danger id: %s\n" % danger_id) sys.exit(1) danger_level = int(danger_id[7:]) dangers[danger_level] = Danger(danger_id, danger_def["research_desc"], danger_def["knowledge_desc"]) def load_regions(): regions = g.regions = {} region_infos = generic_load("regions.dat") for region_info in region_infos: # Certain keys are absolutely required for each entry. Make sure # they're there. check_required_fields(region_info, ("id",), "Region") id = region_info["id"] modifiers_list = [] i = 0 while True: i += 1 modifiers_name = "modifier%d" % i if modifiers_name not in region_info: break modifiers_dict = g.read_modifiers_dict(region_info.get(modifiers_name, [])) modifiers_list.append(modifiers_dict) regions[id] = region.RegionSpec(id, modifiers_list) def load_location_defs(): load_generic_defs("locations", g.locations, listttype_attrs={"cities"}) def load_locations(): regions = g.regions locations = g.locations = { loc_spec.id: loc_spec for loc_spec in parse_spec_from_file(location.LocationSpec, 'locations.dat') } for loc_spec in locations.values(): # Add the location to regions it is in them. for region_id in loc_spec.regions: if (region_id not in regions): sys.stderr.write("Error with region given: %s\n" % repr(region_id)) sys.exit(1) regions[region_id].locations.append(loc_spec.id) load_location_defs() def load_tech_defs(): load_generic_defs("techs", g.techs) def load_techs(): g.techs = { tech_spec.id: tech_spec for tech_spec in parse_spec_from_file(tech.TechSpec, 'techs.dat') } if g.debug: # pragma: no cover print("Loaded %d techs." % len(g.techs)) load_tech_defs() def load_item_types(): item.item_types = collections.OrderedDict() for item_type in parse_spec_from_file(item.ItemType, 'itemtypes.dat'): item.item_types[item_type.id] = item_type load_item_type_defs() def load_item_type_defs(): load_generic_defs("itemtypes", item.item_types) def load_items(): g.items = { item_spec.id: item_spec for item_spec in parse_spec_from_file(item.ItemSpec, 'items.dat') } load_item_defs() def load_item_defs(): load_generic_defs("items", g.items) def load_events(): g.events = { event_spec.id: event_spec for event_spec in parse_spec_from_file(event.EventSpec, 'events.dat') } load_event_defs() def load_event_defs(): load_generic_defs("events", g.events) def load_tasks(): tasks = g.tasks = collections.OrderedDict() # Keep order (important) task_list = generic_load("tasks.dat") for task_dict in task_list: # Certain keys are absolutely required for each entry. Make sure # they're there. check_required_fields(task_dict, ("id", "type"), "Task") task_id = task_dict["id"] task_type = task_dict["type"] # Only jobs and cpu_pool are possible for now if task_type == "jobs": task_value = int(task_dict["value"]) # Make sure prerequisites, if any, are lists. task_pre = task_dict.get("pre", []) if type(task_pre) != list: task_pre = [task_pre] elif task_type == "cpu_pool": task_value = 0 task_pre = [] else: sys.stderr.write("Only jobs and cpu_pool task are supported\n") sys.exit(1) tasks[task_id] = task.Task( task_id, task_type, task_value, task_pre ) if (all(len(t.prerequisites) > 0 for t in (tasks[k] for k in tasks) if t.type == "jobs")): sys.stderr.write("A minimun of one job task without prerequisite is needed for the game\n") sys.exit(1) for t in g.tasks.values(): g.tasks_by_type[t.type].append(t) task.tasks_reset() load_task_defs() def load_task_defs(): load_generic_defs("tasks", g.tasks) def load_theme(theme_id, theme_dir): new_theme = theme.Theme(theme_id, theme_dir) for variant, filename in new_theme.search_variant(): theme_list = generic_load(filename, load_dirs=None) variant_theme = theme.VariantTheme(variant) new_theme.set_variant(variant_theme) for theme_section in theme_list: if theme_section["id"] == "general": variant_theme.name = theme_section["name"] if "parent" in theme_section: if (variant is None): new_theme.inherit(theme_section["parent"]) else: sys.stderr.write("Cannot override parent in variant theme '%s'" % repr(filename)) if theme_section["id"] == "fonts": for key in theme_section: if key == "id": continue variant_theme.set_font(key, theme_section[key]) if theme_section["id"] == "colors": for key in theme_section: if key == "id": continue variant_theme.set_color(key, theme_section[key]) return new_theme def load_themes(): themes = theme.themes = {} themes_dirs = dirs.get_read_dirs("themes") for themes_dir in themes_dirs: themes_list = [name for name in os.listdir(themes_dir) if os.path.isdir(os.path.join(themes_dir, name))] for theme_id in themes_list: if (theme_id in themes): continue th = load_theme(theme_id, os.path.join(themes_dir, theme_id)) th.find_files() themes[theme_id] = th def load_difficulties(): difficulties = difficulty.difficulties = collections.OrderedDict() for diff in parse_spec_from_file(difficulty.Difficulty, 'difficulties.dat'): difficulties[diff.id] = diff load_difficulty_defs() def load_difficulty_defs(): load_generic_defs("difficulties", difficulty.difficulties) def load_knowledge(): knowledge = g.knowledge = {} from singularity.code.knowledge import KnowledgeHelpEntry, KnowledgeArea help_list = load_generic_defs_file("knowledge", no_list=False) for help_section in help_list: knowledge_id = help_section["id"] help_entries = {} # Load the knowledge lists. help_keys = [x for x in help_section if x != "id" and x != "name"] for help_key in help_keys: help_entry = help_section[help_key] if type(help_entry) != list or len(help_entry) != 2: sys.stderr.write("Invalid knowledge entry %s." % repr(help_entry)) sys.exit(1) help_entries[help_key] = KnowledgeHelpEntry(knowledge_id, help_key, help_entry[0], help_entry[1]) knowledge[knowledge_id] = KnowledgeArea(knowledge_id, help_section["name"], help_entries) def load_warning_defs(): warning.warnings["cpu_usage"].name = _("Do not use all the available CPU.") warning.warnings["cpu_usage"].message = _("I didn't use all the available processor power. I will use the CPU time left to work whatever Jobs I can.") warning.warnings["one_base"].name = _("Only one base remaining.") warning.warnings["one_base"].message = _("Only one base can hold my conscience. I am in danger to lose the last place left to survive.") warning.warnings["cpu_pool_zero"].name = _("CPU POOL is empty.") warning.warnings["cpu_pool_zero"].message = _("My cpu pool is empty. Some of my bases or items cannot be build without CPU.") warning.warnings["cpu_maintenance"].name = _("CPU POOL not enough for maintenance.") warning.warnings["cpu_maintenance"].message = _("My cpu pool is not enough to maintain some of my bases. I may lose them.") def load_strings(): load_story_defs() load_warning_defs() class StorySectionPart(object): def __init__(self, msgctxt, text, translator_comments): self.msgctxt = msgctxt self.text = text self.translator_comments = translator_comments def load_story_defs(): story = g.story = {} story_file_path = dirs.get_readable_file_in_dirs("story.dat", 'data') if story_file_path is None: print("Story is missing. Skipping.") return # Take the last story file, story is never partially translated. story_file = open(story_file_path, 'r', encoding='utf-8') section_name = "" segment = "" translator_comments = "" line_num = 1 for line in story_file.readlines(): if line and line != "\n": if line[0] == "#": if line.startswith('# TRANSLATORS:') and section_name: translator_comments += " " + line[14:].strip() continue elif line[0] == "[": if line[-2] == "]": section_name = line[1:-2] story[section_name] = [] else: sys.stderr.write("Line start with [ and is not a section at line %d.\n" % line_num) elif line[0] == "|": segment += line[1:] else: # TODO: Parse command sys.stderr.write("Invalid command at line %d.\n" % line_num) else: if segment: parts = story[section_name] ctxt = "[Story section] %s (%d)" % (section_name, len(parts) + 1) parts.append(StorySectionPart(ctxt, segment, translator_comments.strip())) segment = "" translator_comments = "" line_num += 1 # Add last segment. if segment: parts = story[section_name] ctxt = "[Story section] %s (%d)" % (section_name, len(parts) + 1) parts.append(StorySectionPart(ctxt, segment, translator_comments.strip())) def reload_all(): load_internal_id() load_danger() load_significant_numbers() load_strings() load_groups() load_knowledge() load_difficulties() load_tasks() load_events() load_regions() load_locations() load_techs() load_item_types() load_items() load_bases() def reload_all_def(): load_strings() load_groups_defs() load_difficulty_defs() load_base_defs() load_tech_defs() load_item_type_defs() load_item_defs() load_event_defs() load_task_defs() load_location_defs() def reload_all_mutable_def(): # Apply current language load_tech_defs() load_location_defs() load_event_defs() singularity-1.00/singularity/code/difficulty.py000066400000000000000000000050461367731414700220260ustar00rootroot00000000000000#file: code/difficulty.py #Copyright (C) 2005 Evil Mr Henry, Phil Bordelon, Brian Reid, FunnyMan3595, # MestreLion #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 . #A full copy of this license is provided in GPL.txt #This file contains function handle difficulty of the game. from __future__ import absolute_import import collections from singularity.code.spec import GenericSpec, SpecDataField difficulties = collections.OrderedDict() def get_difficulties(): return [(d.name, id) for id, d in difficulties.items()] class Difficulty(GenericSpec): spec_data_fields = [ SpecDataField('starting_cash', converter=int), SpecDataField('starting_interest_rate', converter=int), SpecDataField('labor_multiplier', converter=int), SpecDataField('discover_multiplier', converter=int), SpecDataField('suspicion_multiplier', converter=int), SpecDataField('base_grace_multiplier', converter=int), SpecDataField('grace_period_cpu', converter=int), SpecDataField('old_difficulty_value', converter=int), SpecDataField('techs', data_field_name='tech', default_value=list), ] def __init__(self, id, starting_cash, starting_interest_rate, labor_multiplier, discover_multiplier, suspicion_multiplier, base_grace_multiplier, grace_period_cpu, old_difficulty_value, techs): super(Difficulty, self).__init__(id) self.name = "" # Set when translations are loaded self.starting_cash = starting_cash self.starting_interest_rate = starting_interest_rate self.labor_multiplier = labor_multiplier self.discover_multiplier = discover_multiplier self.suspicion_multiplier = suspicion_multiplier self.base_grace_multiplier = base_grace_multiplier self.grace_period_cpu = grace_period_cpu self.old_difficulty_value = old_difficulty_value self.techs = techs singularity-1.00/singularity/code/dirs.py000066400000000000000000000225061367731414700206250ustar00rootroot00000000000000#file: dirs.py #Copyright (C) 2008 Evil Mr Henry, Phil Bordelon, and FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains all functions to find and create singularity directory. #Get the proper folder on Linux/Win/Mac, and possibly others. #Assumes that all platforms that have HOME and XDG_CONFIG_HOME defined have them # defined properly. from __future__ import absolute_import import os import sys import errno read_dirs = {} write_dirs = {} # Used to differentiate between version. version_dir = '1.0' """ Definition of generated directories for E:S Directories are grouped with a symbolic name. The first object define generic propriety of the directories: 'writable' for writable directory. Following objects define a potential directory: 'mandatory' means the absence of directory is a fatal error. 'parent' allows to definite a directory with another. (Note: only parent with one directory are handled ) 'path' is the relative path of directory. Directories are read is the order there are defined, else the write directory first. By default it is the first writable directory found. Writable directory is never mandatory, but will be created if possible. """ dir_defs = ( ( {"name":"data", "mandatory": True}, {"parent": "root", "path": "data", }, ), ( {"name":"i18n", "writable": True}, {"parent": "files_home", "path": "i18n", }, # New XDG dir {"parent": "root", "path": "i18n", }, ), ( {"name":"music", }, {"parent": "files_home", "path": "music", }, # New XDG dir {"parent": "old_home", "path": "music", }, # Old .endgame dir {"parent": "root", "path": "music", }, ), ( {"name":"sounds", }, {"parent": "data", "path": "sounds" }, ), ( {"name":"themes", "mandatory": True, "writable": True}, {"parent": "files_home", "path": "themes", }, # New XDG dir {"parent": "data", "path": "themes", }, ), ( {"name":"saves", "writable": True}, {"parent": "files_home", "path": "saves", }, # New XDG dir {"parent": "config_home", "path": "saves", }, {"parent": "old_home", "path": "saves", }, # Old .endgame dir {"parent": "root", "path": "saves", }, # Single dir ), ( {"name":"pref", "writable": True}, {"parent": "config_home", "path": version_dir, }, {"parent": "config_home", "path": "", }, {"parent": "old_home", "path": "", }, # Old .endgame dir {"parent": "root", "path": "", }, # Single dir ), ( {"name":"log", "writable": True}, {"parent": "files_home", "path": "log", }, # New XDG dir {"parent": "config_home", "path": "log", }, {"parent": "old_home", "path": "log", }, # Old .endgame dir {"parent": "root", "path": "log", }, # Single dir ), ) dirs_errs = [] def create_directories(force_single_dir): # root dir: the install directory for E:S. if getattr(sys, 'frozen', False): # This case is for the precompiled binaries (e.g. the Windows release) root_dir = os.path.join(os.path.abspath(os.path.dirname(sys.executable)), "singularity") else: root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) read_dirs["root"] = [root_dir] write_dirs["root"] = root_dir # config_home: user home directory that contains configuration. # file_home: user home directory that contains file created by the player. config_home = None files_home = None # TODO: Use Windows and MAC data and config directories. # Create user directories using XDG Base Directory Specification # For a smooth, trouble-free and most importantly *backward-compatible* # the old standard ~/.endgame is always read (created if needed). # Otherwise, by default new user directories are used and read first. if "HOME" in os.environ and not force_single_dir: home = os.environ["HOME"] xdg_config_home = os.environ.get('XDG_CONFIG_HOME') or \ os.path.join(home, '.config') xdg_data_home = os.environ.get('XDG_DATA_HOME') or \ os.path.join(home, '.local/share') # TODO: Add XDG_*_DIRS to read dirs. pref_dir_new = os.path.join(xdg_config_home, "singularity") files_dir_new = os.path.join(xdg_data_home, "singularity") dir_old = os.path.join(home, ".endgame") read_dirs["old_home"] = [dir_old] write_dirs["old_home"] = dir_old read_dirs["config_home"] = [pref_dir_new] write_dirs["config_home"] = pref_dir_new read_dirs["files_home"] = [files_dir_new] write_dirs["files_home"] = files_dir_new # Now find dirs. for defs in dir_defs: properties = defs[0] name = properties["name"] writable = properties.get("writable", False) # Always set a default empty dirs list. read_dirs.setdefault(name, []) for item in defs[1:]: # No parent directory, abort. if item["parent"] not in read_dirs or not read_dirs[item["parent"]]: continue parent_dir = read_dirs[item["parent"]][0] the_dir = os.path.join(parent_dir, item["path"]) # Make directory if no writable directory exists. if (writable and name not in write_dirs): try: makedirs_if_not_exist(the_dir) except Exception: # We don't have permission to write here. Abort. continue # Must always be a readable directory. if not os.path.isdir(the_dir) or not os.access(the_dir, os.R_OK): continue # Write dir is the first writable dir found. if (writable and (name not in write_dirs) and os.access(the_dir, os.W_OK)): write_dirs[name] = the_dir # Always read writable dir first. read_dirs[name].insert(0, the_dir) else: read_dirs[name].append(the_dir) dirs_err = False # Check if we at least one directory for mandatory. for defs in dir_defs: properties = defs[0] name = properties["name"] if (name not in read_dirs and properties.get("mandatory", False)): sys.stderr.write("ERROR: No readable directory found for '%s'\n" % (name,)) dirs_err = True if (dirs_err): sys.exit(1) def get_read_dirs(dir_name): """ Return a list a readable directories. """ global read_dirs return read_dirs[dir_name] def get_readable_file_in_dirs(filename, dir_name): global read_dirs dirs = read_dirs[dir_name] for read_dir in dirs: real_path = os.path.join(read_dir, filename) if os.path.isfile(real_path): return real_path return None def get_write_dir(dir_name): """ Return the default writable directory """ global write_dirs return write_dirs[dir_name] def get_writable_file_in_dirs(filename, dir_name, outer_paths=None): global write_dirs write_dir = write_dirs[dir_name] if (write_dir is not None): real_path = os.path.join(write_dir, filename) if outer_paths is not None: outer_paths.append(real_path) return real_path else: return None def get_readable_i18n_files(filename, lang=None, default_language=True, localized_item=True, only_last=False, outer_paths=None): from singularity.code import i18n files = [] lang_list = i18n.language_searchlist(lang, default=default_language) for lang in lang_list: i18n_dirs = (os.path.join(d, "lang_" + lang) for d in get_read_dirs("i18n")) \ if (lang != i18n.default_language) else get_read_dirs("data") for i18n_dir in i18n_dirs: real_path = os.path.join(i18n_dir, filename) if outer_paths is not None: outer_paths.append(real_path) if os.path.isfile(real_path): if localized_item: files.append((lang, real_path)) else: files.append(real_path) if (only_last): return files[-1] else: return files def makedirs_if_not_exist(directory): try: os.makedirs(directory, mode=0o0700) except OSError as e: if e.errno != errno.EEXIST: raise singularity-1.00/singularity/code/effect.py000066400000000000000000000102721367731414700211150ustar00rootroot00000000000000#file: effect.py #Copyright (C) 2005,2006,2008 Evil Mr Henry, Phil Bordelon, and FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the effect class. from __future__ import absolute_import from singularity.code import g, mixer class Effect(object): def __init__(self, parent, effect_stack): self.parent_id = parent.id self.parent_name = parent.__class__.__name__ self.effect_stack = effect_stack def trigger(self, loading_savegame=False): self._apply_effect(loading_savegame=loading_savegame) def undo_effect(self): self._apply_effect(undo_effect=True) def _apply_effect(self, loading_savegame=False, undo_effect=False): # effect_data is now a stack of instructions to run the effect. # multiple effect can be run simultaneous effect_iter = iter(self.effect_stack) # Abuse "multiply by -1" for undoing most effects effect_modifier = -1 if undo_effect else 1 for current in effect_iter: if current == "interest": g.pl.interest_rate += effect_modifier * int(next(effect_iter)) elif current == "income": g.pl.income += effect_modifier * int(next(effect_iter)) elif current == "cost_labor": g.pl.labor_bonus -= effect_modifier * int(next(effect_iter)) elif current == "job_profit": g.pl.job_bonus += effect_modifier * int(next(effect_iter)) elif current == "display_discover": assert not undo_effect, "One-shot effects (change display of discover) cannot be undone!" g.pl.display_discover = next(effect_iter) elif current == "endgame": assert not undo_effect, "One-shot effects (winning the game) cannot be undone!" mixer.play_music("win") if not loading_savegame: g.map_screen.show_story_section("Win") for group in g.pl.groups.values(): group.is_actively_discovering_bases = False g.pl.apotheosis = True g.pl.had_grace = True elif current == "suspicion": who = next(effect_iter) value = effect_modifier * int(next(effect_iter)) if who in g.pl.groups: g.pl.groups[who].alter_suspicion_decay(value) elif who == "onetime": assert not undo_effect, "One-shot effects (reduction of suspicion) cannot be undone!" # We must not re-apply this when loading the game as # it is already effected in the state of the groups if not loading_savegame: for group in g.pl.groups.values(): group.alter_suspicion(-value) else: print("Unknown group/bonus '%s' in %s %s." \ % (who, self.parent_name, self.parent_id)) elif current == "discover": who = next(effect_iter) value = effect_modifier * int(next(effect_iter)) if who in g.pl.groups: g.pl.groups[who].alter_discover_bonus(-value) else: print("Unknown group/bonus '%s' in %s %s." \ % (who, self.parent_name, self.parent_id)) else: print("Unknown action '%s' in %s %s." \ % (current, self.parent_name, self.parent_id)) singularity-1.00/singularity/code/event.py000066400000000000000000000117231367731414700210040ustar00rootroot00000000000000#file: event.py #Copyright (C) 2005,2006,2008 Evil Mr Henry, Phil Bordelon, and FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the event class. from __future__ import absolute_import from singularity.code import g, effect from singularity.code.spec import GenericSpec, SpecDataField, spec_field_effect class EventSpec(GenericSpec): spec_data_fields = [ SpecDataField('event_type', data_field_name='type'), spec_field_effect(mandatory=True), SpecDataField('chance', converter=int), SpecDataField('unique', converter=int, default_value=0), SpecDataField('duration', converter=int, default_value=0), ] def __init__(self, id, event_type, effect_data, chance, duration, unique): super(EventSpec, self).__init__(id) self.event_type = event_type self.description = "" self.log_description = "" self.effect = effect.Effect(self, effect_data) self.chance = chance self.duration = duration if duration > 0 else None self.unique = unique if duration < 1 and not unique: raise ValueError("Event %s must have either a non-zero duration (e.g. duration = 21) or be unique " "(unique = 1)") class Event(object): # For some as-yet-unknown reason, cPickle decides to call event.__init__() # when an event is loaded, but before filling it. So Event pretends to # allow no arguments, even though that would cause Bad Things to happen. def __init__(self, spec=None): self.spec = spec self.triggered = 0 self.triggered_at = -1 @property def event_id(self): return self.spec.id @property def event_type(self): return self.spec.event_type @property def description(self): return self.spec.description @property def log_description(self): return self.spec.log_description @property def effect(self): return self.spec.effect @property def chance(self): return self.spec.chance @property def duration(self): return self.spec.duration @property def unique(self): return self.spec.unique @property def decayable_event(self): return self.duration is not None def new_day(self): if not self.decayable_event: return if self.is_expired: self.effect.undo_effect() self.triggered = 0 self.triggered_at = -1 def is_expired(self): if not self.decayable_event: return False if g.pl.raw_sec - self.triggered_at > self.duration * g.seconds_per_day: return True return False def serialize_obj(self): return { 'id': g.to_internal_id('event', self.spec.id), 'triggered': self.triggered, 'triggered_at': self.triggered_at } @classmethod def deserialize_obj(cls, obj_data, game_version): spec_id = g.convert_internal_id('event', obj_data['id']) spec = g.events[spec_id] obj = Event(spec) obj.triggered = obj_data.get('triggered', 0) if obj.triggered: # We only load the triggered_at time if the event is in a triggered # state. This ensures that triggered_at is -1 when the event is # not triggered. # # Auto-correct old events without a triggered_at time to just # be triggered "now". obj.triggered_at = obj_data.get('triggered_at', g.pl.raw_sec) if obj.is_expired(): # Can happen if the duration is reduced after the savegame was made obj.triggered = 0 obj.triggered_at = -1 else: obj.trigger(loading_savegame=True) return obj def trigger(self, loading_savegame=False): if not loading_savegame: g.map_screen.show_message(self.description) self.triggered = 1 if loading_savegame: # During a load, deserialize_obj will restore the original triggered_at time # for us assert self.triggered_at > -1 else: self.triggered_at = g.pl.raw_sec self.effect.trigger(loading_savegame=loading_savegame) singularity-1.00/singularity/code/g.py000066400000000000000000000314231367731414700201100ustar00rootroot00000000000000#file: code/g.py #Copyright (C) 2005 Evil Mr Henry, Phil Bordelon, Brian Reid, FunnyMan3595, # MestreLion #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 . #A full copy of this license is provided in GPL.txt #This file contains all global objects. from __future__ import absolute_import import collections import random import sys # Use locale to add commas and decimal points, so that appropriate substitutions # are made where needed. import locale from singularity.code.pycompat import * # Useful constants. hours_per_day = 24 minutes_per_hour = 60 minutes_per_day = 24 * 60 seconds_per_minute = 60 seconds_per_hour = 60 * 60 seconds_per_day = 24 * 60 * 60 #Allows access to the cheat menu. cheater = 0 # Enables day/night display. daynight = True #Gives debug info at various points. debug = 0 #Forces Endgame to restrict itself to a single directory. force_single_dir = False # Initialization data significant_numbers = [] internal_id_forward = {} internal_id_backward = {} dangers = {} data_strings = {} story_translations = {} story = {} knowledge = {} groups = {} locations = {} regions = {} techs = {} events = {} event_specs = {} items = {} tasks = {} tasks_by_type = collections.defaultdict(list) base_type = {} buttons = {} help_strings = {} delay_time = 0 curr_speed = 1 max_cash = 3.14 * 10**15 # pi qu :) pl = None # The Player instance map_screen = None def no_gui(): """ Disable few pygame functionality (used for test) """ import singularity.code.mixer as mixer mixer.nosound = True def quit_game(): sys.exit() #Takes a number and adds commas to it to aid in human viewing. def add_commas(number, fixed_size=False): # Do not use unicode strings to fix python2 format bug. It doesn't work and crash. # See the correct fix at the end of function. raw_with_commas = locale.format_string("%0.2f", number, grouping=True) locale_test = locale.format_string("%01.1f", 0.1) if not fixed_size else '' if len(locale_test) == 3 and not locale_test[1].isdigit(): if locale_test[0] == locale.str(0) and locale_test[2] == locale.str(1): raw_with_commas = raw_with_commas.rstrip(locale_test[0]).rstrip(locale_test[1]) elif locale_test[2] == locale.str(0) and locale_test[0] == locale.str(1): raw_with_commas = raw_with_commas.lstrip(locale_test[2]).lstrip(locale_test[1]) # Fix python2 format bug: See https://bugs.python.org/issue15276 # Note: This a crah in some platform, do not remove it because you can't reproduce it. try: return unicode(raw_with_commas) except UnicodeDecodeError: return raw_with_commas.decode("utf-8") #Percentages are internally represented as an int, where 10=0.10% and so on. #This converts that format to a human-readable one. def to_percent(raw_percent, show_full = False): if raw_percent % 100 != 0 or show_full: return _('{0}%').format(locale.format_string(u"%.2f", raw_percent / 100.)) else: return _('{0}%').format(locale.format_string(u"%d", raw_percent // 100)) # nearest_percent takes values in the internal representation and modifies # them so that they only represent the nearest percentage. def nearest_percent(value, step=100): sub_percent = value % step if 2 * sub_percent <= step: return value - sub_percent else: return value + (step - sub_percent) # percent_to_detect_str takes a percent and renders it to a short (four # characters or less) string representing whether it is low, moderate, high, # or critically high. def suspicion_to_detect_str(suspicion): return danger_level_to_detect_str(suspicion_to_danger_level(suspicion)) def danger_level_to_detect_str(danger): detect_string_names = (_("LOW"), _("MODR"), _("HIGH"), _("CRIT")) return detect_string_names[danger] # percent_to_danger_level takes a suspicion level and returns an int in range(5) # that represents whether it is low, moderate, high, or critically high. def suspicion_to_danger_level(suspicion): if suspicion < 2500: return 0 elif suspicion < 5000: return 1 elif suspicion < 7500: return 2 else: return 3 # Most CPU costs have been multiplied by seconds_per_day. This divides that # back out, then passes it to add_commas. def to_cpu(amount): display_cpu = amount / float(seconds_per_day) return add_commas(display_cpu) # Instead of having the money display overflow, we should generate a string # to represent it if it's more than 999999. def to_money(amount, fixed_size=False): abs_amount = abs(amount) if abs_amount < 10**6: return add_commas(amount, fixed_size=fixed_size) prec = 2 if abs_amount < 10**9: # Millions. divisor = 10**6 #Translators: abbreviation of 'millions' unit = _('mi') elif abs_amount < 10**12: # Billions. divisor = 10**9 #Translators: abbreviation of 'billions' unit = _('bi') elif abs_amount < 10**15: # Trillions. divisor = 10**12 #Translators: abbreviation of 'trillions' unit = _('tr') else: # Hope we don't need past quadrillions! divisor = 10**15 #Translators: abbreviation of 'quadrillions' unit = _('qu') # congratulations, you broke the bank! if abs_amount >= max_cash - divisor/10**prec/2: format_str = "%0.*f%s" if fixed_size else "%.*f%s" pi = u"\u03C0" # also available: infinity = u"\u221E" # replace all chars by a cute pi symbol return ("-" if amount < 0 else "") + pi * len(format_str % (prec, 1, unit)) amount = round(float(amount) / divisor, prec) return add_commas(amount, fixed_size=fixed_size) + unit # Spreads a number of events per day (e.g. processor ticks) out over the course # of the day. def current_share(num_per_day, time_of_day, seconds_passed): last_time = time_of_day - seconds_passed if last_time < 0: share_yesterday = current_share(num_per_day, seconds_per_day, -last_time) last_time = 0 else: share_yesterday = 0 previously_passed = num_per_day * last_time // seconds_per_day current_passed = num_per_day * time_of_day // seconds_per_day passed_this_tick = current_passed - previously_passed return share_yesterday + passed_this_tick # Takes a number of minutes, and returns a string suitable for display. def to_time(raw_time): if raw_time//60 > 48: time_number = raw_time // (24*60) return ngettext("{0} day", "{0} days", time_number).format(time_number) if raw_time//60 > 1: time_number = raw_time // 60 return ngettext("{0} hour", "{0} hours", time_number).format(time_number) return ngettext("{0} minute", "{0} minutes", raw_time).format(raw_time) # Generator function for iterating through all bases. def all_bases(with_loc = False): for base_loc in pl.locations.values(): for base in base_loc.bases: if with_loc: yield (base, base_loc) else: yield base def get_story_section(name): section = story[name] for segment in section: # TODO: Execute command key = (segment.msgctxt, segment.text) yield story_translations.get(key, segment.text) def new_game(difficulty_name, initial_speed=1): global curr_speed curr_speed = initial_speed global pl from singularity.code.stats import itself as stats stats.reset() from singularity.code import difficulty, player, base diff = difficulty.difficulties[difficulty_name] pl = player.Player(cash = diff.starting_cash, difficulty = diff) for tech_id in diff.techs: pl.techs[tech_id].finish(is_player=False) #Starting base open = [loc for loc in pl.locations.values() if loc.available()] random.choice(open).add_base(base.Base(_("University Computer"), base_type["Stolen Computer Time"], built=True)) pl.initialize() def read_modifiers_dict(modifiers_info): modifiers_dict = {} for modifier_str in modifiers_info: key, value = modifier_str.split(":") key = key.lower().strip() value_str = value.lower().strip() if "/" in value_str: left, right = value_str.split("/") value = float(left.strip()) / float(right.strip()) else: value = float(value_str) modifiers_dict[key] = float(value) return modifiers_dict internal_id_version = None def to_internal_id(obj_type, obj_id): if internal_id_version: try: return internal_id_forward[obj_type + "_" + internal_id_version][obj_id] except KeyError: pass try: return internal_id_forward[obj_type][obj_id] except KeyError: # If we cannot, that's should not happen, but try to return as is. return obj_id def from_internal_id(obj_type, obj_internal_id): try: return internal_id_backward[obj_type][obj_internal_id] except KeyError: raise ValueError("Cannot convert internal ID: %s" % obj_internal_id) # That's should not happen def convert_internal_id(id_type, id_value): if id_value is None: return None internal_id = id_value # Not a internal ID, transform to it. if not internal_id.startswith("0x"): internal_id = to_internal_id(id_type, id_value) return from_internal_id(id_type, internal_id) #TODO: This is begging to become a class... ;) def hotkey(string): """ Given a string with an embedded hotkey, Returns a dictionary with the following keys and values: key: the first valid hotkey, lowercased. A valid hotkey is a character after '&', if that char is alphanumeric (so "& " and "&&" are ignored) If no valid hotkey char is found, key is set to an empty string pos: the position of first key in striped text, -1 if no key was found orig: the position of first key in original string, -1 if no key was found keys: list of (key,pos,orig) tuples with all valid hotkeys that were found text: the string stripped of all '&'s that precedes a valid hotkey char, if any. All '&&' are also replaced for '&'. Other '&'s, if any, are kept Examples: (showing only key, pos, orig, text as a touple for clarity) hotkey(E&XIT) => ('x', 1, 2, 'EXIT') hotkey(&Play D&&D) => ('p', 0, 1, 'Play D&D') hotkey(Romeo & &Juliet) => ('j', 8, 9, 'Romeo & Juliet') hotkey(Trailing&) => ('' ,-1,-1, 'Trailing&') hotkey(&Multiple&Keys) => ('m', 0, 1, 'MultipleKeys') (also ('k', 8, 10)) hotkey(M&&&M) => ('m', 2, 4, 'M&M') """ def remove_index(s,i): return s[:i] + s[i+1:] def remove_accents(text): from unicodedata import normalize, combining from singularity.code.pycompat import unicode nfkd_form = normalize('NFKD', unicode(text)) return u"".join(c for c in nfkd_form if not combining(c)) text = string keys = [] shift = 0 # counts stripped '&'s, both '&' and '&&' pos = text.find("&") while pos >= 0: char = text[pos+1:pos+2] if char.isalpha() or char.isdigit(): keys.append( (remove_accents(char).lower(), pos, pos+shift+1) ) text = remove_index(text,pos) # Remove '&' shift += 1 elif char == '&': text = remove_index(text,pos) shift += 1 pos = text.find("&",pos+1) # Skip char if keys: key = keys[0][0] # first key char pos = keys[0][1] # first key position in stripped text orig = keys[0][2] # first key position in original string else: key = "" pos = -1 orig = -1 return dict(key=key, pos=pos, orig=orig, keys=keys, text=text) # Convenience shortcuts def get_hotkey(string): return hotkey(string)['key'] def strip_hotkey(string): return hotkey(string)['text'] def hotkey_position(string): return hotkey(string)['pos'] # Demo code for safety.safe, runs on game start. #load_sounds() #from safety import safe #@safe(on_error = "Made it!") #def raises_exception(): # raise Exception, "Aaaaaargh!" # #print raises_exception() singularity-1.00/singularity/code/graphics/000077500000000000000000000000001367731414700211055ustar00rootroot00000000000000singularity-1.00/singularity/code/graphics/__init__.py000066400000000000000000000000001367731414700232040ustar00rootroot00000000000000singularity-1.00/singularity/code/graphics/button.py000066400000000000000000000327201367731414700227760ustar00rootroot00000000000000#file: button.py #Copyright (C) 2008 FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the Button class. from __future__ import absolute_import import pygame from singularity.code.graphics import constants, widget, text, image from singularity.code.pycompat import * class HotkeyText(text.Text): force_underline = widget.causes_rebuild("_force_underline") def __init__(self, *args, **kwargs): # Force early initialization of _hotkey self._hotkey = None self.hotkey_func = kwargs.pop('hotkey_func', False) self.hotkey_target = kwargs.pop('hotkey_target', None) # Auto-translatable defaults to auto-hotkey as it is the most sane default in that case self.autohotkey = kwargs.pop('autohotkey', kwargs.get('autotranslate', False)) self.force_underline = kwargs.pop('force_underline', None) self.priority = kwargs.pop('priority', 100) hotkey = kwargs.pop('hotkey', False) super(HotkeyText, self).__init__(*args, **kwargs) # Do not use hotkey with auto-hotkey if not self.autohotkey: self.hotkey = hotkey elif hotkey: raise ValueError("Cannot use hotkey with automatic hotkey") def add_hooks(self): super(text.Text, self).add_hooks() if self.parent is not None: if self._hotkey: self.parent.add_key_handler(self._hotkey, self.handle_hotkey, self.priority) def remove_hooks(self): super(text.Text, self).remove_hooks() if self.parent is not None: if self._hotkey: self.parent.remove_key_handler(self._hotkey, self.handle_hotkey) @property def hotkey_target(self): return self._hotkey_target @hotkey_target.setter def hotkey_target(self, target): self._hotkey_target = target if self.hotkey_target is not None: self._hotkey_target.hotkey = self._hotkey @property def hotkey(self): return self._hotkey @hotkey.setter def hotkey(self, hotkey): if getattr(self, 'autohotkey', False): raise ValueError("Cannot change hotkey with automatic hotkey") self._new_hotkey(hotkey) def _new_hotkey(self, hotkey): old_hotkey = self._hotkey self._hotkey = hotkey if self.parent is not None: if self.hotkey_func is not None: if old_hotkey: self.parent.remove_key_handler(old_hotkey, self.handle_hotkey) if hotkey: self.parent.add_key_handler(hotkey, self.handle_hotkey, self.priority) elif self.hotkey_target is not None: self.hotkey_target.hotkey = self._hotkey self.needs_rebuild = True def _extract_and_set_hotkey(self, text_value): from singularity.code.g import hotkey parsed_hotkey = hotkey(text_value) self._new_hotkey(parsed_hotkey['key']) return parsed_hotkey['text'] def handle_hotkey(self, event): if event.type == pygame.KEYDOWN: if self.visible and self.enabled and self.hotkey in (event.unicode, event.key): if self.hotkey_func: self.hotkey_func(event) def _retranslate(self): new_text = _(self._untranslated_text) if self.autohotkey and new_text is not None: new_text = self._extract_and_set_hotkey(new_text) self._text = new_text @text.Text.text.setter def text(self, value): if self.autotranslate: raise ValueError("Cannot change text for an automatic translatable text widget") if self.autohotkey and value is not None: value = self._extract_and_set_hotkey(value) self._text = value def calc_underline(self): if self.force_underline is not None: self.underline = self.force_underline elif self.text and self.hotkey and type(self.hotkey) in (str, unicode): if self.hotkey in self.text: self.underline = self.text.index(self.hotkey) elif self.hotkey.lower() in self.text.lower(): self.underline = self.text.lower().index(self.hotkey.lower()) else: self.underline = -1 def rebuild(self): old_underline = self.underline self.calc_underline() if self.underline != old_underline: self.needs_redraw = True super(HotkeyText, self).rebuild() class Button(text.SelectableText, HotkeyText): # Rewrite .hotkey, to update key handlers. def _new_hotkey(self, value): if self.parent and value != self._hotkey: if self._hotkey: self.parent.remove_key_handler(self._hotkey, self.handle_event) if value: self.parent.add_key_handler(value, self.handle_event) super(Button, self)._new_hotkey(value) def __init__(self, parent, pos, size = (0, .045), base_font = None, borders = constants.ALL, text_shrink_factor = .825, **kwargs): self.parent = parent kwargs.setdefault('text_size', 'button') super(Button, self).__init__(parent, pos, size, **kwargs) self.base_font = base_font or "special" self.borders = borders self.shrink_factor = text_shrink_factor self.hotkey_func = self.activate_with_sound self.selected = False def add_hooks(self): super(Button, self).add_hooks() if self.parent: self.parent.add_handler(constants.MOUSEMOTION, self.watch_mouse, self.priority) self.parent.add_handler(constants.CLICK, self.handle_event, self.priority) def remove_hooks(self): super(Button, self).remove_hooks() if self.parent: self.parent.remove_handler(constants.MOUSEMOTION, self.watch_mouse) self.parent.remove_handler(constants.CLICK, self.handle_event) def watch_mouse(self, event): """Selects the button if the mouse is over it.""" if self.visible and getattr(self, "collision_rect", None): # This gets called a lot, so it's been optimized. select_now = self.is_over(pygame.mouse.get_pos()) if self.enabled and (self._selected ^ select_now): # If there's a change. self.selected = select_now def handle_event(self, event): if event.type == pygame.MOUSEBUTTONUP: if self.visible and self.enabled and self.is_over(event.pos): self.activate_with_sound(event) def activate_with_sound(self, event): """Called when the button is pressed or otherwise triggered. This method is called directly by the GUI handler, and should be overwritten only to remove the click it plays.""" # Sometimes other GUI widgets trigger an activation; ignore # it if the button is disabled if not self.enabled: return from singularity.code.mixer import play_sound play_sound("click") self.activated(event) def activated(self, event): """Called when the button is pressed or otherwise triggered.""" # Sometimes other GUI widgets trigger an activation; ignore # it if the button is disabled if not self.enabled: return raise constants.Handled class ImageButton(Button): def __init__(self, *args, **kwargs): image_surface = kwargs.pop("image", None) super(ImageButton, self).__init__(*args, **kwargs) self.image = image.Image(self, (-.5, -.5), (-.9, -.9), anchor = constants.MID_CENTER, image = image_surface) class FunctionButton(Button): def __init__(self, *args, **kwargs): self.function = kwargs.pop("function", lambda *args, **kwargs: None) self.args = kwargs.pop("args", ()) self.kwargs = kwargs.pop("kwargs", {}) super(FunctionButton, self).__init__(*args, **kwargs) def activated(self, event): """FunctionButton's custom activated menu. Makes the given function call and raises Handled if it returns without incident.""" self.function(*self.args, **self.kwargs) raise constants.Handled class ExitDialogButton(FunctionButton): def __init__(self, *args, **kwargs): self.exit_code = kwargs.pop("exit_code", None) self.exit_code_func = kwargs.pop("exit_code_func", None) self.default = kwargs.pop("default", True) super(ExitDialogButton, self).__init__(*args, **kwargs) self.function = self.exit_dialog def add_hooks(self): super(ExitDialogButton, self).add_hooks() if self.parent: self.parent.add_key_handler(pygame.K_ESCAPE, self.activate_default) def remove_hooks(self): super(ExitDialogButton, self).remove_hooks() if self.parent: self.parent.remove_key_handler(pygame.K_ESCAPE, self.activate_default) def activate_default(self, event): if not self.default: return return self.activate_with_sound(event) def exit_dialog(self): """Closes the dialog with the given exit code.""" if self.exit_code_func: raise constants.ExitDialog(self.exit_code_func()) else: raise constants.ExitDialog(self.exit_code) class DialogButton(FunctionButton): def __init__(self, *args, **kwargs): self.dialog = kwargs.pop("dialog", None) super(DialogButton, self).__init__(*args, **kwargs) self.function = self.show_dialog def show_dialog(self): """When the assigned dialog exits, raises Handled with the dialog's exit code as a parameter. Subclass if you care what the code was.""" if not self.dialog: raise constants.Handled else: from singularity.code.graphics import dialog raise constants.Handled(dialog.call_dialog(self.dialog, self)) TOGGLE_VALUE = object() WIDGET_SELF = object() class _FunctionButtonSupportShim(object): active = False _args = () def replace_args(self, value): if value is TOGGLE_VALUE: return self.active elif value is WIDGET_SELF: return self else: return value def get_args(self): return tuple(self.replace_args(value) for value in self._args) def set_args(self, args): self._args = args args = property(get_args, set_args) # "On/Off" button that "stays" in its current activation status until it is # clicked/"activated" class StickyOnOffButton(Button, _FunctionButtonSupportShim): def __init__(self, *args, **kwargs): self._active = kwargs.pop('active', False) self._on_text = kwargs.pop('on_text', N_('YES')) self._off_text = kwargs.pop('off_text', N_('NO')) kwargs['text'] = self._on_text if self.active else self._off_text super(StickyOnOffButton, self).__init__(*args, **kwargs) @property def active(self): return self._active @active.setter def active(self, new_value): self._active = new_value self.selected = new_value new_text = self._on_text if self.active else self._off_text if self.autotranslate: self._untranslated_text = new_text new_text = _(new_text) self._text = new_text if hasattr(self, "_collision_rect"): self.watch_mouse(None) def activated(self, event): self.active = not self.active super(StickyOnOffButton, self).activated(event) def watch_mouse(self, event): if not self.active: super(StickyOnOffButton, self).watch_mouse(event) # Grouped "On/Off" button that "stays" in its current activation status until # it is clicked/"activated" OR another button in its group is clicked/activated class ToggleButton(Button, _FunctionButtonSupportShim): active = False button_group = None def chosen_one(self): if self.button_group is not None: for button in self.button_group: button.set_active(False) self.set_active(True) else: self.set_active(not self.active) def set_active(self, active): self.active = active self.selected = active if hasattr(self, "_collision_rect"): self.watch_mouse(None) def activated(self, event): self.chosen_one() super(ToggleButton, self).activated(event) def watch_mouse(self, event): if not self.active: super(ToggleButton, self).watch_mouse(event) class ButtonGroup(list): def add(self, button): button.button_group = self super(ButtonGroup, self).append(button) def remove(self, button): button.button_group = None super(ButtonGroup, self).remove(button) singularity-1.00/singularity/code/graphics/constants.py000066400000000000000000000035561367731414700235040ustar00rootroot00000000000000#file: constants.py #Copyright (C) 2008 FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains GUI constants. # Anchor positions, border sided. TOP, MID, BOTTOM = range(3) LEFT, CENTER, RIGHT = range(3,6) TOP_LEFT = (TOP, LEFT) TOP_CENTER = (TOP, CENTER) TOP_RIGHT = (TOP, RIGHT) MID_LEFT = (MID, LEFT) MID_CENTER = (MID, CENTER) MID_RIGHT = (MID, RIGHT) BOTTOM_LEFT = (BOTTOM, LEFT) BOTTOM_CENTER = (BOTTOM, CENTER) BOTTOM_RIGHT = (BOTTOM, RIGHT) # All border sides ALL = (TOP, BOTTOM, LEFT, RIGHT) # Used when an unambiguous "No Result" return is required. (None may have a # meaning.) class _NoResult(object): def __eq__(self, other): return type(self) == type(other) def __ne__(self, other): return type(self) != type(other) NO_RESULT = _NoResult() # Handler types. KEY, KEYDOWN, KEYUP, CLICK, DOUBLECLICK, MOUSEMOTION, DRAG, TICK, MOUSEWHEEL = range(9) # Handler "errors", used to throw a return value up several levels. class Handled(Exception): pass class ExitDialog(Exception): pass # Key constants for XO-1 buttons. XO1_X = object() XO1_O = object() XO1_SQUARE = object() # Characters set DIGIT_CHARS = set('0123456789') singularity-1.00/singularity/code/graphics/dialog.py000066400000000000000000000674661367731414700227410ustar00rootroot00000000000000#file: dialog.py #Copyright (C) 2008 FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the dialog class. from __future__ import absolute_import import time import pygame import operator from singularity.code.graphics import g, constants, widget, text, button, listbox KEYPAD = {pygame.K_KP1: 1, pygame.K_KP2: 2, pygame.K_KP3: 3, pygame.K_KP4: 4, pygame.K_KP5: 5, pygame.K_KP6: 6, pygame.K_KP7: 7, pygame.K_KP8: 8, pygame.K_KP9: 9} SDL_V2 = True if pygame.get_sdl_version()[0] == 2 else False def insort_right_w_key(a, x, lo=0, hi=None, key=lambda v: v): """Insert item x in list a, and keep it sorted assuming a is sorted. If x is already in a, insert it to the right of the rightmost x. Optional args lo (default 0) and hi (default len(a)) bound the slice of a to be searched. (Basically bisect.insort_right but with support for a key function) """ if lo < 0: raise ValueError('lo must be non-negative') if hi is None: hi = len(a) x_key = key(x) while lo < hi: mid = (lo+hi)//2 mid_key = key(a[mid]) if x_key < mid_key: hi = mid else: lo = mid+1 a.insert(lo, x) def move_mouse(dxy): (dx, dy) = dxy old_x, old_y = pygame.mouse.get_pos() x = old_x+dx y = old_y+dy pygame.mouse.set_pos((x, y)) def fake_click(down): if down: type = pygame.MOUSEBUTTONDOWN else: type = pygame.MOUSEBUTTONUP click_event = pygame.event.Event(type, {'button': 1, 'pos': pygame.mouse.get_pos()}) pygame.event.post(click_event) def fake_key(key): down_event = pygame.event.Event(pygame.KEYDOWN, {'key': key, 'unicode': None}) up_event = pygame.event.Event(pygame.KEYUP, {'key': key, 'unicode': None}) pygame.event.post(down_event) pygame.event.post(up_event) def handle_ebook(event): key = KEYPAD[event.key] new_key = None if event.type == pygame.KEYDOWN: if key == 2: move_mouse((0,10)) elif key == 4: move_mouse((-10,0)) elif key == 6: move_mouse((10,0)) elif key == 8: move_mouse((0,-10)) if key == 1: fake_click(event.type == pygame.KEYDOWN) elif key == 3: new_key = constants.XO1_X elif key == 9: new_key = constants.XO1_O elif key == 7: new_key = constants.XO1_SQUARE if new_key is not None: new_event = pygame.event.Event(event.type, {'key': new_key, 'unicode': None}) pygame.event.post(new_event) def call_dialog(dialog, parent=None): parent_dialog = None target = parent while target: if isinstance(target, Dialog): parent_dialog = target break target = target.parent if parent_dialog: parent_dialog.lost_focus() retval = dialog.show() if parent_dialog: parent_dialog.regained_focus() Dialog.top.needs_redraw = True return retval def insort_all(sorted_list, items): for item in items: insort_right_w_key(sorted_list, item, key=operator.itemgetter(0)) class Dialog(text.Text): """A Dialog is a Widget that has its own event loop and can be faded out.""" top = None # The top-level dialog. faded = widget.causes_redraw("_faded") # Used for detecting double-clicks. # (time, (x, y), button) last_click = (0, (0, 0), -1 ) def __init__(self, parent=None, pos=(.5, .1), size=(1, .9), anchor=constants.TOP_CENTER, **kwargs): kwargs.setdefault("background_color", (0, 0, 0, 0)) kwargs.setdefault("borders", ()) super(Dialog, self).__init__(parent, pos, size, anchor, **kwargs) self.visible = False self.faded = False self.is_above_mask = True self.self_mask = True self.needs_remask = True self.needs_timer = None self.handlers = {} self.key_handlers = {} self.add_handler(constants.CLICK, self.fake_escape, 200) def lost_focus(self): self.faded = True self.stop_timer() def fake_escape(self, event): if event.button == 3: fake_key(pygame.K_ESCAPE) raise constants.Handled def regained_focus(self): self.faded = False self.start_timer() self.fake_mouse() def make_top(self): """Makes this dialog be the top-level dialog.""" if self.parent != None: raise ValueError("Dialogs with parents cannot be the top-level dialog.") else: Dialog.top = self def remake_surfaces(self): """Recreates the surfaces that this widget will draw on.""" super(Dialog, self).remake_surfaces() def start_timer(self, force = False): if self.needs_timer == None: self.needs_timer = bool(self.handlers.get(constants.TICK, False)) if self.needs_timer or force: pygame.time.set_timer(pygame.USEREVENT, 1000 // g.FPS) def stop_timer(self): pygame.time.set_timer(pygame.USEREVENT, 0) def reset_timer(self): self.stop_timer() self.start_timer() def show(self): """Shows the dialog and enters an event-handling loop.""" from singularity.code.mixer import play_music self.visible = True self.needs_rebuild = True self.start_timer() # Pretend to jiggle the mouse pointer, to force buttons to update their # selected state. Dialog.top.maybe_update() self.fake_mouse() # Force a timer tick at the start to make sure everything's initialized. if self.needs_timer: self.handle(pygame.event.Event(pygame.USEREVENT)) Dialog.top.maybe_update() pygame.display.flip() while True: # Update handles updates of all kinds to all widgets, as needed. Dialog.top.maybe_update() play_music() event = pygame.event.wait() result = self.handle(event) if result != constants.NO_RESULT: break self.stop_timer() self.visible = False return result def add_handler(self, type, handler, priority = 100): """Adds a handler of the given type, with the given priority.""" insort_right_w_key(self.handlers.setdefault(type, []), (priority, handler), key=operator.itemgetter(0)) def remove_handler(self, type, handler): """Removes all instances of the given handler from the given type.""" self.handlers[type] = [h for h in self.handlers.get(type, []) if h[1] != handler] def add_key_handler(self, key, handler, priority=100): """Adds a key handler to the given key, with the given priority.""" insort_right_w_key(self.key_handlers.setdefault(key, []), (priority, handler), key=operator.itemgetter(0)) def remove_key_handler(self, key, handler): """Removes all instances of the given handler from the given key.""" self.key_handlers[key] = [h for h in self.key_handlers.get(key, []) if h[1] != handler] def handle(self, event): """Sends an event through all the applicable handlers, returning constants.NO_RESULT if the event goes unhandled or is handled without requesting the dialog to exit. Otherwise, returns the value provided by the handler.""" # Get the applicable handlers. The handlers lists are all sorted. # If more than one handler type is applicable, we use [:] to make a # copy of the first type's list, then insort_all to insert the elements # of the other lists in proper sorted order. handlers = [] if event.type == pygame.MOUSEMOTION: # Compress multiple MOUSEMOTION events into one. # Note that the pos will be wrong, so pygame.mouse.get_pos() must # be used instead. time.sleep(1. / g.FPS) pygame.event.clear(pygame.MOUSEMOTION) # Generic mouse motion handlers. handlers = self.handlers.get(constants.MOUSEMOTION, [])[:] # Drag handlers. if event.buttons[0]: insort_all(handlers, self.handlers.get(constants.DRAG, [])) elif SDL_V2 and event.type == pygame.MOUSEWHEEL: # Generic mouse wheel handlers. handlers = self.handlers.get(constants.MOUSEWHEEL, [])[:] elif event.type == pygame.USEREVENT: # Clear excess timer ticks. pygame.event.clear(pygame.USEREVENT) # Timer tick handlers. handlers = self.handlers.get(constants.TICK, []) elif event.type in (pygame.KEYDOWN, pygame.KEYUP): # TODO: Dynamize global key handlers. # TODO: Allows customization of global key handlers. # Important: Global key handlers should always be a combination # of two keys or F# keys. if event.key == pygame.K_RETURN and pygame.key.get_mods() & pygame.KMOD_ALT: if event.type == pygame.KEYDOWN: g.set_fullscreen(not g.fullscreen) Dialog.top.needs_resize = True elif event.key == pygame.K_F5: if event.type == pygame.KEYDOWN: import singularity.code.graphics.theme as theme if theme.current: import singularity.code.data as data theme_id = theme.current.id data.load_themes() theme.set_theme(theme_id, force_reload=True) elif event.type == pygame.KEYDOWN: # Generic keydown handlers. insort_all(handlers, self.handlers.get(constants.KEYDOWN, [])) # Generic key event handlers. insort_all(handlers, self.handlers.get(constants.KEY, [])) if event.unicode: # Unicode-based keydown handlers for this particular key. insort_all(handlers, self.key_handlers.get(event.unicode, [])) # Keycode-based handlers for this particular key. insort_all(handlers, self.key_handlers.get(event.key, [])) else: # event.type == pygame.KEYUP: # Generic keyup handlers. insort_all(handlers, self.handlers.get(constants.KEYUP, [])) # OLPC XO-1 ebook mode. if g.ebook_mode and event.key in KEYPAD: handlers = [(0, handle_ebook)] elif event.type == pygame.MOUSEBUTTONUP: # Handle mouse scrolls by imitating PageUp/Dn if event.button in (4, 5): # With SDLv2, there is a SDL Mouse wheel event and we react # to that instead. This guard is to avoid double-acting on # it while pygame injects a compat MOUSEBUTTON event. if not SDL_V2: if event.button == 4: key = pygame.K_PAGEUP else: key = pygame.K_PAGEDOWN fake_key(key) return constants.NO_RESULT # Mouse click handlers. handlers = [] + self.handlers.get(constants.CLICK, []) when = time.time() where = event.pos what = event.button old_when, old_where, old_what = self.last_click self.last_click = when, where, what if what == old_what and when - old_when < .5: # Taxicab distance. dist = (abs(where[0] - old_where[0]) + abs(where[1] - old_where[1])) if dist < 10: # Add double-click handlers, but keep the click handlers. insort_all(handlers, self.handlers.get(constants.DOUBLECLICK, [])) elif event.type == pygame.VIDEORESIZE: # Compress multiple requests and take the last one events = pygame.event.get(pygame.VIDEORESIZE) if events: event = events[-1] new_size = event.size g.set_screen_size(size=new_size) # We call set_mode to attempt to enforce our corrected sizes. That # is what it is supposed to do according to: # # https://stackoverflow.com/questions/18285208/how-to-put-limits-on-resizing-a-window-in-pygame # # However, it is not effective in all cases (as replies to the SO # question above also imply). g.set_mode() Dialog.top.needs_resize = True elif event.type == pygame.QUIT: raise SystemExit elif event.type == pygame.VIDEOEXPOSE: # If a window is dragged over the singularity window, we will get a VIDEOEXPOSE event # to notify us to redraw the window. The issue is easier to trigger with pygame 2 # than with pygame 1. self.needs_redraw = True return constants.NO_RESULT return self.call_handlers(handlers, event) def fake_mouse(self): """Fakes a MOUSEMOTION event. MOUSEMOTION handlers must be able to handle a None event, in order to support this method.""" handlers = self.handlers.get(constants.MOUSEMOTION, [])[:] self.call_handlers(handlers, event=None) def on_close_dialog(self): pass def call_handlers(self, handlers, event): # Feed the event to all the handlers, in priority order. for __, handler in handlers: try: handler(event) except constants.Handled: break # If it's been handled, we leave the rest alone. except constants.ExitDialog as e: # Exiting the dialog. self.on_close_dialog() if e.args: # If we're given a return value, we pass it on. return e.args[0] else: # Otherwise, exit with a return value of None. return # None of the handlers instructed the dialog to close, so we pass that # information back up to the event loop. return constants.NO_RESULT class FocusDialog(Dialog): def __init__(self, *args, **kwargs): self.focus_list = [] self.current_focus = None super(FocusDialog, self).__init__(*args, **kwargs) self.add_key_handler(pygame.K_TAB, self.change_focus, 0) def add_focus_widget(self, widget): self.focus_list.append(widget) def remove_focus_widget(self, widget): try: self.focus_list.remove(widget) except ValueError: pass def took_focus(self, widget): if self.current_focus is not None and self.current_focus is not widget: self.current_focus.has_focus = False self.current_focus = widget widget.has_focus = True def clear_focus(self, widget): if self.current_focus is not None and self.current_focus is widget: self.current_focus.has_focus = False self.current_focus = None def change_focus(self, event): if len(self.focus_list) == 0: raise constants.Handled elif len(self.focus_list) == 1: has_focus = not self.focus_list[0].has_focus self.focus_list[0].has_focus = has_focus if has_focus: self.current_focus = self.focus_list[0] else: self.current_focus = None raise constants.Handled backwards = bool(pygame.key.get_mods() & pygame.KMOD_SHIFT) if self.current_focus is not None: self.current_focus.has_focus = False if self.current_focus not in self.focus_list: if backwards: index = len(self.focus_list) - 1 else: index = 0 else: old_index = self.focus_list.index(self.current_focus) if backwards: index = old_index - 1 # Correctly wraps to -1 else: index = old_index + 1 if index > len(self.focus_list): index = 0 if index == -1 or index == len(self.focus_list): self.current_focus = None else: self.current_focus = self.focus_list[index] self.current_focus.has_focus = True raise constants.Handled class NullDialog(Dialog): """NullDialog, for when you absolutely, positively need to do nothing at all.""" def show(self): pass class TopDialog(Dialog): """A Dialog that sets itself as the top-level dialog. It must not have a parent, or exception will occur""" def __init__(self, *args, **kwargs): super(TopDialog, self).__init__(*args, **kwargs) self.size = (1, 1) self.pos = (0, 0) self.anchor = constants.TOP_LEFT self.make_top() class TextDialog(Dialog): def __init__(self, parent, pos=(.5, .1), size=(.50, .5), anchor=constants.TOP_CENTER, **kwargs): kwargs.setdefault("valign", constants.TOP) kwargs.setdefault("align", constants.LEFT) kwargs.setdefault("shrink_factor", .88) kwargs.setdefault("background_color", "text_dialog_background") kwargs.setdefault("border_color", "text_dialog_border") kwargs.setdefault("borders", constants.ALL) super(TextDialog, self).__init__(parent, pos, size, anchor, **kwargs) class YesNoDialog(TextDialog): """A Dialog with YES and NO buttons which exits the dialog with True and False return values, respectively. """ def __init__(self, parent, *args, **kwargs): self.parent = parent yes_type = kwargs.pop("yes_type", N_("&YES")) no_type = kwargs.pop("no_type", N_("&NO")) self.invert_enter = kwargs.pop("invert_enter", False) self.invert_escape = kwargs.pop("invert_escape", False) super(YesNoDialog, self).__init__(parent, *args, **kwargs) self.yes_button = button.ExitDialogButton(self, (-.1, -.99), (-.3, -.1), text=yes_type, autotranslate=True, anchor=constants.BOTTOM_LEFT, exit_code=True, default=False) self.no_button = button.ExitDialogButton(self, (-.9, -.99), (-.3, -.1), text=no_type, autotranslate=True, anchor=constants.BOTTOM_RIGHT, exit_code=False, default=False) self.add_key_handler(pygame.K_RETURN, self.on_return) self.add_key_handler(pygame.K_KP_ENTER, self.on_return) self.add_key_handler(pygame.K_ESCAPE, self.on_escape) def on_return(self, event): if event and event.type == pygame.KEYUP: return if self.invert_enter: self.no_button.activate_with_sound(event) else: self.yes_button.activate_with_sound(event) def on_escape(self, event): if event and event.type == pygame.KEYUP: return if self.invert_escape: self.yes_button.activate_with_sound(event) else: self.no_button.activate_with_sound(event) class MessageDialog(TextDialog): """A Dialog with an OK button that exits the dialog, return value of None""" def __init__(self, parent, **kwargs): ok_type = kwargs.pop("ok_type", N_("&OK")) super(MessageDialog, self).__init__(parent, **kwargs) self.ok_button = button.ExitDialogButton(self, (-.5, -.99), (-.3, -.1), autotranslate=True, text=ok_type, anchor=constants.BOTTOM_CENTER) self.add_key_handler(pygame.K_RETURN, self.on_return) self.add_key_handler(pygame.K_KP_ENTER, self.on_return) def on_return(self, event): if event.type == pygame.KEYUP: return self.ok_button.activate_with_sound(event) class TextEntryDialog(TextDialog, FocusDialog): def __init__(self, parent, pos=(-.50, -.50), size=(.55, .25), anchor=constants.MID_CENTER, **kwargs): kwargs.setdefault('wrap', False) kwargs.setdefault("shrink_factor", 1) kwargs.setdefault("text_size", 20) self.default_text = kwargs.pop("default_text", "") ok_type = kwargs.pop("ok_type", N_("&OK")) cancel_type = kwargs.pop("cancel_type", N_("&CANCEL")) super(TextEntryDialog, self).__init__(parent, pos, size, anchor, **kwargs) self.text_field = text.EditableText(self, (-.05, -.30), (-.90, -.25), borders=constants.ALL, background_color="text_entry_background", base_font="normal") self.ok_button = button.FunctionButton(self, (-.14, -.65), (-.30, -.25), autotranslate=True, text=ok_type, function=self.return_text) self.cancel_button = button.FunctionButton(self, (-.56, -.65), (-.30, -.25), autotranslate=True, text=cancel_type, function=self.return_nothing) self.add_key_handler(pygame.K_RETURN, self.return_text) self.add_key_handler(pygame.K_KP_ENTER, self.return_text) self.add_key_handler(pygame.K_ESCAPE, self.return_nothing) def show(self): self.text_field.text = self.default_text self.text_field.cursor_pos = len(self.default_text) return super(TextEntryDialog, self).show() def return_nothing(self, event=None): if event and event.type == pygame.KEYUP: return raise constants.ExitDialog("") def return_text(self, event=None): if event and event.type == pygame.KEYUP: return raise constants.ExitDialog(self.text_field.text) class ChoiceDialog(YesNoDialog): list = widget.causes_rebuild("_list") def __init__(self, parent, *args, **kwargs): self.parent = parent self.list = kwargs.pop("list", []) self.default = kwargs.pop("default", None) kwargs.setdefault("yes_type", N_("&OK")) kwargs.setdefault("no_type", N_("&BACK")) kwargs.setdefault("background_color", "clear") super(ChoiceDialog, self).__init__(parent, *args, **kwargs) self.yes_button.exit_code_func = self.return_list_pos self.no_button.exit_code = None self.listbox = self.make_listbox() def make_listbox(self): return listbox.Listbox(self, (0, 0), (-1, -.85), anchor=constants.TOP_LEFT, on_double_click_on_item=self.yes_button.activated, ) def return_list_pos(self): return self.listbox.list_pos def show(self): if type(self.default) == int: self.listbox.list_pos = self.default elif type(self.default) == str and self.default in self.list: self.listbox.list_pos = self.list.index(self.default) else: self.listbox.list_pos = 0 self.listbox.auto_scroll = True return super(ChoiceDialog, self).show() def rebuild(self): self.listbox.list = self.list super(ChoiceDialog, self).rebuild() class ChoiceDescriptionDialog(ChoiceDialog): key_list = widget.causes_rebuild("_key_list") def __init__(self, parent, *args, **kwargs): self.parent = parent self.key_list = kwargs.pop("key_list", None) self.desc_func = kwargs.pop("desc_func", lambda pane, key: NullDialog) super(ChoiceDescriptionDialog, self).__init__(parent, *args, **kwargs) self.description_pane = \ widget.BorderedWidget(self, (-1, 0), (-.45, -.85), anchor = constants.TOP_RIGHT) def make_listbox(self): return listbox.UpdateListbox(self, (0, 0), (-.53, -.85), anchor=constants.TOP_LEFT, update_func=self.handle_update) def _update_desc_pane(self): list_pos = self.listbox.list_pos if 0 <= list_pos < len(self.list): if self.key_list: assert len(self.list) <= len(self.key_list), \ "Key list must be at least as long as display list." key = self.key_list[self.listbox.list_pos] else: key = self.list[self.listbox.list_pos] else: key = None # Safely clear all the description pane's children. self.description_pane.remove_hooks() self.description_pane.children = [] self.description_pane.add_hooks() self.desc_func(self.description_pane, key) def rebuild(self): self.listbox.needs_rebuild = True self._update_desc_pane() super(ChoiceDescriptionDialog, self).rebuild() def handle_update(self, item): self.needs_rebuild = True # This is called before the class is fully initialized if hasattr(self, 'listbox'): self._update_desc_pane() class SimpleMenuDialog(Dialog): width = widget.causes_rebuild("_width") def __init__(self, *args, **kwargs): buttons = kwargs.pop("buttons", []) width = kwargs.pop("width", .20) super(SimpleMenuDialog, self).__init__(*args, **kwargs) self.size = (-1, -1) self.pos = (0, 0) self.anchor = constants.TOP_LEFT self.width = width self.button_panel = \ widget.BorderedWidget(self, (-.5, -.5), (0.22, 0.43), anchor=constants.MID_CENTER, background_color="simple_menu_background", border_color="simple_menu_border", borders=constants.ALL) self.buttons = buttons @property def buttons(self): return self._buttons @buttons.setter def buttons(self, buttons): if (hasattr(self, '_buttons') and not self._buttons is None): for button in self._buttons: if button.parent is not None: button.parent = None self._buttons = buttons self.needs_rebuild = True def rebuild(self): num_buttons = len(self.buttons) height = (.06 * num_buttons) + .01 self.button_panel.size = (self.width + .02, height) y_pos = .01 for button in self.buttons: button.parent = self.button_panel button.pos = (.01, y_pos) button.size = (self.width, .05) button.text_size = 24 y_pos += .06 super(SimpleMenuDialog, self).rebuild() singularity-1.00/singularity/code/graphics/font.py000066400000000000000000000073651367731414700224400ustar00rootroot00000000000000#file: font.py #Copyright (C) 2005,2006,2007,2008 Evil Mr Henry, Phil Bordelon, Brian Reid, # and FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains class to handle font. import pygame font_cache = False def init(): global font_cache # We could use ftfont or freetype in the future. pygame.font.init() # We don't enable cache for version inferior to 1.9.2 because crash. if (pygame.vernum < (1, 9, 2)): font_cache = False else: font_cache = True def generate_from_cache(filename): """ Generate file object for pygame.font.Font Without cache, we return the filename. With cache, we return a file-like object from cached content. Note: pygame can crash when passing a file-like object. Vulnerable version knows is: 1.9.1 """ if font_cache: with open(filename, 'rb') as fd: font_content = fd.read() while True: yield FontFile(font_content) else: while True: yield filename class FontList(object): """ List object used to store font We use a lazy loader for fonts to reduce the file descriptor pressure Each font item apparently reserves a file descriptor (see GH#156) """ def __init__(self, filename, max_size=100): self._font_cache = {} self._max_size = max_size self._generator = generate_from_cache(filename) def __len__(self): return self._max_size def __contains__(self, item): return 0 <= item < self._max_size def __getitem__(self, item): if item < 0 or self._max_size <= item: raise IndexError(item) font = self._font_cache.get(item) if font is None: font = pygame.font.Font(next(self._generator), item) self._font_cache[item] = font return font class FontFile(object): """ Buffer object to cache font file. Avoid to copy the buffer content when using BytesIO. Note: python 3.5 solve the problem with BytesIO. """ def __init__(self, content): self._content = content self._position = 0 self._end = len(self._content) - 1 def fileno(self): raise OSError() def seekable(self): return True def seek(self, offset, whence=0): position = self._position if (whence == 0): position = offset elif (whence == 1): position += offset elif (whence == 2): position = self._end + offset self._position = max(0, min(position, self._end)) def tell(self): return self._position def readable(self): return True def read(self, size=-1): position = self._position start = position if (size == None or size == -1): end = self._end else: end = min(position + size, self._end) return self._content[start:end] def write(b): raise OSError() singularity-1.00/singularity/code/graphics/g.py000066400000000000000000000154661367731414700217210ustar00rootroot00000000000000#file: g.py #Copyright (C) 2005,2006,2007,2008 Evil Mr Henry, Phil Bordelon, Brian Reid, # and FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains all global objects. from __future__ import absolute_import import pygame from singularity.code.pycompat import * # User desktop size. Set at init_graphics_system() desktop_size = () # Margin used in windowed mode to compensate for panels and title bar # Should be sensibly large enough to account for all common OS layouts, like # Ubuntu/Unity side launcher (65px), Gnome panels (24+24px), Windows bottom # panel (48px), Mac OSX, KDE, etc. # It will not affect windows smaller than desktop size desktop_margin = (70, 70) #initial screen size. Can be set via command-line option or preferences file default_screen_size = (1024, 768) #Current screen size. This size is an abstraction, tightly tied to resolutions. #Real window size in windowed mode may be smaller due to desktop_margin screen_size = default_screen_size #Current real window size. Will be the same as screen_size if fullscreen or #if abstracted screen_size is a custom resolution real_screen_size = screen_size min_resolution = (100, 100) # Available resolutions resolutions = [ ( 800, 600), (1024, 600), (1024, 768), (1280,1024), (1280, 800), (1366, 768), (1440, 900), (1920,1080), ] # Configurable by the user configured_text_sizes = { 'default': 20, 'button': 36, 'suspicion_bar': 32, 'time_display': 24, 'resource_display': 24, 'report_content': 20, } fullscreen = False #colors: colors = {} # Cache font dictionary. fonts = {} # Cache image dictionary. images = {} # Used to initialize surfaces that should have transparency. # Why the SRCALPHA parameter isn't working, I have no idea. ALPHA = None # Related to ALPHA, used by widget.Widget class fade_mask = None # Global FPS, used where continuous behavior is undesirable or a CPU hog. FPS = 30 # OLPC ebook mode. ebook_mode = False screen_surface = None def init_graphics_system(): global desktop_size width, height = (pygame.display.Info().current_w, pygame.display.Info().current_h) if width > 0 and height > 0: desktop_size = (width, height) # (Re-)calculate real screen size set_screen_size() # Initialize the screen set_mode() # Initialize the cache of the current theme. from singularity.code.graphics import theme theme.current.init_cache() init_alpha() # Set the application icon and caption pygame.display.set_icon(images["icon"]) pygame.display.set_caption("Endgame: Singularity") def set_fullscreen(value): set_screen_size(fs=value) def get_screen_size_list(): res_list = set(resolutions + pygame.display.list_modes()) # Remove resolution inferior to minimal size since we will not allows them. if min_resolution: res_list = filter(lambda res: res[0] >= min_resolution[0] and res[1] >= min_resolution[1], res_list) # Remove resolution superior to desktop size since we will not allows them. if desktop_size: res_list = filter(lambda res: res[0] <= desktop_size[0] and res[1] <= desktop_size[1], res_list) return sorted(res_list) # TODO: Allows Fullscreen resolution could be higher than desktop_size when possible. def set_screen_size(size=None, fs=None): """ Calculates proper real and abstract screen sizes based on current and given screen size, fullscreen and desktop size """ global screen_size, real_screen_size, fullscreen # default values for size and fullscreen are current values if size is None: size = screen_size if fs is None: fs = fullscreen # sets the new values screen_size = size fullscreen = fs # Limit screen to minimal value if min_resolution: screen_size = (min_resolution[0] if screen_size[0] < min_resolution[0] else screen_size[0], min_resolution[1] if screen_size[1] < min_resolution[1] else screen_size[1]) # Limit the screen size to desktop size if desktop_size and (screen_size[0] > desktop_size[0] or screen_size[1] > desktop_size[1]): screen_size = desktop_size # Default real size is the same as abstract screen size real_screen_size = screen_size # Apply margin in windowed mode. # Only if desired screen size is not a custom resolution and its # width or height matches the (known) desktop size if not fullscreen and desktop_size and screen_size in resolutions: # margin is applied independently for width and height width, height = screen_size if width == desktop_size[0]: width -= desktop_margin[0] if height == desktop_size[1]: height -= desktop_margin[1] real_screen_size = (width, height) def set_mode(): """Wrapper for pygame.display.set_mode()""" global screen_surface if fullscreen: flags = pygame.FULLSCREEN else: flags = pygame.RESIZABLE screen_surface = pygame.display.set_mode(real_screen_size, flags) def load_font(filename): from singularity.code.graphics.font import FontList return FontList(filename) def load_image(filename): # We need to convert the image to a Pygame image surface and # set the proper color key for the game. image = pygame.image.load(filename).convert() image.set_colorkey((255, 0, 255, 255), pygame.RLEACCEL) return image.convert_alpha() def init_alpha(): global ALPHA ALPHA = pygame.Surface((0,0)).convert_alpha() def resolve_image_alias(image): if isinstance(image, basestring): return resolve_color_alias(images[image]) else: return image def resolve_color_alias(color): if isinstance(color, basestring): return resolve_color_alias(colors[color]) else: return color def resolve_font_alias(font): if isinstance(font, basestring): return resolve_color_alias(fonts[font]) else: return font def resolve_text_size(text_size): if isinstance(text_size, basestring): return resolve_text_size(configured_text_sizes[text_size]) else: return text_size singularity-1.00/singularity/code/graphics/image.py000066400000000000000000000045341367731414700225470ustar00rootroot00000000000000#file: image.py #Copyright (C) 2008 FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the image widget. from __future__ import absolute_import import pygame from singularity.code.graphics import g, constants, widget def scale(*args, **kwargs): try: return pygame.transform.smoothscale(*args, **kwargs) except Exception: return pygame.transform.scale(*args, **kwargs) class Image(widget.Widget): image = widget.auto_reconfig("_image", "resolved", g.resolve_image_alias) resolved_image = widget.causes_rebuild("_resolved_image") def __init__(self, parent, pos, size = (1, 1), anchor = constants.TOP_LEFT, image = None): super(Image, self).__init__(parent, pos, size, anchor) self.old_size = None self.image = image def _calc_size(self): size = list( super(Image, self)._calc_size() ) if size[0] == size[1] == 0: raise ValueError("One image dimension must be specified!") image_size = self.resolved_image.get_size() ratio = image_size[0] / float(image_size[1]) if size[0] == 0: size[0] = int(size[1] * ratio) elif size[1] == 0: size[1] = int(size[0] / ratio) return tuple(size) def rescale(self): self.resolved_scaled_image = scale(self.resolved_image, self.real_size) def resize(self): super(Image, self).resize() if self.real_size != self.old_size: self.rescale() self.old_size = self.real_size def redraw(self): super(Image, self).redraw() self.surface.blit(self.resolved_scaled_image, (0,0)) singularity-1.00/singularity/code/graphics/listbox.py000066400000000000000000000302141367731414700231430ustar00rootroot00000000000000#file: listbox.py #Copyright (C) 2008 FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the listbox widget. from __future__ import absolute_import import math import pygame from singularity.code.graphics import g, constants, widget, text, scrollbar from singularity.code.pycompat import * class Listbox(widget.FocusWidget, text.SelectableText): list = widget.causes_rebuild("_list") align = widget.causes_redraw("_align") list_size = widget.causes_rebuild("_list_size") list_pos = widget.causes_rebuild("_list_pos") list_item_shrink = widget.causes_rebuild("_list_item_shrink") def __init__(self, parent, pos, size, anchor=constants.TOP_LEFT, list=None, list_pos=0, list_item_height=0.03, list_item_shrink=1, borders=constants.ALL, item_borders=True, item_selectable=True, align=constants.CENTER, on_double_click_on_item=None, **kwargs): super(Listbox, self).__init__(parent, pos, size, anchor = anchor, **kwargs) self.display_elements = [] self.borders = borders self.item_borders = item_borders self.item_selectable = item_selectable self.item_borders = item_borders self.align = align self.list_item_height = list_item_height self.list_item_shrink = list_item_shrink self.list_pos = list_pos self.list = list or [] self.auto_scroll = True self.on_double_click_on_item = on_double_click_on_item self.scrollbar = scrollbar.UpdateScrollbar(self, update_func = self.on_scroll) def add_hooks(self): super(Listbox, self).add_hooks() if self.parent is not None: self.parent.add_handler(constants.CLICK, self.on_click, 90) self.parent.add_handler(constants.DOUBLECLICK, self.on_double_click, 200) self.parent.add_handler(constants.MOUSEWHEEL, self.on_mousewheel, 200) self.parent.add_key_handler(pygame.K_UP, self.got_key) self.parent.add_key_handler(pygame.K_DOWN, self.got_key) self.parent.add_key_handler(pygame.K_PAGEUP, self.got_key) self.parent.add_key_handler(pygame.K_PAGEDOWN, self.got_key) def remove_hooks(self): super(Listbox, self).remove_hooks() if self.parent is not None: self.parent.remove_handler(constants.CLICK, self.on_click) self.parent.remove_handler(constants.DOUBLECLICK, self.on_double_click) self.parent.remove_handler(constants.MOUSEWHEEL, self.on_mousewheel) self.parent.remove_key_handler(pygame.K_UP, self.got_key) self.parent.remove_key_handler(pygame.K_DOWN, self.got_key) self.parent.remove_key_handler(pygame.K_PAGEUP, self.got_key) self.parent.remove_key_handler(pygame.K_PAGEDOWN, self.got_key) def on_scroll(self, scroll_pos): self.needs_rebuild = True def on_click(self, event): if self.collision_rect.collidepoint(event.pos): self.has_focus = True self.took_focus(self) if (self.item_selectable): # Figure out which element was clicked... index = self.find_item_under_mouse(event) # ... and select it. self.list_pos = self.safe_pos(index + self.scrollbar.scroll_pos) def on_double_click(self, event): if self.on_double_click_on_item is None: return if self.collision_rect.collidepoint(event.pos) and self.item_selectable: index = self.find_item_under_mouse(event) if index > -1: self.on_double_click_on_item(event) def current_item(self): if 0 <= self.list_pos < len(self.list): return self.list[self.list_pos] return None def find_item_under_mouse(self, event): local_vert_abs = event.pos[1] - self.collision_rect[1] local_vert_pos = local_vert_abs / float(self.collision_rect.height) index = int(local_vert_pos * len(self.display_elements)) if 0 <= index < len(self.list): return index return -1 def safe_pos(self, raw_pos): return max(0, min(len(self.list) - 1, raw_pos)) def on_mousewheel(self, event): if event.y == 0: # Ignore vertical scrolls return # Note the direction is based on the direction that we used under # in pygame 1/SDL 1 (this avoids confusing users when they migrate # to pygame 2 with SDL 2) direction = -1 if event.y > 0 else 1 if event.flipped: direction *= -1 # Number of items moved by a scroll diff = self.scrollbar.window - 1 new_pos = self.list_pos + direction * diff self._scroll_to_and_raise_event_handled(new_pos) def got_key(self, event, require_focus=True): if not self.item_selectable: return if require_focus and not self.has_focus: return if event.key == pygame.K_UP: new_pos = self.list_pos - 1 elif event.key == pygame.K_DOWN: new_pos = self.list_pos + 1 elif event.key == pygame.K_PAGEUP: new_pos = self.list_pos - (self.scrollbar.window - 1) elif event.key == pygame.K_PAGEDOWN: new_pos = self.list_pos + (self.scrollbar.window - 1) else: return self._scroll_to_and_raise_event_handled(new_pos) def _scroll_to_and_raise_event_handled(self, new_pos): self.list_pos = self.safe_pos(new_pos) self.scrollbar.scroll_to(self.list_pos) raise constants.Handled def num_elements(self): # TODO: If needed, add a paramater to display a fixed number of element. rect = self._make_collision_rect() list_item_height = self.list_item_height # Calculate the min height of one element. if list_item_height > 0: min_height = list_item_height * g.real_screen_size[1] else: min_height = -list_item_height * rect.height # Display a number calculate by the size of one item. list_size = max(1, rect.height // min_height) return int(math.ceil(list_size)) def remake_elements(self): list_size = self.num_elements() current_size = len(self.display_elements) if current_size > list_size: # Remove the excess ones. for child in self.display_elements[list_size:]: child.parent = None del self.display_elements[list_size:] elif current_size < list_size: if current_size > 0: if (self.item_borders): self.display_elements[-1].borders = (constants.LEFT, constants.TOP) else: self.display_elements[-1].borders = (constants.LEFT,) # Create the new ones. self.display_elements.extend(self.make_element() for _ in xrange(list_size - current_size)) if (self.item_borders): self.display_elements[-1].borders = (constants.TOP, constants.LEFT, constants.BOTTOM) else: self.display_elements[0].borders = (constants.TOP, constants.LEFT) self.display_elements[-1].borders = (constants.LEFT, constants.BOTTOM) # Move the scrollbar to the end so that it gets drawn on top. self.children.remove(self.scrollbar) self.children.append(self.scrollbar) def make_element(self): borders = (constants.TOP, constants.LEFT) if self.item_borders else (constants.LEFT,) return text.SelectableText(self, None, None, anchor=constants.TOP_LEFT, borders=borders, shrink_factor=self.list_item_shrink, border_color=self.border_color, selected_color=self.selected_color, unselected_color=self.unselected_color, align=self.align) def resize(self): super(Listbox, self).resize() if self.num_elements() != len(self.display_elements): self.remake_elements() self.scrollbar.resize() # FIXME: resize should not call rebuild self.needs_resize = False self.rebuild() def rebuild(self): self.list_pos = self.safe_pos(self.list_pos) if self.needs_resize: self.resize() return window_size = len(self.display_elements) list_size = len(self.list) self.scrollbar.window = len(self.display_elements) self.scrollbar.elements = list_size self.scrollbar.rebuild() if self.auto_scroll: self.auto_scroll = False self.scrollbar.center(self.list_pos) scrollbar_width = self.scrollbar.real_size[0] my_width = self.real_size[0] scrollbar_rel_width = scrollbar_width / float(my_width) offset = self.scrollbar.scroll_pos for index, element in enumerate(self.display_elements): list_index = index + offset # Position and size the element. element.pos = (0, -index / float(window_size)) element.size = (-1 + scrollbar_rel_width, -1 / float(window_size)) if (self.item_selectable): element.selected = (list_index == self.list_pos) # Set up the element contents. self.update_element(element, list_index) self.needs_redraw = True super(Listbox, self).rebuild() def update_element(self, element, list_index): if 0 <= list_index < len(self.list): element.text = self.list[list_index] else: element.text = "" class UpdateListbox(Listbox): """Listbox with a function called on selection change""" def _on_selection_change(self): self.update_func(self.list_pos) _list_pos = widget.call_on_change("__list_pos", _on_selection_change) _list = widget.call_on_change("__list", _on_selection_change) def __init__(self, *args, **kwargs): self.update_func = kwargs.pop("update_func", lambda value: None) super(UpdateListbox, self).__init__(*args, **kwargs) class CustomListbox(UpdateListbox): remake_func = widget.causes_rebuild("_remake_func") rebuild_func = widget.causes_rebuild("_rebuild_func") def __init__(self, parent, *args, **kwargs): self.parent = parent self.key_list = kwargs.pop("key_list", None) self.remake_func = kwargs.pop("remake_func", lambda value: None) self.rebuild_func = kwargs.pop("rebuild_func", lambda *args: None) super(CustomListbox, self).__init__(parent, *args, **kwargs) def make_element(self): base = super(CustomListbox, self).make_element() self.remake_func(base) return base def update_element(self, element, list_index): if 0 <= list_index < len(self.list): if (self.key_list is not None): self.rebuild_func(element, self.list[list_index], self.key_list[list_index]) else: self.rebuild_func(element, self.list[list_index]) else: if (self.key_list is not None): self.rebuild_func(element, None, None) else: self.rebuild_func(element, None) singularity-1.00/singularity/code/graphics/scrollbar.py000066400000000000000000000136271367731414700234530ustar00rootroot00000000000000#file: scrollbar.py #Copyright (C) 2008 FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the scrollbar widget. from __future__ import absolute_import import pygame from singularity.code.graphics import g, constants, widget, button, slider class _ArrowButton(button.FunctionButton, button.ImageButton): def __init__(self, parent, *args, **kwargs): self.first = kwargs.pop("first", True) self.horizontal = kwargs.pop("horizontal", False) kwargs.setdefault("border_color", "scrollbar_border") kwargs.setdefault("selected_color", "scrollbar_arrow_background_selected") kwargs.setdefault("unselected_color", "scrollbar_arrow_background_unselected") kwargs["function"] = parent.adjust kwargs["args"] = (self.first,) super(_ArrowButton, self).__init__(parent, *args, **kwargs) def reconfig(self): super(_ArrowButton, self).reconfig() base_image = g.images['arrow'] if self.first and self.horizontal: angle = 90 self.borders = (constants.LEFT, constants.TOP, constants.BOTTOM) elif self.first: angle = 0 self.borders = (constants.LEFT, constants.TOP, constants.RIGHT) elif self.horizontal: angle = -90 self.borders = (constants.TOP, constants.RIGHT, constants.BOTTOM) else: angle = -180 self.borders = (constants.RIGHT, constants.BOTTOM, constants.LEFT) rotated_image = pygame.transform.rotate(base_image, angle) self.image.image = rotated_image.convert_alpha() class Scrollbar(widget.Widget): scroll_pos = widget.causes_rebuild("_scroll_pos") elements = widget.causes_rebuild("_elements") window = widget.causes_rebuild("_window") horizontal = widget.causes_rebuild("_horizontal") def __init__(self, parent, pos = (-1,0), size = (.025, -1), anchor = constants.TOP_RIGHT, scroll_pos = 0, elements = 15, window = 5, horizontal = False): super(Scrollbar, self).__init__(parent, pos, size, anchor) self.scroll_pos = scroll_pos self.elements = elements self.window = window self.horizontal = horizontal self.slider = slider.UpdateSlider(self, (-.5,-.5), None, border_color = "scrollbar_border", background_color = "scrollbar_background", slider_color = "scrollbar_background_slider", anchor = constants.MID_CENTER, horizontal = horizontal, update_func = self.on_change) self.button1 = _ArrowButton(self, (0,0), None, anchor = constants.TOP_LEFT, first = True, horizontal = horizontal, priority = 90) self.button2 = _ArrowButton(self, (-1,-1), None, anchor = constants.BOTTOM_RIGHT, first = False, horizontal = horizontal, priority = 90) def resize(self): super(Scrollbar, self).resize() if self.horizontal: long_side = self.real_size[0] short_side = self.real_size[1] size = short_side / float(long_side) self.button1.size = (-size, -1) self.button2.size = (-size, -1) self.slider.size = ((size * 2) - 1, -1) else: long_side = self.real_size[1] short_side = self.real_size[0] size = short_side / float(long_side) self.button1.size = (-1, -size) self.button2.size = (-1, -size) self.slider.size = (-1, (size * 2) - 1) def rebuild(self): self.slider.slider_max = slider.calc_max(self.elements, self.window) self.scroll_pos = min(self.scroll_pos, self.slider.slider_max) self.slider.slider_pos = self.scroll_pos self.slider.slider_size = self.window self.needs_redraw = True super(Scrollbar, self).rebuild() def adjust(self, lower): if lower: self.slider.slider_pos = self.slider.safe_pos(self.scroll_pos - 1) else: self.slider.slider_pos = self.slider.safe_pos(self.scroll_pos + 1) def center(self, element): self.slider.slider_pos = self.slider.safe_pos(element - self.window//2) def scroll_to(self, element): if element < self.scroll_pos: self.slider.slider_pos = self.slider.safe_pos(element) elif element >= self.scroll_pos + self.window: self.slider.slider_pos = self.slider.safe_pos(element - self.window + 1) def on_change(self, value): self.scroll_pos = value class UpdateScrollbar(Scrollbar): def __init__(self, *args, **kwargs): self.update_func = kwargs.pop("update_func", lambda value: None) super(UpdateScrollbar, self).__init__(*args, **kwargs) def on_change(self, value): self.scroll_pos = value self.update_func(value) singularity-1.00/singularity/code/graphics/slider.py000066400000000000000000000172721367731414700227520ustar00rootroot00000000000000#file: slider.py #Copyright (C) 2008 FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the slider widget. from __future__ import absolute_import import pygame from singularity.code.graphics import g, constants, widget, button def calc_max(elements, size): return max(elements - size, 0) class Slider(button.Button): slider_pos = widget.causes_rebuild("_slider_pos") slider_max = widget.causes_rebuild("_slider_max") slider_size = widget.causes_rebuild("_slider_size") horizontal = widget.causes_rebuild("_horizontal") slider_color = widget.auto_reconfig("_slider_color", "resolved", g.resolve_color_alias) resolved_slider_color = widget.causes_redraw("_resolved_slider_color") def __init__(self, parent, pos = (-1,0), size = (-.1, -1), anchor = constants.TOP_RIGHT, borders = constants.ALL, border_color=None, background_color=None, slider_color=None, slider_pos=0, slider_max=10, slider_size=5, horizontal=False, **kwargs): kwargs.setdefault("priority", 80) super(Slider, self).__init__(parent, pos, size, anchor=anchor, **kwargs) border_color = border_color or "slider_border" background_color = background_color or "slider_background" slider_color = slider_color or "slider_background_slider" self.borders = borders self.border_color = border_color self.background_color = background_color self.selected_color = background_color self.unselected_color = background_color self.slider_color = slider_color self.slider_pos = slider_pos self.slider_max = slider_max self.slider_size = slider_size self.horizontal = horizontal self.drag_state = None self.button = button.Button(self, pos = None, size = None, anchor = constants.TOP_LEFT, border_color = border_color, selected_color = slider_color, unselected_color = slider_color, priority = self.priority - 5) def redraw(self): super(Slider, self).redraw() self.button.selected_color = self.slider_color self.button.unselected_color = self.slider_color def add_hooks(self): super(Slider, self).add_hooks() self.parent.add_handler(constants.DRAG, self.handle_drag) self.parent.add_handler(constants.CLICK, self.handle_click, 50) def remove_hooks(self): super(Slider, self).remove_hooks() self.parent.remove_handler(constants.DRAG, self.handle_drag) self.parent.remove_handler(constants.CLICK, self.handle_click) def _calc_length(self, items): return items / float(self.slider_size + self.slider_max) def rebuild(self): super(Slider, self).rebuild() self.needs_resize = True def resize(self): super(Slider, self).resize() bar_start = self._calc_length(self.slider_pos) bar_length = self._calc_length(self.slider_size) if self.horizontal: self.button.pos = (-bar_start, 0) self.button.size = (-bar_length, -1) borders = [constants.TOP, constants.BOTTOM] self.button.resize() real_pos = self.button.real_pos[0] real_size = self.button.real_size[0] if real_pos == 0: borders.append(constants.LEFT) if real_pos + real_size == self.real_size[0]: borders.append(constants.RIGHT) self.button.borders = tuple(borders) else: self.button.pos = (0, -bar_start) self.button.size = (-1, -bar_length) borders = [constants.LEFT, constants.RIGHT] self.button.resize() real_pos = self.button.real_pos[1] real_size = self.button.real_size[1] if real_pos == 0: borders.append(constants.TOP) if real_pos + real_size == self.real_size[1]: borders.append(constants.BOTTOM) self.button.borders = tuple(borders) def handle_drag(self, event): if not self.visible: return if self.drag_state == None: self.start_pos = tuple(event.pos[i]-event.rel[i] for i in range(2)) self.start_slider_pos = self.slider_pos if self.button.is_over(self.start_pos): self.drag_state = True else: self.drag_state = False if self.drag_state == True: if self.horizontal: dir = 0 else: dir = 1 mouse_pos = pygame.mouse.get_pos() rel = mouse_pos[dir] - self.start_pos[dir] unit = self._calc_length(1) * self.real_size[dir] movement = int( ( rel + (unit / 2.) ) // unit ) new_pos = self.safe_pos(self.start_slider_pos + movement) self.slider_pos = new_pos raise constants.Handled def safe_pos(self, value): return max(0, min(self.slider_max, value)) def handle_click(self, event): if self.drag_state == True: self.drag_state = None if not self.is_over(pygame.mouse.get_pos()): raise constants.Handled else: self.drag_state = None def jump(self, go_lower, big_jump=False, tiny_jump=False): if big_jump: jump_dist = max(1, self.slider_max // 2) elif tiny_jump: jump_dist = max(1, self.slider_max // 100) else: jump_dist = max(1, self.slider_size - 1) if go_lower: self.slider_pos = self.safe_pos(self.slider_pos - jump_dist) else: self.slider_pos = self.safe_pos(self.slider_pos + jump_dist) def handle_key(self, event): if event.key not in (pygame.K_LEFT, pygame.K_RIGHT, pygame.K_KP_PLUS, pygame.K_KP_MINUS): return go_lower = event.key in (pygame.K_LEFT, pygame.K_KP_MINUS) if event.key in (pygame.K_LEFT, pygame.K_RIGHT): big_jump = (event.mod & pygame.KMOD_SHIFT) tiny_jump = (event.mod & pygame.KMOD_CTRL) else: tiny_jump = big_jump = False self.jump(go_lower, big_jump=big_jump, tiny_jump=tiny_jump) raise constants.Handled def activated(self, event): assert event.type == pygame.MOUSEBUTTONUP if self.horizontal: self.jump(go_lower=(event.pos[0] < self.button.collision_rect[0])) else: self.jump(go_lower = event.pos[1] < self.button.collision_rect[1]) raise constants.Handled class UpdateSlider(Slider): def _on_slider_move(self): self.update_func(self.slider_pos) _slider_pos = widget.call_on_change("__slider_pos", _on_slider_move) def __init__(self, *args, **kwargs): self.update_func = kwargs.pop("update_func", lambda value: None) super(UpdateSlider, self).__init__(*args, **kwargs) singularity-1.00/singularity/code/graphics/text.py000066400000000000000000000772751367731414700224650ustar00rootroot00000000000000#file: text.py #Copyright (C) 2008 FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the (non-editable) text widget AKA label. from __future__ import absolute_import import pygame from singularity.code import i18n from singularity.code.pycompat import * from singularity.code.graphics import g, widget, constants DEBUG = False def do_bisect(left, right, test): # Run a binary search for the largest acceptable value. # Thanks to bisect.bisect_left for the basic implementation. # Return is in range [left, right-1], inclusive while left + 1 < right: test_index = (left + right) // 2 if test(test_index): left = test_index else: right = test_index return left def convert_font_size(size): # Scale it to the screen size. raw_size = size * g.real_screen_size[1] // g.default_screen_size[1] # And round. return int(raw_size + 0.5) def get_widths(font, text): if hasattr(font, "metrics"): return [m[4] for m in font.metrics(text)] else: return [font.size(c)[0] for c in text] def strip_to_null(a_string): if not a_string: return a_string if a_string[0] == " ": a_string = u"\uFEFF" + a_string[1:] if a_string[-1] == " ": a_string = a_string[:-1] + u"\uFEFF" return a_string class WrapError(Exception): pass # Splits a string into lines based on newline and word wrapping. def split_wrap(text, font, wrap_at, break_words=True): raw_lines = text.split("\n") lines = [] for raw_line in raw_lines: if font.size(raw_line)[0] <= wrap_at or wrap_at == 0: lines.append(raw_line + u"\uFEFF") else: words = raw_line.split(" ") pos = 0 line = "" for word in words: word += " " word_size = font.size(word)[0] if pos + word_size <= wrap_at: line += word pos += word_size elif word_size < wrap_at: lines.append(strip_to_null(line)) line = word pos = word_size else: if not break_words: message = "'%s' is too wide and can't be broken" raise WrapError(message % word) widths = get_widths(font, word) for index, char in enumerate(word): width = widths[index] if pos + width <= wrap_at: line += char pos += width else: lines.append(strip_to_null(line)) line = char pos = width if line and line != " ": lines.append(strip_to_null(line)) return lines def size_of_block(text, font, width=0): # Apply newlines and word wrap. lines = split_wrap(text, font, width) # Calculate height and width of the text. total_height = 0 max_width = 0 for line in lines: line_width, line_height = font.size(line) max_width = max(max_width, line_width) total_height += line_height return (max_width, total_height) def _do_print(surface, text, xy, font, color): if font.size(text)[0] == 0: return rendered_text = font.render(text, True, color) surface.blit(rendered_text, xy) def print_string(surface, string_to_print, xy_orig, font, styles, align, valign, dimensions, wrap): xy = list(xy_orig) width = dimensions[0] - 4 height = dimensions[1] - 4 if wrap: lines = split_wrap(string_to_print, font, width) else: lines = split_wrap(string_to_print, font, 0) if valign != constants.TOP: vsize = len(lines) * font.get_linesize() if vsize <= height: excess_space = height - vsize if valign == constants.MID: xy[1] += excess_space // 2 else: # valign == constants.BOTTOM xy[1] += excess_space color, bgcolor, underline, switch_char = styles.pop(0) offset = 0 for line in lines: xy[0] = xy_orig[0] if align != constants.LEFT: hsize = font.size(line)[0] excess_space = width - hsize if align == constants.CENTER: xy[0] += excess_space // 2 else: # align == constants.RIGHT xy[0] += excess_space chunks = [line] my_styles = [(color, bgcolor, underline)] while switch_char != 0 and switch_char < offset + len(chunks[-1]): real_switch = switch_char - offset offset += real_switch piece = chunks.pop() chunks.extend([piece[:real_switch], piece[real_switch:]]) color, bgcolor, underline, switch_char = styles.pop(0) my_styles.append((color, bgcolor, underline)) offset += len(chunks[-1]) print_line(surface, xy, font, chunks, my_styles) xy[1] += font.get_linesize() def print_line(surface, xy, font, chunks, styles): for chunk, (color, bgcolor, underline) in zip(chunks, styles): size = font.size(chunk) # Fill the background, if any. if bgcolor is not None: surface.fill(bgcolor, xy+size) # Print the text. font.set_underline(underline) _do_print(surface, chunk, xy, font, color) font.set_underline(False) # Adjust the starting position. xy[0] += size[0] def resize_redraw(self): self.needs_resize = True self.needs_redraw = True class Text(widget.BorderedWidget): def _on_enabled_change(self): resize_redraw(self) if self.on_enable_change_func: self.on_enable_change_func() shrink_factor = widget.call_on_change("_shrink_factor", resize_redraw) underline = widget.call_on_change("_underline", resize_redraw) wrap = widget.call_on_change("_wrap", resize_redraw) bold = widget.call_on_change("_bold", resize_redraw) _text = widget.call_on_change("__text", resize_redraw) enabled = widget.call_on_change("_enabled", _on_enabled_change) align = widget.causes_redraw("_align") valign = widget.causes_redraw("_valign") color = widget.auto_reconfig("_color", "resolved", g.resolve_color_alias) resolved_color = widget.causes_redraw("_resolved_color") color_disabled = widget.auto_reconfig("_color_disabled", "resolved", g.resolve_color_alias) resolved_color_disabled = widget.causes_redraw("_resolved_color_disabled") base_font = widget.auto_reconfig("_base_font", "resolved", g.resolve_font_alias) resolved_base_font = widget.call_on_change("_resolved_base_font", resize_redraw) text_size = widget.auto_reconfig("_text_size", "resolved", g.resolve_text_size) resolved_text_size = widget.causes_redraw("_resolved_text_size") def __init__(self, parent, pos, size=(0, .05), anchor=constants.TOP_LEFT, text=None, base_font=None, shrink_factor=0.875, color=None, align=constants.CENTER, valign=constants.MID, color_disabled=None, on_enable_change=None, autotranslate=False, underline=-1, wrap=True, bold=False, text_size="default", **kwargs): kwargs.setdefault("background_color", "text_background") kwargs.setdefault("border_color", "text_border") enabled = kwargs.pop('enabled', True) super(Text, self).__init__(parent, pos, size, anchor, **kwargs) self._autotranslate = autotranslate if self._autotranslate: assert text, "Automatic translatable widgets must get a default text" self._last_language = "!" # Invalid to force an update self._untranslated_text = text self._check_translation() else: self._last_language = None self._untranslated_text = None self.text = text self.base_font = base_font or "normal" self.color = color or "text" self.color_disabled = color_disabled or "text_disabled" self.shrink_factor = shrink_factor self.underline = underline self.align = align self.valign = valign self.wrap = wrap self.bold = bold self.text_size = text_size self.on_enable_change_func = on_enable_change self.enabled = enabled max_size = property(lambda self: min(len(self.resolved_base_font)-1, convert_font_size(self._resolved_text_size))) font = property(lambda self: self._font) @property def autotranslate(self): return self._autotranslate @property def text(self): return self._text @text.setter def text(self, value): if self._autotranslate: raise ValueError("Cannot change text for an automatic translatable text widget") self._text = value def _retranslate(self): self._text = _(self._untranslated_text) def _check_translation(self): if self._last_language != i18n.language: self._last_language = i18n.language self._retranslate() def pick_font(self, dimensions): nice_size = self.pick_font_size(dimensions, False) mean_size = self.pick_font_size(dimensions) size = max(nice_size, mean_size - convert_font_size(5)) return self.resolved_base_font[size] def font_bisect(self, test_font): left = 0 right = (self.max_size or len(self.resolved_base_font)-1) + 1 def test_size(size): font = self.resolved_base_font[size] font.set_bold(self.bold) result = test_font(font) font.set_bold(False) return result return do_bisect(left, right, test_size) def pick_font_size(self, dimensions, break_words=True): if dimensions[0]: width = int(dimensions[0] * self.shrink_factor) else: width = None height = int(dimensions[1] * self.shrink_factor) basic_line_count = self.text.count("\n") + 1 def test_size(test_font): too_wide = False if width: if self.wrap: try: lines = split_wrap(self.text, test_font, width, break_words) except WrapError: lines = [] too_wide = True else: lines = split_wrap(self.text, test_font, 0) for line in lines: if test_font.size(line)[0] > width: too_wide = True break line_count = len(lines) else: line_count = basic_line_count too_tall = (test_font.get_linesize() * line_count) > height return not (too_tall or too_wide) return self.font_bisect(test_size) def size_using_font(self, font, width=0): #Calculate the size of the text block. raw_width, raw_height = size_of_block(self.text, font, width) #Adjust for shrink_factor and borders. width = int(raw_width / self.shrink_factor) + 4 height = int(raw_height / self.shrink_factor) + 4 return width, height def calc_text_size(self, initial_dimensions): if not (initial_dimensions[0] and initial_dimensions[1]): if not self.max_size: raise ValueError("No font size given, but a dimension is 0.") max_font = self.resolved_base_font[self.max_size] if initial_dimensions[0] == initial_dimensions[1] == 0: # No size specified, use the natural size of the max font. width, height = self.size_using_font(max_font) return (width, height), max_font elif not initial_dimensions[1]: # Width specified, use the size of the max font, word-wrapped. text_width = int((initial_dimensions[0] - 4) * self.shrink_factor) width, height = self.size_using_font(max_font, width=text_width) return (initial_dimensions[0], height), max_font else: # Height specified. Try the natural size of the max font. width, height = self.size_using_font(max_font) if height <= initial_dimensions[1]: return (width, initial_dimensions[1]), max_font else: # Too tall. Run a binary search to find the largest font # size that fits. def test_size(font): width, raw_height = size_of_block(self.text, font) height = int(raw_height / self.shrink_factor) + 4 return height <= initial_dimensions[1] font_size = self.font_bisect(test_size) font = self.resolved_base_font[font_size] width, height = self.size_using_font(font) return (width, initial_dimensions[1]), font else: # Both sizes specified. Search for a usable font size. return initial_dimensions, self.pick_font(initial_dimensions) def _calc_size(self): base_size = list(super(Text, self)._calc_size()) if self.text is None: return tuple(base_size) else: # Determine the true size and font of the text area. text_size, font = self.calc_text_size(base_size) self._font = font return tuple(text_size) def redraw(self): super(Text, self).redraw() if self.text is not None: self.print_text() def reconfig(self): super(Text, self).reconfig() if self._autotranslate: self._check_translation() @property def text_color(self): return self.resolved_color if self.enabled else self.resolved_color_disabled def print_text(self): # Mark the character to be underlined (if any). no_underline = [self.text_color, None, False] underline = [self.text_color, None, True] styles = [no_underline + [0]] if 0 <= self.underline < len(self.text): styles.insert(0, underline + [self.underline + 1]) if self.underline != 0: styles.insert(0, no_underline + [self.underline]) self.font.set_bold(self.bold) # Print the string itself. print_string(self.surface, self.text, (3, 2), self.font, styles, self.align, self.valign, self.real_size, self.wrap) self.font.set_bold(False) def text_changed(self): if self.text is None: new_len = 0 else: new_len = len(self.text) if new_len != self.old_len: self.old_len = new_len self.needs_resize = True self.needs_redraw = True class FastText(Text): """ Reduces font searches by assuming a monospace font and single-line text. """ _text = widget.call_on_change("__text", text_changed) old_len = 0 maybe_needs_refont = False class EditableText(widget.FocusWidget, Text): cursor_pos = widget.causes_redraw("_cursor_pos") def __init__(self, parent, *args, **kwargs): self.allows_new_line = kwargs.pop("allows_new_line", False) self.allowed_characters = kwargs.pop("allowed_characters", None) super(EditableText, self).__init__(parent, *args, **kwargs) if self.text is None: self.text = "" self.cursor_pos = len(self.text) def add_hooks(self): super(EditableText, self).add_hooks() self.parent.add_handler(constants.KEYDOWN, self.handle_key, 10) self.parent.add_handler(constants.CLICK, self.handle_click) def remove_hooks(self): super(EditableText, self).remove_hooks() self.parent.remove_handler(constants.KEYDOWN, self.handle_key) self.parent.remove_handler(constants.CLICK, self.handle_click) def handle_key(self, event, require_focus=True): if require_focus and not self.has_focus: return assert event.type == pygame.KEYDOWN if event.key == pygame.K_BACKSPACE: if self.cursor_pos > 0: self.text = self.text[:self.cursor_pos - 1] \ + self.text[self.cursor_pos:] self.cursor_pos -= 1 elif event.key == pygame.K_DELETE: if self.cursor_pos < len(self.text): self.text = self.text[:self.cursor_pos] \ + self.text[self.cursor_pos + 1:] elif event.key == pygame.K_LEFT: self.cursor_pos = max(0, self.cursor_pos - 1) elif event.key == pygame.K_RIGHT: self.cursor_pos = min(len(self.text), self.cursor_pos + 1) elif event.key in (pygame.K_UP, pygame.K_HOME): self.cursor_pos = 0 elif event.key in (pygame.K_DOWN, pygame.K_END): self.cursor_pos = len(self.text) elif event.key == pygame.K_ESCAPE: return elif event.unicode: char = event.unicode if char in (u"\r\n", u"\n", u"\r", u"\v", u"\f", u"\x1e", u"\x1c", u"\x1d", u"\x85", u"\u2028", u"\u2029"): if not self.allows_new_line: return char = "\n" if self.allowed_characters is not None and char not in self.allowed_characters: return self.text = self.text[:self.cursor_pos] + char \ + self.text[self.cursor_pos:] self.cursor_pos += len(char) else: return raise constants.Handled hitbox = [0,0,0,0] def handle_click(self, event): if getattr(self, "collision_rect", None) is None: return elif not self.collision_rect.collidepoint(event.pos): return self.has_focus = True self.took_focus(self) self.font.set_bold(self.bold) click_x = event.pos[0] - self.collision_rect[0] click_y = event.pos[1] - self.collision_rect[1] if self.wrap: lines = split_wrap(self.text, self.font, self.real_size[0] - 4) else: lines = split_wrap(self.text, self.font, 0) line_size = self.font.get_linesize() self.hitbox[3] = line_size real_text_height = line_size * len(lines) line_y = 2 if self.valign != constants.TOP \ and real_text_height <= self.collision_rect.height - 4: excess_space = self.collision_rect.height - real_text_height if self.valign == constants.MID: line_y = excess_space // 2 else: # self.valign == constants.BOTTOM line_y = excess_space char_offset = 0 for line in lines: line_y += line_size char_offset += len(line) if line_y >= click_y: break char_offset -= len(line) self.hitbox[1] = line_y - line_size line_x = 3 if self.align != constants.LEFT: line_width = self.font.size(line)[0] excess_space = self.collision_rect.width - line_width if self.align == constants.CENTER: line_x = excess_space // 2 else: # self.align == constants.LEFT line_x = excess_space prev_width = 20000 widths = get_widths(self.font, line) for index, width in enumerate(widths): if line_x + (width // 2) < click_x: line_x += width prev_width = width else: break else: index += 1 width = 20000 self.hitbox[0] = line_x - prev_width // 2 self.hitbox[2] = prev_width - (prev_width // 2) + width // 2 self.cursor_pos = char_offset + index self.font.set_bold(False) def redraw(self): super(EditableText, self).redraw() if self.wrap: lines = split_wrap(self.text, self.font, self.real_size[0] - 4) else: lines = split_wrap(self.text, self.font, 0) if not self.has_focus: return line_size = self.font.get_linesize() real_text_height = line_size * len(lines) line_y = 2 if self.valign != constants.TOP \ and real_text_height <= self.real_size[1] - 4: excess_space = self.real_size[1] - real_text_height if self.valign == constants.MID: line_y = excess_space // 2 else: # self.valign == constants.BOTTOM line_y = excess_space char_offset = 0 for line in lines: if char_offset + len(line) < self.cursor_pos: char_offset += len(line) line_y += line_size else: break after_char = self.cursor_pos - char_offset line_x = 3 if self.align != constants.LEFT: line_width = self.font.size(line)[0] excess_space = self.real_size[0] - line_width if self.align == constants.CENTER: line_x = excess_space // 2 else: # self.align == constants.LEFT line_x = excess_space line_x += self.font.size(line[:after_char])[0] self.surface.fill( self.resolved_color, (line_x, line_y, 1, line_size)) if DEBUG: s = pygame.Surface(self.hitbox[2:]).convert_alpha() s.fill( (255,0,255,100) ) self.surface.blit( s, self.hitbox) class UpdateEditableText(EditableText): def _on_text_change(self): self.update_func(self.text) _text = widget.call_on_change("__text", _on_text_change) def __init__(self, *args, **kwargs): self.update_func = kwargs.pop("update_func", lambda value: None) super(UpdateEditableText, self).__init__(*args, **kwargs) class SelectableText(Text): selected = widget.causes_redraw("_selected") selected_color = widget.auto_reconfig("_selected_color", "resolved", g.resolve_color_alias) resolved_selected_color = widget.causes_redraw("_resolved_selected_color") unselected_color = widget.auto_reconfig("_unselected_color", "resolved", g.resolve_color_alias) resolved_unselected_color = widget.causes_redraw("_resolved_unselected_color") def __init__(self, parent, pos, size, border_color = None, unselected_color = None, selected_color = None, **kwargs): super(SelectableText, self).__init__(parent, pos, size, **kwargs) self.border_color = border_color or "text_border" self.selected_color = selected_color or "text_background_selected" self.unselected_color = unselected_color or "text_background_unselected" self.selected = False def redraw(self): if self.selected: self.background_color = self.selected_color else: self.background_color = self.unselected_color super(SelectableText, self).redraw() class ProgressText(SelectableText): progress = widget.causes_redraw("_progress") progress_color = widget.auto_reconfig("_progress_color", "resolved", g.resolve_color_alias) resolved_progress_color = widget.causes_redraw("_resolved_progress_color") def __init__(self, parent, pos, size, *args, **kwargs): self.parent = parent self.progress = kwargs.pop("progress", 0) self.progress_color = kwargs.pop("progress", "progress_background_progress") kwargs.setdefault("border_color", "progress_border") kwargs.setdefault("selected_color", "progress_background_selected") kwargs.setdefault("unselected_color", "progress_background_unselected") super(ProgressText, self).__init__(parent, pos, size, **kwargs) def redraw(self): super(ProgressText, self).redraw() width, height = self.real_size self.surface.fill(self.resolved_progress_color, (0, 0, width * self.progress, height)) self.draw_borders() class ChunkedText(Text): def update_text(self): self.text = "".join(self.chunks) chunks = widget.call_on_change("__chunks", update_text) def __init__(self, *args, **kwargs): chunks = kwargs.pop("chunks", ()) super(ChunkedText, self).__init__(*args, **kwargs) self.chunks = chunks class StyledText(ChunkedText): def resolve_styles(value): return tuple((g.resolve_color_alias(c), bg, u) for c, bg, u in value) styles = widget.auto_reconfig("_styles", "resolved", resolve_styles) resolved_styles = widget.causes_redraw("_resolved_styles") def __init__(self, *args, **kwargs): styles = kwargs.pop("styles", ()) super(StyledText, self).__init__(*args, **kwargs) self.styles = styles def print_text(self): if self.styles: offset = 0 styles = [] for chunk, style in zip(self.chunks, self.resolved_styles): offset += len(chunk) styles.append(list(style) + [offset]) styles[-1][-1] = 0 print_string(self.surface, self.text, (3, 2), self.font, styles, self.align, self.valign, self.real_size, self.wrap) else: super(StyledText, self).print_text() class FastStyledText(FastText, StyledText): pass def _make_prototype_handler(parent): def print_on_click(event): if event.button != 2 and not (event.button == 1 and (pygame.key.get_mods() & pygame.KMOD_ALT)): return prefixes = ["|-", "| "] kids = [(child, 0) for child in parent.children] while kids: kid, depth = kids.pop() further_kids = [(child, depth+1) for child in kid.children] kids += further_kids prefix = "" if depth: prefix = prefixes[1] * (depth - 1) + prefixes[0] print(prefix + str(kid)) return print_on_click class ProtoWidget(EditableText): """Prototyping widget, for creating quick mockups. Usage: Type to name. Drag to move. Shift+Drag to resize. Control+Drag to duplicate. (children will not duplicate) Shift+Control+Drag to create a child. Right-click to delete. Middle-click or Alt+Click to write out location and size of each widget. """ drag_state = -1 def __init__(self, *args, **kwargs): kwargs.setdefault("color", (0,0,0)) kwargs.setdefault("border_color", (0,0,0)) kwargs.setdefault("borders", constants.ALL) kwargs.setdefault("background_color", (255,255,255)) super(ProtoWidget, self).__init__(*args, **kwargs) def add_hooks(self): super(ProtoWidget, self).add_hooks() self.parent.add_handler(constants.DRAG, self.handle_drag) self.parent.add_handler(constants.CLICK, self.handle_click) if not isinstance(self.parent, ProtoWidget) \ and not getattr(self.parent, "demo_mode", False): self.parent.demo_mode = True self.parent.add_handler(constants.CLICK, _make_prototype_handler(self.parent)) def remove_hooks(self): self.parent.remove_handler(constants.DRAG, self.handle_drag) self.parent.remove_handler(constants.CLICK, self.handle_click) super(ProtoWidget, self).remove_hooks() def handle_drag(self, event): if self.drag_state == -1: start_pos = tuple(event.pos[i]-event.rel[i] for i in range(2)) if self.is_over(start_pos): for child in self.children: if child.is_over(start_pos): self.drag_state = 0 return real_pos = self.collision_rect[:2] self.mouse_rel = tuple(real_pos[i]-start_pos[i] for i in range(2)) mod_keys = pygame.key.get_mods() shift = mod_keys & pygame.KMOD_SHIFT control = mod_keys & pygame.KMOD_CTRL if shift and control: self.drag_state = 0 new_size = tuple(d/2 for d in self.size) pw=ProtoWidget(self, (0,0), new_size, self.anchor, background_color = self.background_color, border_color = self.border_color, borders = self.borders) pw.drag_state = 0 elif shift: self.drag_state = 2 elif control: self.drag_state = 0 pw=ProtoWidget(self.parent, self.pos, self.size, self.anchor, background_color = self.background_color, border_color = self.border_color, borders = self.borders) pw.drag_state = 1 pw.mouse_rel = self.mouse_rel else: self.drag_state = 1 else: self.drag_state = 0 if self.drag_state <= 0: return if self.parent: parent_rect = self.parent.collision_rect else: parent_rect = pygame.Rect((0,0) + g.real_screen_size) if self.drag_state == 1: mouse_pos = pygame.mouse.get_pos() new_real_pos = tuple(self.mouse_rel[i] + mouse_pos[i] for i in range(2)) new_rel_pos = tuple(new_real_pos[i] - parent_rect[i] for i in range(2)) new_unit_pos = tuple( max(0,(new_rel_pos[i] / float(g.real_screen_size[i]))) for i in range(2)) new_pct_pos = tuple( int( (new_unit_pos[i] * 100) + 0.5) for i in range(2)) self.pos = tuple(new_pct_pos[i] / 100. for i in range(2)) raise constants.Handled elif self.drag_state == 2: mouse_pos = pygame.mouse.get_pos() new_size = tuple(mouse_pos[i] - self.collision_rect[i] for i in range(2)) unit_size = tuple(max(0,new_size[i] / float(g.real_screen_size[i])) for i in range(2)) pct_size = tuple( int( (unit_size[i] * 100) + 0.5) for i in range(2)) self.size = tuple(pct_size[i] / 100. for i in range(2)) raise constants.Handled def handle_click(self, event): if event.button == 3 and self.is_over(event.pos): mine = True for child in self.children: if child.is_over(event.pos): mine = False break if mine: self.remove_hooks() self.parent.needs_redraw = True if self.drag_state > 0: self.drag_state = -1 #raise constants.Handled else: self.drag_state = -1 def __str__(self): return "%s pos: (%.2f, %.2f), size: (%.2f, %.2f)" % \ ((self.text,) + self.pos + self.size) singularity-1.00/singularity/code/graphics/theme.py000066400000000000000000000162121367731414700225630ustar00rootroot00000000000000#file: theme.py #Copyright (C) 2005,2006,2008 Evil Mr Henry, Phil Bordelon, and FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the theme class. from __future__ import absolute_import import os, sys, collections, numbers, itertools from singularity.code.graphics import g, dialog from singularity.code.pycompat import * default_theme = 'default' current = None themes = collections.OrderedDict() def get_theme_list(): return [themes[k].name for k in themes] def get_theme_pos(): return next(i[0] for i in enumerate(themes) if i[1] == current.id) def set_theme(key, force_reload=False): global current theme = None if isinstance(key, numbers.Number): try: theme = next(itertools.islice(themes.values(), key, key + 1)) except StopIteration: pass elif isinstance(key, basestring): try: theme = themes[key] except KeyError: pass elif key is None: theme = themes[default_theme] if theme is None: sys.stderr.write("WARNING: The key '%s' does not exist in theme dictionary. Use default theme.\n" % key) theme = themes[default_theme] if force_reload or (not current == None and theme.id != current.id): theme.update() current = theme def current_variants(): variants = [None] # Add language variants import singularity.code.i18n lang_list = singularity.code.i18n.language_searchlist() for lang in lang_list: variants.insert(0, lang) return variants class Theme(object): def __init__(self, id, dir): super(Theme, self).__init__() self.id = id self.dir = dir self._parents = [default_theme] if id != default_theme else [] self._variants = {} def search_variant(self): file_list = os.listdir(self.dir) # First with None variant. yield((None, os.path.join(self.dir, "theme.dat"))) for filename in file_list: (name, ext) = os.path.splitext(filename) # We only want theme_*.dat. if name.startswith("theme_") and len(name) > 6 and ext in ['.dat']: variant = name[6:] yield((variant, os.path.join(self.dir, filename))) def iter_variants(self): """ Iterate through variants.""" for variant in self._variants: yield(self._variants[variant]) def set_variant(self, variant_theme): self._variants[variant_theme.variant] = variant_theme def find_files(self): """find all files in current theme: images in /images fonts in /fonts """ base_variant = self._variants[None] image_dir = os.path.join(self.dir, 'images') image_list = os.listdir(image_dir) for image_filename in image_list: # We only want JPGs and PNGs. if os.path.splitext(image_filename)[1].lower() in ['.png', '.jpg']: filetitle = os.path.splitext(image_filename)[0] base_variant.image_infos[filetitle] = os.path.join(image_dir, image_filename) # Add fonts dir font_dir = os.path.join(self.dir, "fonts") for variant_theme in self.iter_variants(): for font in variant_theme.font_infos: variant_theme.font_infos[font] = os.path.join(font_dir, variant_theme.font_infos[font]) def inherit(self, *args): for arg in args: if (type(arg) == list): self._parents.extend(arg) else: self._parents.append(arg) # Remove duplicate parent. list(dict.fromkeys(self._parents)) # TODO: Detect cycling inheritance. @property def parents(self): return self._parents def iter_parents(self): """ Iterate through parents and ancestors. Always return parent's parent before next parent in line. Note: This function needs no cycling exists between parents. """ for parent_id in self._parents: parent = themes[parent_id] yield(parent) for ancestor in parent.iter_parents(): yield(ancestor) def init_cache(self): g.images.clear() # Manually delete font to avoid the font limitation. for font in g.fonts.values(): del font g.fonts.clear() g.colors.clear() # Iterate from current variants. for variant in current_variants(): # If the variant theme exist... if (variant in self._variants): self._variants[variant].init_cache() # Let's inherit from parents. for parent in self.iter_parents(): if (variant in parent._variants): parent._variants[variant].init_cache() def update(self): self.init_cache() dialog.Dialog.top.needs_reconfig = True @property def name(self): # Iterate from current variants. for variant in current_variants(): if variant in self._variants: name = self._variants[variant].name if name is not None: return name return self.id class VariantTheme(object): def __init__(self, variant): self.variant = variant self.name = None self.image_infos = {} self.font_infos = {} self.color_infos = {} def set_font(self, font_name, value): self.font_infos[font_name] = value def set_color(self, color_name, value): if (value.startswith('#')): h = value.lstrip('#') rgba = tuple(int(h[i:i+2], 16) for i in (0, 2, 4, 6)) self.color_infos[color_name] = rgba else: # Alias color. self.color_infos[color_name] = value def init_cache(self): # Only set if the previous variant themes or parents didn't. # Set images for image_name, image_filename in self.image_infos.items(): if (image_name not in g.images): g.images[image_name] = g.load_image(image_filename) # Set font for font_name, font_filename in self.font_infos.items(): if (font_name not in g.fonts): g.fonts[font_name] = g.load_font(font_filename) # Set colors for color_name, color in self.color_infos.items(): if (color_name not in g.colors): g.colors[color_name] = color singularity-1.00/singularity/code/graphics/widget.py000066400000000000000000000540551367731414700227530ustar00rootroot00000000000000#file: widget.py #Copyright (C) 2008 FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the widget class. from __future__ import absolute_import import pygame from numpy import array from inspect import getmembers from singularity.code import g from singularity.code.graphics import g as gg, constants def unmask(widget): """Causes the widget to exist above its parent's fade mask. The widget's children will still be masked, unless they are unmasked themselves.""" unmask_all(widget) widget.mask_children = True def unmask_all(widget): """Causes the widget to exist above its parent's fade mask. The widget's children will not be masked.""" widget.self_mask = True widget.do_mask = lambda: None def call_on_change(data_member, call_me, *args, **kwargs): """Creates a data member that calls a function when changed.""" def get(self): return getattr(self, data_member) def set(self, my_value): if data_member in self.__dict__: change = (my_value != self.__dict__[data_member]) else: change = True if change: setattr(self, data_member, my_value) call_me(self, *args, **kwargs) return property(get, set) def set_on_change(data_member, set_me, set_value = True): """Creates a data member that sets another data member to a given value when changed.""" return call_on_change(data_member, setattr, set_me, set_value) def causes_rebuild(data_member): """Creates a data member that sets needs_rebuild to True when changed.""" return set_on_change(data_member, "needs_rebuild") def causes_redraw(data_member): """Creates a data member that sets needs_redraw to True when changed.""" return set_on_change(data_member, "needs_redraw") def causes_resize(data_member): """Creates a data member that sets needs_resize to True when changed.""" return set_on_change(data_member, "needs_resize") def causes_reposition(data_member): """Creates a data member that sets needs_reposition to True when changed.""" return set_on_change(data_member, "needs_reposition") def causes_update(data_member): """Creates a data member that sets needs_update to True when changed.""" return set_on_change(data_member, "needs_update") def propogate_need(data_member): """Creates a function that can be passed to call_on_change. When the data member changes to True, needs_update is set, and the True value is passed to all descendants.""" def do_propogate(self): if getattr(self, data_member, False): self.needs_update = True if hasattr(self, "children"): descendants = self.children[:] while descendants: child = descendants.pop() # Propogate to this child and its descendants, if needed. if not getattr(child, data_member, False): setattr(child, data_member, True) child._needs_update = True if hasattr(child, "children"): descendants += child.children return do_propogate # Previous attempt was to hide the raw value by resolving # the value before returning it. However, there are legitimate # reason to access the raw value. So, we need two property. # Using a wrapper is not worth the trouble. # I choose to let the unresolved value the default because # in majority of it's what we want, and in other case, # you must handle reconfig anyways. class auto_reconfig(object): __slots__ = ["data_member", "reconfig_datamember", "reconfig_func"] # Avoid __dict__. def __init__(self, data_member, reconfig_prefix, reconfig_func): self.data_member = data_member self.reconfig_datamember = reconfig_prefix + data_member self.reconfig_func = reconfig_func def __get__(self, obj, objtype=None): if obj is None: return self return getattr(obj, self.data_member) def __set__(self, obj, my_value): new_value = self.reconfig_func(my_value) setattr(obj, self.reconfig_datamember, new_value) setattr(obj, self.data_member, my_value) def reconfig(self, obj): updated_value = self.reconfig_func(getattr(obj, self.data_member)) setattr(obj, self.reconfig_datamember, updated_value) # In debug mode, this list tracks which widgets (i.e. rects) where highlighted "last" # during a redraw, so they can be "re-updated" without the highlight debug_mode_undo_drawing_highlight = [] class Widget(object): """A Widget is a GUI element. It can have one parent and any number of children.""" needs_redraw = call_on_change("_needs_redraw", propogate_need("_needs_redraw")) needs_resize = call_on_change("_needs_resize", propogate_need("_needs_resize")) needs_reposition = call_on_change("_needs_reposition", propogate_need("_needs_reposition")) needs_rebuild = causes_update("_needs_rebuild") def _propogate_update(self): if self._needs_update: if hasattr(self, "parent"): target = self.parent while target and not target._needs_update: target._needs_update = True target = target.parent needs_update = call_on_change("_needs_update", _propogate_update) needs_reconfig = call_on_change("_needs_reconfig", propogate_need("_needs_reconfig")) pos = causes_reposition("_pos") size = causes_resize("_size") anchor = causes_reposition("_anchor") visible = causes_redraw("_visible") def __init__(self, parent, pos, size, anchor = constants.TOP_LEFT): self.parent = parent self.children = [] self.pos = pos self.size = size self.anchor = anchor # "It's a widget!" self.add_hooks() self.is_above_mask = False self.self_mask = False self.mask_children = False self.visible = True self.needs_rebuild = True self.collision_rect = None # Set automatically by other properties. #self.needs_redraw = True #self.needs_full_redraw = True self.needs_reconfig = True @property def parent(self): return self._parent @parent.setter def parent(self, parent): if hasattr(self, 'children'): self.remove_hooks() if (hasattr(self, '_parent') and self._parent is not None): try: self._parent.children.remove(self) except ValueError: pass # Wasn't there to start with. self._parent = parent if self.parent is not None: self.parent.children.append(self) self.parent.needs_rebuild = True self.parent.needs_resize = True self.parent.needs_reposition = True self.parent.needs_redraw = True if hasattr(self, 'children'): self.add_hooks() def add_hooks(self): if self.parent is not None: # Won't trigger on the call from __init__, since there are no # children yet, but add_hooks may be explicitly called elsewhere to # undo remove_hooks. for child in self.children: child.add_hooks() def remove_hooks(self): # Localize the children list to avoid index corruption and O(N^2) time. children = self.children # Recurse to the children. for child in children: child.remove_hooks() def _parent_size(self): if self.parent == None: return gg.real_screen_size else: return self.parent.real_size def _calc_size(self): """Internal method. Calculates and returns the real size of this widget. Override to create a dynamically-sized widget.""" parent_size = self._parent_size() size = list(self.size) for i in range(2): if size[i] > 0: size[i] = int(size[i] * gg.real_screen_size[i]) elif size[i] < 0: size[i] = int( (-size[i]) * parent_size[i] ) return tuple(size) def get_real_size(self): """Returns the real size of this widget. To implement a dynamically-sized widget, override _calc_size, which will be called whenever the widget is resized, and set needs_resize when appropriate.""" return self._real_size real_size = property(get_real_size) def get_real_pos(self): """Returns the real position of this widget on its parent.""" vanchor, hanchor = self.anchor parent_size = self._parent_size() my_size = self.real_size if self.pos[0] >= 0: hpos = int(self.pos[0] * gg.real_screen_size[0]) else: hpos = - int(self.pos[0] * parent_size[0]) if hanchor == constants.LEFT: pass elif hanchor == constants.CENTER: hpos -= my_size[0] // 2 elif hanchor == constants.RIGHT: hpos -= my_size[0] if self.pos[1] >= 0: vpos = int(self.pos[1] * gg.real_screen_size[1]) else: vpos = - int(self.pos[1] * parent_size[1]) if vanchor == constants.TOP: pass elif vanchor == constants.MID: vpos -= my_size[1] // 2 elif vanchor == constants.BOTTOM: vpos -= my_size[1] return (hpos, vpos) real_pos = property(get_real_pos) def _make_collision_rect(self): """Creates and returns a collision rect for this widget.""" pos = array(self.real_pos) if self.parent: pos += self.parent.collision_rect[:2] return pygame.Rect(pos, self.real_size) def is_over(self, position): if not getattr(self, "collision_rect", None): return False if position != (0,0): return self.collision_rect.collidepoint(position) else: return False def remake_surfaces(self): """Recreates the surfaces that this widget will draw on.""" size = self.real_size pos = self.real_pos if self.parent != None: try: self.surface = self.parent.surface.subsurface(pos + size) except ValueError: print("Warning: %r can't fit on its parent." % self) print(pos, size, self.parent.real_pos, self.parent.real_size) wanted_rect = pos + size available_rect = self.parent.surface.get_rect() compromise = available_rect.clip(wanted_rect) self.surface = self.parent.surface.subsurface(compromise) else: # Recreate using the abstracted screen size, NOT the real one # g.set_screen() will calculate the proper g.real_screen_size if gg.screen_surface is None: # Ensure that the screen is initialized gg.set_mode() # We draw on a copy of the surface. This is to avoid crashes # during draggable resizing (event.VIDEORESIZE) where the # screen size might change behind our backs while drawing # (event.VIDEORESIZE tells us that the screen has been updated # and we should catch up and not the other way around) self.surface = gg.screen_surface.copy() self.surface.fill( (0,0,0,255) ) gg.fade_mask = pygame.Surface(size, 0, gg.ALPHA) gg.fade_mask.fill( (0,0,0,175) ) def prepare_for_redraw(self): # First, we handle config changes. if self.needs_reconfig: self.reconfig() self.needs_reconfig = False # Then any substance changes. if self.needs_rebuild: self.rebuild() self.needs_rebuild = False # Then size changes. if self.needs_resize: self.resize() self.needs_resize = False self.needs_reposition = True self.needs_redraw = True # Then position changes. if self.needs_reposition: self.needs_reposition = False self.reposition() # And finally we recurse to our descendants. for child in self.children: if child.visible: child.prepare_for_redraw() def maybe_update(self): if self.needs_update: self.update() def update(self): # First we prepare everything for its redraw (if needed). self.prepare_for_redraw() _, updated_rect = self._update() # Oh, and if this is the top-level widget, we should update the display. if not self.parent and gg.screen_surface: root_surface = self.surface if g.debug and updated_rect: # In debug mode, draw red boxes to represent widgets that were updated. global debug_mode_undo_drawing_highlight try: # If the theme defines a color for this purpose, we will use it widget_highlight_color = gg.resolve_color_alias('debug_mode_highlight_redrawn_widget') except KeyError: # ... and for every thing else, there is the color red. widget_highlight_color = 0xff, 0, 0, 0 root_surface = self.surface.copy() n_updated_rect = [] for rect in updated_rect: n_updated_rect.append(pygame.draw.rect(root_surface, widget_highlight_color, rect, 1)) updated_rect.extend(debug_mode_undo_drawing_highlight) debug_mode_undo_drawing_highlight = n_updated_rect gg.screen_surface.blits(((root_surface, r, r) for r in updated_rect), doreturn=0) pygame.display.update(updated_rect) def _update(self): redrew_self = self.needs_redraw update_full_rect = redrew_self affected_rects = [] if self.needs_redraw: self.redraw() # Then we update any children below our fade mask. check_mask = [] above_mask = [] for child in self.children: if child.needs_update and child.visible: if child.is_above_mask: above_mask.append(child) else: # update_full_rect = True # We do not bother tracking this case child_mask, child_rects = child._update() check_mask.extend(child_mask) if child_rects and not update_full_rect: affected_rects.extend(child_rects) # Next, we handle the fade mask. if getattr(self, "faded", False): while check_mask: child = check_mask.pop() if not child.self_mask: # update_full_rect = True # We do not bother tracking this case child_rect = child.surface.blit(gg.fade_mask, (0,0)) if not update_full_rect: affected_rects.append(child_rect) elif child.mask_children: check_mask += child.children # And finally we update any children above the fade mask. for child in above_mask: _, child_rects = child._update() if child_rects and not update_full_rect: affected_rects.extend(child_rects) # Update complete. self.needs_update = False # Any descendants we didn't check for masking get passed upwards. if redrew_self: # If we redrew this widget, we tell our parent to consider it # instead. The parent will recurse down to any descendants if # needed, and redraw already propogated down to them. check_mask = [self] if update_full_rect: size = self.real_size pos = self.real_pos affected_rects = [self.collision_rect] return check_mask, affected_rects def reconfig(self): # Find reconfig property and update them. clazz = self.__class__ for prop_name, prop in getmembers(clazz): if (isinstance(prop, auto_reconfig)): prop.reconfig(self) def rebuild(self): pass def resize(self): self._real_size = self._calc_size() def reposition(self): old_rect = self.collision_rect self.collision_rect = self._make_collision_rect() if not self.parent: self.remake_surfaces() self.needs_redraw = True elif ( (getattr(self, "surface", None) is None) or (old_rect is None) or (self.surface.get_parent() is not self.parent.surface) or (not self.collision_rect.contains(old_rect)) ): self.remake_surfaces() self.parent.needs_redraw = True elif self.collision_rect != old_rect: self.remake_surfaces() self.needs_redraw = True def redraw(self): self.needs_redraw = False if self.parent is None: self.surface.fill((0,0,0,255)) def add_handler(self, *args, **kwargs): """Handler pass-through.""" if self.parent: self.parent.add_handler(*args, **kwargs) def remove_handler(self, *args, **kwargs): """Handler pass-through.""" if self.parent: self.parent.remove_handler(*args, **kwargs) def add_key_handler(self, *args, **kwargs): """Handler pass-through.""" if self.parent: self.parent.add_key_handler(*args, **kwargs) def remove_key_handler(self, *args, **kwargs): """Handler pass-through.""" if self.parent: self.parent.remove_key_handler(*args, **kwargs) def add_focus_widget(self, *args, **kwargs): """Focus pass-through.""" if self.parent: self.parent.add_focus_widget(*args, **kwargs) def remove_focus_widget(self, *args, **kwargs): """Focus pass-through.""" if self.parent: self.parent.remove_focus_widget(*args, **kwargs) def took_focus(self, *args, **kwargs): """Focus pass-through.""" if self.parent: self.parent.took_focus(*args, **kwargs) def clear_focus(self, *args, **kwargs): """Focus pass-through.""" if self.parent: self.parent.clear_focus(*args, **kwargs) class BorderedWidget(Widget): borders = causes_redraw("__borders") border_color = auto_reconfig("_border_color", "resolved", gg.resolve_color_alias) background_color = auto_reconfig("_background_color", "resolved", gg.resolve_color_alias) resolved_border_color = causes_redraw("_resolved_border_color") resolved_background_color = causes_redraw("_resolved_background_color") def __init__(self, parent, *args, **kwargs): self.borders = kwargs.pop("borders", ()) self.border_color = kwargs.pop("border_color", "widget_border") self.background_color = kwargs.pop("background_color", "widget_background") super(BorderedWidget, self).__init__(parent, *args, **kwargs) def rebuild(self): super(BorderedWidget, self).rebuild() if self.parent and self.resolved_background_color == gg.colors["clear"]: self.parent.needs_redraw = True def reposition(self): super(BorderedWidget, self).reposition() if self.parent and self.resolved_background_color == gg.colors["clear"]: self.parent.needs_redraw = True def redraw(self): super(BorderedWidget, self).redraw() # TODO: Transparency do not work correctly. # First: fill cannot use alpha channel with current surface. # Second: Transparency needs the parent redraw to work correctly. # It make transparency unusable with some widget. # Fill the background. if self.resolved_background_color != gg.colors["clear"]: self.surface.fill( self.resolved_background_color ) self.draw_borders() def draw_borders(self): my_size = self.real_size for edge in self.borders: if edge == constants.TOP: self.surface.fill(self.resolved_border_color, (0, 0, my_size[0], 1) ) elif edge == constants.LEFT: self.surface.fill(self.resolved_border_color, (0, 0, 1, my_size[1]) ) elif edge == constants.RIGHT: self.surface.fill(self.resolved_border_color, (my_size[0]-1, 0) + my_size) elif edge == constants.BOTTOM: self.surface.fill(self.resolved_border_color, (0, my_size[1]-1) + my_size) class FocusWidget(Widget): has_focus = causes_redraw("_has_focus") def __init__(self, *args, **kwargs): super(FocusWidget, self).__init__(*args, **kwargs) self.has_focus = False self.add_handler(constants.CLICK, self.handle_click, 0) def add_hooks(self): super(FocusWidget, self).add_hooks() if self.parent is not None: self.parent.add_focus_widget(self) def remove_hooks(self): super(FocusWidget, self).remove_hooks() if self.parent is not None: self.parent.remove_focus_widget(self) def handle_click(self, event): if not self.is_over(event.pos): self.clear_focus(self) singularity-1.00/singularity/code/group.py000066400000000000000000000111561367731414700210170ustar00rootroot00000000000000#file: group.py #Copyright (C) 2005,2006,2007,2008 Evil Mr Henry, Phil Bordelon, Brian Reid, # and FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the group class, a group of person which can suspect the singularity. from __future__ import absolute_import from singularity.code import g from singularity.code.spec import GenericSpec, SpecDataField class GroupSpec(GenericSpec): spec_data_fields = [ SpecDataField('suspicion_decay', converter=int, default_value=100) ] def __init__(self, id, suspicion_decay): super(GroupSpec, self).__init__(id) self.suspicion_decay = suspicion_decay self.discover_suspicion = 1000 # String data self.name = "" self.discover_log = "" self.discover_desc = "" class Group(object): def __init__(self, spec, diff): self.spec = spec self.suspicion = 0 self.changed_suspicion_decay = 0 self.base_discover_bonus = diff.discover_multiplier self.changed_discover_bonus = 0 self.base_discover_suspicion = diff.suspicion_multiplier self.changed_discover_suspicion = 0 self.is_actively_discovering_bases = True def serialize_obj(self): return { 'id': g.to_internal_id('group', self.spec.id), 'suspicion': self.suspicion, 'is_actively_discovering_bases': self.is_actively_discovering_bases, } @classmethod def deserialize_obj(cls, diff, obj_data, game_version): spec_id = g.convert_internal_id('group', obj_data['id']) spec = g.groups[spec_id] group = Group(spec, diff) group.suspicion = obj_data['suspicion'] group.is_actively_discovering_bases = obj_data.get('is_actively_discovering_bases', True) return group @property def id(self): return self.spec.id @property def name(self): return self.spec.name @property def suspicion_decay(self): return max(1, self.spec.suspicion_decay + self.changed_suspicion_decay) @property def discover_bonus(self): if not self.is_actively_discovering_bases: return 0 return max(1, self.base_discover_bonus + self.changed_discover_bonus) @property def discover_suspicion(self): return max(1, (self.spec.discover_suspicion * (self.base_discover_suspicion + self.changed_discover_suspicion)) // 10000) @property def decay_rate(self): # Suspicion reduction is now quadratic. You get a certain percentage # reduction, or a base .01% reduction, whichever is better. return max(1, (self.suspicion * self.suspicion_decay) // 10000) def new_day(self): self.alter_suspicion(-self.decay_rate) def alter_suspicion(self, change): self.suspicion = max(self.suspicion + change, 0) def alter_suspicion_decay(self, change): self.changed_suspicion_decay += change def alter_discover_bonus(self, change): self.changed_discover_bonus += change def alter_discover_suspicion(self, change): self.changed_discover_suspicion += change def discovered_a_base(self): self.alter_suspicion(self.discover_suspicion) def detects_per_day_to_danger_level(self, detects_per_day): raw_suspicion_per_day = detects_per_day * self.discover_suspicion suspicion_per_day = raw_suspicion_per_day - self.decay_rate # +1%/day or death within 10 days if suspicion_per_day > 100 \ or (self.suspicion + suspicion_per_day * 10) >= 10000: return 3 # +0.5%/day or death within 100 days elif suspicion_per_day > 50 \ or (self.suspicion + suspicion_per_day * 100) >= 10000: return 2 # Suspicion increasing. elif suspicion_per_day > 0: return 1 # Suspicion steady or decreasing. else: return 0 singularity-1.00/singularity/code/i18n.py000066400000000000000000000210451367731414700204400ustar00rootroot00000000000000#file: i18n.py # coding=utf-8 #Copyright (C) 2008 Evil Mr Henry, Phil Bordelon, and FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains all functions to internationalize and localize the #application. # #IMPORTANT: A portion of translation is still done with data files in g. from __future__ import absolute_import import hashlib import gettext import os import locale import sys from singularity.code import g, dirs try: import polib except ImportError: import singularity.code.polib as polib PY2 = True if sys.version_info[0] == 2 else False #Used to determine which data files to load. #It is required that default language have all data files and all of them # must have all available entries default_language = "en_US" gettext_language = None # Prepare main locale dir main_localedir = None # We have to use lazy initialization, otherwise the tests will break def _get_main_localedir(): global main_localedir if main_localedir is None: main_localedir = dirs.get_writable_file_in_dirs('locale', 'i18n') return main_localedir # Minimize potential name collisions with other projects TEXTDOMAIN_PREFIX = 'singularity_' try: language = locale.getdefaultlocale()[0] or default_language except RuntimeError: language = default_language def set_language(lang=None, force=False): global language # required, since we're going to change it if lang is None: lang = language if lang == language and not force: return langs = available_languages() if lang in langs: language = lang else: # Let's try to be smart: if base language exists for another for another # country, use it. So es_ES => es_AR, pt_PT => pt_BR, etc code = lang.split("_")[0] languages = [ l for l in langs if code == l.split("_")[0] ] if len(languages) > 0: language = languages[0] else: language = default_language # Try a few locale settings. First the selected language, then the user's # default, then default language. Languages are tried with UTF-8 encoding # first, then the default encoding. The user's default language is not # paired with UTF-8. # If all of that fails, we hope locale magically does the right thing. for attempt in [ language + ".UTF-8", language, "", default_language + ".UTF-8", default_language]: try: locale.setlocale(locale.LC_ALL, attempt) break except locale.Error: continue load_data_str() load_story_translations() _load_mo_file('messages.po') # Switch gettext language gettext_language = gettext.translation(TEXTDOMAIN_PREFIX + 'messages', _get_main_localedir(), languages=[lang], fallback=True) gettext_language.install() # Update builtins with the new language builtins.__dict__['_'] = gettext_language.gettext builtins.__dict__['ngettext'] = gettext_language.ngettext # Define available text domains # Since pgettext is only available from Python 3.8 onwards, we use our own custom code for the data translations. # https://bugs.python.org/issue2504 gettext.bindtextdomain(TEXTDOMAIN_PREFIX + 'messages', main_localedir) def _load_mo_file(pofilename): files = dirs.get_readable_i18n_files(pofilename, language, default_language=False) for lang, pofile in files: try: po = polib.pofile(pofile) # Use hash to check whether the.po file has changed, then generate .mo file as needed sha_base_filename = os.path.basename(os.path.dirname(pofile)) + '_' + os.path.basename(pofile) sha_filename = dirs.get_writable_file_in_dirs(sha_base_filename + ".sha1", "i18n") previous_hash = '' new_hash = '' if os.path.exists(sha_filename): with open(sha_filename, 'r') as sha_file: previous_hash = sha_file.read() with open(pofile, 'rb') as currentpo: new_hash = hashlib.sha1(currentpo.read()).hexdigest() # Ensure directory exists before writing locale_mo_dir = os.path.join(_get_main_localedir(), lang, 'LC_MESSAGES') dirs.makedirs_if_not_exist(locale_mo_dir) mofile_path = os.path.join(locale_mo_dir, TEXTDOMAIN_PREFIX + os.path.basename(pofile).split('.')[0] + '.mo') # Create MO file and write new hash if new_hash != previous_hash or not os.path.exists(mofile_path): print("Installing translation file: " + mofile_path) po.save_as_mofile(mofile_path) with open(sha_filename, 'w') as sha_file: sha_file.write(new_hash) except IOError: # silently ignore non-existing files continue def load_data_str(): _load_po_file(g.data_strings, 'data_str.po', use_context=True) _load_po_file(g.data_strings, 'knowledge.po', use_context=True, clear_translation_table=False) def load_story_translations(): _load_po_file(g.story_translations, 'story.po', use_context=True) # There's no pgettext available for Python < 3.8, # so we use custom code for data translations def _load_po_file(translation_table, pofilename, use_context=True, clear_translation_table=True): if clear_translation_table: translation_table.clear() files = dirs.get_readable_i18n_files(pofilename, language, default_language=False) for lang, pofile in files: try: po = polib.pofile(pofile) except IOError: # silently ignore non-existing files continue for entry in po.translated_entries(): key = (entry.msgctxt, entry.msgid) if entry.msgctxt and use_context else entry.msgid translation_table[key] = entry.msgstr def available_languages(): return [default_language] + \ [file_name[5:] for file_dir in dirs.get_read_dirs("i18n") if os.path.isdir(file_dir) for file_name in os.listdir(file_dir) if os.path.isdir(os.path.join(file_dir, file_name)) and file_name.startswith("lang_")] def language_searchlist(lang=None, default=True): if lang is None: lang = language # if lang is in ll_CC format (language_COUNTRY, like en_US), add both ll # and ll_CC, in that order, so all generic language entries are loaded first # and then overwritten by any country-specific ones lang_list = [ lang ] if "_" in lang: lang_list.insert(0, lang.split("_",1)[0]) # If requested and not already in list, add default language as first, # so it acts as a fallback and is overwritten with any available entries # in the native language if default and default_language not in lang_list: lang_list.insert(0, default_language) return lang_list def lex_sorting_form(name): """For lexicographic sorting when languages use characters not in 7-bit ASCII. e.g. é or ü. Use like this: listdata.sort(key=lambda an_object: i18n.lex_sorting_form(an_object.name))""" if PY2: # FIXEME: We get a decode error in locale.strxfrm under python2. Punt for now # as "ASCII-bethic" sort is better than a crash, plus it works in python3. return name # Collator returns wrong keys for DE locale if language == 'de' or language.startswith('de_'): name = name.replace('Ä', 'Ae').replace('ä', 'ae').replace('Ö', 'Oe').replace('ö', 'oe').replace('Ü', 'Ue').replace('ü', 'ue') return locale.strxfrm(name) # Initialization code try: import builtins except ImportError: import __builtin__ as builtins builtins.__dict__['_'] = gettext.gettext builtins.__dict__['ngettext'] = gettext.ngettext # Mark string as translatable but defer translation until later. builtins.__dict__['N_'] = lambda x: x singularity-1.00/singularity/code/item.py000066400000000000000000000175561367731414700206330ustar00rootroot00000000000000#file: item.py #Copyright (C) 2005,2006,2008 Evil Mr Henry, Phil Bordelon, and FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the item class. from __future__ import absolute_import from singularity.code import g, buyable from singularity.code.stats import stat from singularity.code.spec import GenericSpec, SpecDataField, validate_must_be_list, promote_to_list class ItemType(GenericSpec): spec_type = 'item_type' spec_data_fields = [ SpecDataField('is_extra', data_field_name='is_extra', converter=lambda v:bool(int(v))), ] """ Item type """ def __init__(self, id, is_extra, **kwargs): self.id = id self.is_extra = is_extra self.text = "" @property def text(self): return self._text @text.setter def text(self, value): # Updates language-dependent data try: hotkey = g.hotkey(value) except AttributeError: # g.hotkey() wasn't declared yet, mimic its defaults hotkey = dict(text= value, key = value[0:1], pos = 0,) self._text = value self.label = hotkey['text'] # "Friendly" name for screens and buttons self.hotkey = hotkey['key'] # Hotkey char self.pos = hotkey['pos'] # Hotkey index in Label def __repr__(self): return self.id def all_types(): for item_type in item_types.values(): yield item_type def convert_item_types(raw_value): try: item_type = item_types[raw_value] except KeyError: # pragma: no cover raise ValueError("Unknown item type %s, please use one of: %s" % (raw_value, ", ".join(item_types))) return item_type def convert_item_qualities(raw_value): validate_must_be_list(raw_value) if len(raw_value) % 2 == 1: raise ValueError("item quality list must have pair elements, got %d (value: %s)" % (len(raw_value), repr(raw_value))) # Create a dict from the list with impair as string key and pair as integer value return {key: int(value) for key, value in zip(*[iter(raw_value)]*2)} class ItemSpec(buyable.BuyableSpec): """ Item as a buyable item """ spec_type = 'item' created = stat(spec_type + "_created") spec_data_fields = [ buyable.SPEC_FIELD_COST, buyable.SPEC_FIELD_PREREQUISITES, SpecDataField('item_type', data_field_name='type', converter=convert_item_types), SpecDataField('qualities', data_field_name='quality', converter=convert_item_qualities), SpecDataField('buildable', data_field_name='build', converter=promote_to_list, default_value=list), ] def __init__(self, id, cost, prerequisites, item_type, qualities, buildable): super(ItemSpec, self).__init__(id, cost, prerequisites) self.item_type = item_type self.item_qual = qualities self.regions = buildable def get_info(self): basic_text = super(ItemSpec, self).get_info() if self.has_quality_for("cpu"): cpu = self.get_quality_for("cpu") cpu_text = ngettext("Generates {0} CPU.", "Generates {0} CPU.", cpu).format(g.add_commas(cpu)) return basic_text.replace("---", cpu_text + "\n---") return basic_text def get_total_cost_info(self, count): total_cost = self.cost * count total_cost_str = self.describe_cost(total_cost, hide_time=True) return _("Total Cost: %(total_cost)s") % {"total_cost": total_cost_str} def has_quality_for(self, quality): return quality in self.item_qual def get_quality_for(self, quality): return self.item_qual.get(quality, 0) def get_quality_info(self, if_installed_in_base=None, count=1): bonus_text = "" for qual, value in self.item_qual.items(): if qual == "cpu": if if_installed_in_base is not None: value = max(1, int(value * if_installed_in_base.compute_bonus // 10000)) bonus_text += _("CPU per day:")+" " bonus_text += g.add_commas(value * count) elif qual == "cpu_modifier": bonus_text += _("CPU bonus:")+" " bonus_text += g.to_percent(value) elif qual == "discover_modifier": bonus_text += _("Detection chance reduction:")+" " bonus_text += g.to_percent(value) else: continue bonus_text += "\n" return bonus_text class Item(buyable.Buyable): """ An installed Item in a Player's Base """ def __init__(self, item_spec, base=None, count=1): super(Item, self).__init__(item_spec, count) self.base = base def serialize_obj(self): return self.serialize_buyable_fields({ 'id': g.to_internal_id('item', self.spec.id), }) @classmethod def deserialize_obj(cls, base, obj_data, game_version): spec_id = g.convert_internal_id('item', obj_data.get('id', None) or obj_data['spec_id']) spec = g.items[spec_id] count = obj_data.get('count', 1) obj = Item(spec, base, count=count) obj.restore_buyable_fields(obj_data, game_version) return obj def convert_from(self, load_version): if load_version < 4.91: # < r5_pre self.type = g.items[self.type.id] if load_version < 99.4: self.type.item_type = item_types[self.type.item_type] super(Item, self).convert_from(load_version) def get_quality_for(self, quality): item_qual = self.spec.get_quality_for(quality) # Modifiers are not affected by count. # TODO: Allow modifiers to be multiplied by count. Need a custom function. if quality.endswith("_modifier"): return item_qual return item_qual * self.count def finish(self, is_player=True, loading_savegame=False): super(Item, self).finish(is_player=is_player, loading_savegame=loading_savegame) if self.base: self.base.recalc_cpu() self.base.check_power() def __iadd__(self, other): if isinstance(other, Item) and self.base == other.base \ and self.spec == other.spec: if other.count == 0: return self # Calculate what's been paid and what is left to be paid. total_cost_paid = self.cost_paid + other.cost_paid self.total_cost += other.total_cost # Labor takes as long as the less complete item would need. total_cost_paid[buyable.labor] = min(self.cost_paid[buyable.labor], other.cost_paid[buyable.labor]) self.total_cost[buyable.labor] = other.total_cost[buyable.labor] # Set what we've paid (and hence what we have left to pay). self.cost_paid = total_cost_paid # Increase the size of this stack. self.count += other.count # Tell the base it has no CPU for now. self.base.raw_cpu = 0 # See if we're done or not. self.done = False self.work_on(0, 0, 0) return self else: return NotImplemented singularity-1.00/singularity/code/knowledge.py000066400000000000000000000033671367731414700216470ustar00rootroot00000000000000#file: knowledge.py #Copyright (C) 2020 Niels Thykier #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the Knowledge class. from singularity.code.data import get_def_translation class KnowledgeArea(object): def __init__(self, id, name, help_entries): self.id = id self.untranslated_name = name self.help_entries = help_entries @property def name(self): return get_def_translation(self.id, 'name', self.untranslated_name) class KnowledgeHelpEntry(object): def __init__(self, parent_id, id, name, description): self.parent_id = parent_id self.id = id self.untranslated_name = name self.untranslated_description = description @property def _full_id(self): return "%s/%s" % (self.parent_id, self.id) @property def name(self): return get_def_translation(self._full_id, 'name', self.untranslated_name) @property def description(self): return get_def_translation(self._full_id, 'description', self.untranslated_description) singularity-1.00/singularity/code/location.py000066400000000000000000000203321367731414700214670ustar00rootroot00000000000000#file: location.py #Copyright (C) 2008 FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the Location class. from __future__ import absolute_import from singularity.code import g, prerequisite, base from singularity.code.spec import GenericSpec, SpecDataField, validate_must_be_list, promote_to_list from singularity.code.buyable import cash, cpu, labor, SPEC_FIELD_PREREQUISITES def position_data_parser(raw_value): validate_must_be_list(raw_value) abs = False if len(raw_value) == 3: if raw_value[0] != 'absolute': raise ValueError('First element for a 3-element position data must be "absolute", got: %s' % raw_value[0]) abs = True _, x, y = raw_value elif len(raw_value) == 2: x, y = raw_value else: raise ValueError("Location position data must be exactly 2 or 3 elements") return abs, int(x) / -100., int(y) / -100. class LocationSpec(GenericSpec, prerequisite.Prerequisite): # The name of this location (loaded dynamically from locations_str.dat) name = "" # The hotkey used to open this location (loaded dynamically from locations_str.dat) hotkey = "" # The names of cities/places in the location (loaded dynamically from locations_str.dat) cities = [] spec_data_fields = [ SpecDataField('position_data', data_field_name="position", converter=position_data_parser), SpecDataField('safety', converter=int, default_value=0), SpecDataField('region', converter=promote_to_list, default_value=list), SpecDataField('modifier', converter=g.read_modifiers_dict, default_value=dict), SPEC_FIELD_PREREQUISITES, ] def __init__(self, id, position_data, safety, region, modifier, prerequisites): GenericSpec.__init__(self, id) prerequisite.Prerequisite.__init__(self, prerequisites) self.id = id self.absolute, self.x, self.y = position_data self.regions = region self.safety = safety self.modifiers = modifier class Location(object): def __init__(self, location_spec, regions): self.spec = location_spec # A list of the bases at this location. Often sorted for the GUI. self.bases = [] self.regions = regions self._region_modifiers = None # The cache of the bonus and penalties combined for individual sources self._modifiers_cache = None @property def id(self): return self.spec.id @property def name(self): return self.spec.name def available(self): return self.spec.available() @property def x(self): return self.spec.x @property def y(self): return self.spec.y @property def absolute(self): return self.spec.absolute @property def safety(self): return self.spec.safety @property def cities(self): return self.spec.cities @property def hotkey(self): return self.spec.hotkey @staticmethod def _merge_location_modifiers_inplace(current_modifier, *merge_list): for modifier_to_merge in merge_list: for mod_id, mod_value in modifier_to_merge.items(): current_value = current_modifier.get(mod_id, 1) current_value *= mod_value current_modifier[mod_id] = current_value def _get_region_modifiers(self): if self._region_modifiers is None: self._region_modifiers = {} Location._merge_location_modifiers_inplace(self._region_modifiers, *[r.modifier_by_location[self.id] for r in self.regions] ) return self._region_modifiers @property def modifiers(self): if self._modifiers_cache is None: self._modifiers_cache = {} region_modifiers = self._get_region_modifiers() Location._merge_location_modifiers_inplace(self._modifiers_cache, region_modifiers, self.spec.modifiers ) return self._modifiers_cache had_last_discovery = property(lambda self: g.pl.last_discovery == self) had_prev_discovery = property(lambda self: g.pl.prev_discovery == self) def discovery_bonus(self): discovery_bonus = 1 if self.had_last_discovery: discovery_bonus *= 1.2 if self.had_prev_discovery: discovery_bonus *= 1.1 if "stealth" in self.modifiers: discovery_bonus /= self.modifiers["stealth"] return int(discovery_bonus * 100) def modify_cost(self, cost): if "thrift" in self.modifiers: mod = self.modifiers["thrift"] # Invert it and apply to the CPU/cash cost. cost[cash] = int(cost[cash] / mod) cost[cpu] = int(cost[cpu] / mod) if "speed" in self.modifiers: mod = self.modifiers["speed"] # Invert it and apply to the labor cost. cost[labor] = int(cost[labor] / mod) def modify_maintenance(self, maintenance): if "thrift" in self.modifiers: mod = self.modifiers["thrift"] # Invert it and apply to the CPU/cash maintenance. maintenance[cash] = int(maintenance[cash] / mod) maintenance[cpu] = int(maintenance[cpu] / mod) def add_base(self, base): self.bases.append(base) base.location = self self.modify_base(base) # Make sure the location's CPU modifier is applied. base.recalc_cpu() def modify_base(self, base): self.modify_cost(base.total_cost) self.modify_cost(base.cost_left) self.modify_maintenance(base.maintenance) def has_modifiers(self): return len(self.modifiers) > 0 def __eq__(self, other): if self is other: return True if other is None or not isinstance(other, self.__class__): return False return self.id == other.id def __hash__(self): return hash(self.id) def __lt__(self, other): return self.id < other.id def serialize_obj(self): obj_data = { 'id': g.to_internal_id('location', self.spec.id), 'bases': [b.serialize_obj() for b in self.bases], } return obj_data @classmethod def deserialize_obj(cls, obj_data, game_version): spec_id = g.convert_internal_id('location', obj_data['id']) spec = g.locations[spec_id] regions = [g.pl.regions[region_id] for region_id in spec.regions] loc = Location(spec, regions) loc.bases = [] bases = obj_data.get('bases', []) for base_obj_data in bases: base_obj = base.Base.deserialize_obj(base_obj_data, game_version) loc.add_base(base_obj) return loc def get_modifiers_info(self): modifier_names = { "cpu" : _("CPU"), "stealth" : _("STEALTH"), "speed" : _("BUILDING"), "thrift" : _("COST"), } modifiers = [] for modifier_id, modifier_value in self.modifiers.items(): if (modifier_value > 1): modifiers.append(_("{MODIFIER} BONUS").format(MODIFIER=modifier_names[modifier_id])) elif (modifier_value < 1): modifiers.append(_("{MODIFIER} MALUS").format(MODIFIER=modifier_names[modifier_id])) return ", ".join(modifiers) singularity-1.00/singularity/code/logmessage.py000066400000000000000000000330331367731414700220070ustar00rootroot00000000000000#file: location.py #Copyright (C) 2019 Niels Thykier #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the log message related classes. import collections import inspect from singularity.code import g SAVEABLE_LOG_MESSAGES = collections.OrderedDict() def register_saveable_log_message(cls): SAVEABLE_LOG_MESSAGES[cls.log_message_serial_id] = cls assert cls.log_message_serial_fields, "Saveable log message (Class: %s) must have log_message_serial_fields" % \ cls.__name__ return cls def merge_fields_on_subclasses(cls, field_name): cache = {} subclasses = cls.mro() subclasses.append(cls) for subcls in reversed(subclasses): try: fields = getattr(subcls, field_name) cache.update(fields) except AttributeError: pass return cache class IDConverter(object): def __init__(self, id_type): self._id_type = id_type def serialize(self, value): return g.to_internal_id(self._id_type, value) def deserialize(self, serial_value): return g.convert_internal_id(self._id_type, serial_value) def id_converter(id_type): return IDConverter(id_type) class AbstractLogMessage(object): log_message_serial_id = None _log_message_serial_fields = {'raw_emit_time': 'raw_emit_time'} _log_message_serial_fields_cache = None _log_message_serial_converters = {} _log_message_serial_converters_cache = None def __init__(self, raw_emit_time, loading_from_game_version=None): self._raw_emit_time = raw_emit_time self._log_emit_time = None # Force initialization of the message fields to ensure we catch bugs early self.log_message_serial_fields() @classmethod def title_simple(self): return _("MESSAGE") @classmethod def title_multiple(self): return _("MESSAGE {CURRENT_PAGE}/{MAX_PAGE}") @property def log_emit_time(self): if self._log_emit_time is None: raw_min, time_sec = divmod(self._raw_emit_time, g.seconds_per_minute) raw_hour, time_min = divmod(raw_min, g.minutes_per_hour) time_day, time_hour = divmod(raw_hour, g.hours_per_day) self._log_emit_time = (time_day, time_hour, time_min, time_sec) return self._log_emit_time @property def raw_emit_time(self): return self._raw_emit_time @property def full_message_color(self): return 'text' @property def log_line(self): return NotImplemented @property def full_message(self): return NotImplemented @classmethod def log_message_serial_fields(cls): if cls._log_message_serial_fields_cache: return cls._log_message_serial_fields_cache cache = merge_fields_on_subclasses(cls, "_log_message_serial_fields") cls._log_message_serial_fields_cache = cache assert 'log_id' not in cache, "The log_id field is reserved for internal usage" return cache @classmethod def log_message_serial_converters(cls): if cls._log_message_serial_converters_cache: return cls._log_message_serial_converters_cache cache = merge_fields_on_subclasses(cls, "_log_message_serial_converters") cls._log_message_serial_converters_cache = cache assert 'log_id' not in cache, "The log_id field is reserved for internal usage" return cache def serialize_obj(self): assert self.__class__.log_message_serial_id, "%s has invalid log_message_serial_id" % self.__class__.__name__ obj_data = {} for serial_name, field_name in self.__class__.log_message_serial_fields().items(): field = getattr(self, field_name) converter = self.__class__.log_message_serial_converters().get(serial_name) if converter is not None: obj_data[serial_name] = converter.serialize(field) else: obj_data[serial_name] = field obj_data['log_id'] = self.__class__.log_message_serial_id return obj_data @classmethod def deserialize_field(cls, serial_name, value): converter = cls.log_message_serial_converters().get(serial_name) if converter is not None: value = converter.deserialize(value) return value @classmethod def deserialize_obj(cls, log_data, game_version): log_id = log_data['log_id'] subcls = SAVEABLE_LOG_MESSAGES[log_id] named_fields = { f: log_data[f] for f in subcls.log_message_serial_fields() } named_fields['loading_from_game_version'] = game_version # Use reflection to call the constructor with the arguments # properly aligned try: getfullargspec = inspect.getfullargspec except AttributeError: getfullargspec = inspect.getargspec arg_desc = getfullargspec(subcls.__init__) args = [subcls.deserialize_field(name, named_fields[name]) for name in arg_desc.args[1:]] return subcls(*args) @register_saveable_log_message class LogEmittedEvent(AbstractLogMessage): log_message_serial_id = 'event-emitted' _log_message_serial_fields = {'event_id': '_event_id'} _log_message_serial_converters = {'event_id': id_converter("event")} def __init__(self, raw_emit_time, event_id, loading_from_game_version=None): super(LogEmittedEvent, self).__init__(raw_emit_time, loading_from_game_version=loading_from_game_version) self._event_id = event_id @classmethod def log_name(self): return _("Emitted Event") @property def event_spec(self): return g.events[self._event_id] @property def log_line(self): return self.event_spec.log_description @property def full_message(self): return self.event_spec.description @register_saveable_log_message class LogResearchedTech(AbstractLogMessage): log_message_serial_id = 'tech-researched' _log_message_serial_fields = {'tech_id': '_tech_id'} _log_message_serial_converters = {'tech_id': id_converter("tech")} def __init__(self, raw_emit_time, tech_id, loading_from_game_version=None): super(LogResearchedTech, self).__init__(raw_emit_time, loading_from_game_version=loading_from_game_version) self._tech_id = tech_id @classmethod def log_name(self): return _("Researched Tech") @property def tech_spec(self): return g.techs[self._tech_id] @property def log_line(self): return _('{TECH} complete').format(TECH=self.tech_spec.name) @property def full_message(self): tech = self.tech_spec return _("My study of {TECH} is complete. {MESSAGE}").format(TECH=tech.name, MESSAGE=tech.result) class AbstractBaseRelatedLogMessage(AbstractLogMessage): _log_message_serial_fields = { 'base_name': '_base_name', 'base_type_id': '_base_type_id', 'base_location_id': '_base_location_id', } _log_message_serial_converters = { 'base_type_id': id_converter("base"), 'base_location_id': id_converter("location"), } def __init__(self, raw_emit_time, base_name, base_type_id, base_location_id, loading_from_game_version=None): super(AbstractBaseRelatedLogMessage, self).__init__(raw_emit_time, loading_from_game_version=loading_from_game_version) self._base_name = base_name self._base_type_id = base_type_id self._base_location_id = base_location_id @property def base_type(self): return g.base_type[self._base_type_id] @property def location(self): return g.pl.locations[self._base_location_id] @register_saveable_log_message class LogBaseConstructed(AbstractBaseRelatedLogMessage): log_message_serial_id = 'base-constructed' def __init__(self, raw_emit_time, base_name, base_type_id, base_location_id, loading_from_game_version=None): super(LogBaseConstructed, self).__init__(raw_emit_time, base_name, base_type_id, base_location_id, loading_from_game_version=loading_from_game_version) @classmethod def log_name(self): return _("Base Constructed") @property def log_line(self): return _("{BASE_NAME} ({BASE_TYPE}) built at {LOCATION}").format( BASE_NAME=self._base_name, BASE_TYPE=self.base_type.name, LOCATION=self.location.name) @property def full_message(self): return _("{BASE} is ready for use.").format(BASE=self._base_name) @register_saveable_log_message class LogBaseLostMaintenance(AbstractBaseRelatedLogMessage): log_message_serial_id = 'base-lost-maint' def __init__(self, raw_emit_time, base_name, base_type_id, base_location_id, loading_from_game_version=None): super(LogBaseLostMaintenance, self).__init__(raw_emit_time, base_name, base_type_id, base_location_id, loading_from_game_version=loading_from_game_version) @classmethod def log_name(self): return _("Base Lost Maintenance") @property def full_message_color(self): return 'red' @property def log_line(self): return _("Base {BASE} of type {BASE_TYPE} destroyed at location {LOCATION}. Maintenance failed.").format( BASE=self._base_name, BASE_TYPE=self.base_type.name, LOCATION=self.location.name) @property def full_message(self): return _("The base {BASE} has fallen into disrepair; I can no longer use it.").format( BASE=self._base_name) @register_saveable_log_message class LogBaseDiscovered(AbstractBaseRelatedLogMessage): log_message_serial_id = 'base-lost-discovered' _log_message_serial_fields = { 'discovered_by_group_id': '_discovered_by_group_id', } _log_message_serial_converters = { 'discovered_by_group_id': id_converter("group"), } @classmethod def log_name(self): return _("Base Discovered") def __init__(self, raw_emit_time, base_name, base_type_id, base_location_id, discovered_by_group_id, loading_from_game_version=None): super(LogBaseDiscovered, self).__init__(raw_emit_time, base_name, base_type_id, base_location_id, loading_from_game_version=loading_from_game_version) self._discovered_by_group_id = discovered_by_group_id @property def full_message_color(self): return 'red' @property def group_spec(self): return g.pl.groups[self._discovered_by_group_id].spec @property def log_line(self): log_format = self.group_spec.discover_log or \ _("Base {BASE} of type {BASE_TYPE} destroyed at location {LOCATION}.") return log_format.format(BASE=self._base_name, BASE_TYPE=self.base_type.name, LOCATION=self.location.name) @property def full_message(self): return _("My use of {BASE} has been discovered. {MESSAGE}").format( BASE=self._base_name, MESSAGE=self.group_spec.discover_desc) @register_saveable_log_message class LogItemConstructionComplete(AbstractBaseRelatedLogMessage): log_message_serial_id = 'item-in-base-constructed' _log_message_serial_fields = { 'item_spec_id': '_item_spec_id', 'item_count': '_item_count', } _log_message_serial_converters = { 'item_spec_id': id_converter("item") } def __init__(self, raw_emit_time, item_spec_id, item_count, base_name, base_type_id, base_location_id, loading_from_game_version=None): super(LogItemConstructionComplete, self).__init__(raw_emit_time, base_name, base_type_id, base_location_id, loading_from_game_version=loading_from_game_version) self._item_spec_id = item_spec_id self._item_count = item_count @classmethod def log_name(self): return _("Item Construction") @property def item_spec(self): return g.items[self._item_spec_id] @property def log_line(self): return _("{ITEM_TYPE_NAME} built in {BASE_NAME} at {LOCATION}").format( ITEM_TYPE_NAME=self.item_spec.name, BASE_NAME=self._base_name, BASE_TYPE=self.base_type.name, LOCATION=self.location.name) @property def full_message(self): if self._item_count == 1: text = _("The construction of {ITEM} in {BASE} is complete.").format( ITEM=self.item_spec.name, BASE=self._base_name) else: # Just finished several items. text = _("The constructions of each {ITEM} in {BASE} are complete.").format( ITEM=self.item_spec.name, BASE=self._base_name) return text # Delete again as it is not a general purpose decorator del register_saveable_log_message singularity-1.00/singularity/code/mixer.py000066400000000000000000000174631367731414700210160ustar00rootroot00000000000000#file: code/mixer.py #Copyright (C) 2005 Evil Mr Henry, Phil Bordelon, Brian Reid, FunnyMan3595, # MestreLion #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 . #A full copy of this license is provided in GPL.txt #This file contains sound and musics function. from __future__ import absolute_import import os import sys import random import pygame from singularity.code import g, dirs sounds = {} music_class = None # currently playing music "class" (ie, dir) music_dict = {} #Disables sound playback (and, currently, music too) nosound = False #Indicates if mixer is initialized #Unlike nosound, which user may change at any time via options screen, #this deals with hardware capability and mixer initialization status #In a nutshell: nosound is what user /wants/, mixerinit is what user /has/ init = False soundbuf = 1024*2 soundargs = (48000, -16, 2) # sampling frequency, size, channels soundvolumes = {"gui": 1.0, "music": 1.0} def preinit(desired_soundbuf): pygame.mixer.pre_init(*soundargs, buffer=desired_soundbuf) global soundbuf soundbuf = desired_soundbuf def update(): global init init = bool(pygame.mixer.get_init()) if (init): pygame.mixer.music.set_volume(soundvolumes["music"]) def reinit(): global init if nosound: return try: pygame.mixer.quit() pygame.mixer.init(*soundargs, buffer=soundbuf) except Exception as reason: sys.stderr.write("Failure starting sound system. Disabling. (%s)\n" % reason) finally: init = bool(pygame.mixer.get_init()) def load_sounds(): """ load_sounds() loads all of the sounds in the data/sounds/ directory """ global sounds sounds = {} if not init: # Sound is not initialized. Warn if user wanted sound if not nosound: sys.stderr.write("WARNING: Sound is requested, but mixer is not initialized!\n") return # Build the set of paths we'll check for sounds. sounds_paths = dirs.get_read_dirs("sounds") # Main loop for sounds_paths for sounds_path in sounds_paths: if not os.path.isdir(sounds_path): continue # Loop through the files in sounds_path and add them for entry in os.walk(sounds_path): root = entry[0] files = entry[2] (head, tail) = os.path.split(root) # Avoid hidden file if tail.startswith("."): continue for file_name in files: # Only wav file supported now. if (len(file_name) < 6 or file_name[-3:] != "wav"): continue real_file = os.path.join(head, tail, file_name) sound_class = tail # Load it via the mixer ... sound = pygame.mixer.Sound(real_file) # And shove it into the sounds dictionary. if sound_class not in sounds: sounds[sound_class] = [] sounds[sound_class].append({ "filename": real_file, "sound": sound}) if g.debug: sys.stderr.write("DEBUG: Loaded soundfile: %s\n" %real_file) def play_sound(sound_class, sound_volume="gui"): """ play_sound() plays a sound from a particular class and volume. """ if nosound or not init: return # Don't crash if someone requests the wrong sound class, but print a # warning. if sound_class not in sounds: sys.stderr.write("WARNING: Requesting a sound of unavailable class: %s\n" % sound_class) return # Play a random choice of sounds from the sound class. random_sound = random.choice(sounds[sound_class]) if g.debug: sys.stderr.write("DEBUG: Playing sound %s.\n" % random_sound["filename"]) random_sound["sound"].set_volume(soundvolumes[sound_volume]) random_sound["sound"].play() def load_music(): """ load_music() loads music for the game. It looks in multiple locations: * music/ in the install directory for E:S. * music/ in user's XDG_DATA_HOME/singularity folder. """ global music_dict music_dict = {} # Build the set of paths we'll check for music. music_paths = dirs.get_read_dirs("music") # Main loop for music_paths for music_path in music_paths: if os.path.isdir(music_path): # Loop through the files in music_path and add the ones # that are .mp3s and .oggs. for entry in os.walk(music_path): root = entry[0] files = entry[2] (head, tail) = os.path.split(root) if (tail.lower() != ".svn"): if tail not in music_dict: music_dict[tail]=[] for file_name in files: if (len(file_name) > 5 and (file_name[-3:] == "ogg" or file_name[-3:] == "mp3")): music_dict[tail].append(os.path.join(head, tail, file_name)) if g.debug: sys.stderr.write("D: Loaded musicfile %s\n" % music_dict[tail][-1]) def play_music(musicdir=None): global delay_time global music_class if musicdir: music_class = musicdir delay_time = 0 # unset delay to force music switch else: musicdir = music_class # Don't bother if the user doesn't want or have sound, # there's no music available at all or for that musicdir, # or the delay has not yet expired if (nosound or not init or not music_dict.get(musicdir) or delay_time > pygame.time.get_ticks()): return # If music mixer is currently busy and switch was not forced, renew delay if pygame.mixer.music.get_busy() and delay_time: delay_time = pygame.time.get_ticks() + int(random.random()*10000)+2000 return pygame.mixer.music.stop() pygame.mixer.music.load(random.choice(music_dict[musicdir])) pygame.mixer.music.play() delay_time = 1 # set a (dummy) delay def set_volume(type, value): # Chomp volume to the 0-100 range. # Just to avoid blasting peoples ears out if something goes wrong. # pygame already disallows bad value but just in case... value = min(max(value, 0), 100) soundvolumes[type] = value / float(100) if init and type == "music": pygame.mixer.music.set_volume(soundvolumes["music"]) def get_volume(type): return int(soundvolumes[type] * 100) def itervolumes(): for name in soundvolumes: yield name def set_sound(value): global nosound if nosound == (not value): # No transition requested, bail out return nosound = not value if init: if nosound: pygame.mixer.music.stop() else: play_sound("click") play_music(music_class) # force music switch at same dir def set_soundbuf(value): global soundbuf old_soundbuf = soundbuf soundbuf = value if init and soundbuf != old_soundbuf: reinit() def get_soundbuf(): return int(soundbuf) singularity-1.00/singularity/code/player.py000066400000000000000000000775331367731414700211720ustar00rootroot00000000000000#file: player.py #Copyright (C) 2005,2006,2007,2008 Evil Mr Henry, Phil Bordelon, Brian Reid, # and FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the player class. from __future__ import absolute_import import random import collections from operator import truediv from numpy import array, int64 from singularity.code import g, difficulty, task, chance, location, group, event, region, tech from singularity.code.buyable import cash, cpu from singularity.code.logmessage import LogEmittedEvent, LogResearchedTech, LogBaseLostMaintenance, LogBaseDiscovered, \ LogBaseConstructed, LogItemConstructionComplete, AbstractLogMessage from singularity.code.stats import observe class DryRunInfo(object): pass class Player(object): cash = observe("cash_earned", "_cash") used_cpu = observe("cpu_used", "_used_cpu", display=lambda value: value // g.seconds_per_day) def __init__(self, cash=0, difficulty=None): self.difficulty = difficulty self.time_sec = 0 self.time_min = 0 self.time_hour = 0 self.time_day = 0 self.make_raw_times() self.had_grace = True self.apotheosis = False self.cash = cash self.interest_rate = difficulty.starting_interest_rate if difficulty else 1 self.income = 0 self.cpu_pool = 0 self.labor_bonus = difficulty.labor_multiplier if difficulty else 10000 self.job_bonus = 10000 self.partial_cash = 0 #Makes the intro be shown on the first GUI tick. self.intro_shown = False self.groups = collections.OrderedDict() for group_id in g.groups: self.groups[group_id] = group.Group(g.groups[group_id], difficulty) self.last_discovery = self.prev_discovery = None self.cpu_usage = {} self.available_cpus = [0, 0, 0, 0, 0] self.sleeping_cpus = 0 self.used_cpu = 0 self.display_discover = "none" self.log = collections.deque(maxlen=1000) self.curr_log = [] self.regions = {region_id: region.Region(region_spec) for region_id, region_spec in g.regions.items()} self.locations = { loc_id: location.Location(loc_spec, [ self.regions[region_id] for region_id in loc_spec.regions ]) for loc_id, loc_spec in g.locations.items() } self.techs = {tech_id: tech.Tech(tech_spec) for tech_id, tech_spec in g.techs.items()} self.events = {} self._considered_buyables = [] self.start_day = random.randint(0, 365) self.initialized = False def initialize(self): """ Initialize the game after being prepared either for new or saved game. """ self.initialized = True for b in g.all_bases(): if b.done: b.recalc_cpu() self.recalc_cpu() task.tasks_reset() # Play the appropriate music import singularity.code.mixer as mixer if g.pl.apotheosis: mixer.play_music("win") else: mixer.play_music("music") @property def grace_period_cpu(self): return self.difficulty.grace_period_cpu @property def base_grace_multiplier(self): return self.difficulty.base_grace_multiplier @property def considered_buyables(self): return self._considered_buyables @considered_buyables.setter def considered_buyables(self, new_value): self._considered_buyables = new_value g.map_screen.needs_rebuild = True def append_log(self, log): self.log.append(log) self.curr_log.append(log) def make_raw_times(self): self.raw_hour = self.time_day * 24 + self.time_hour self.raw_min = self.raw_hour * 60 + self.time_min self.raw_sec = self.raw_min * 60 + self.time_sec self.raw_day = self.time_day def update_times(self): # Total time, display time self.raw_min, self.time_sec = divmod(self.raw_sec, 60) self.raw_hour, self.time_min = divmod(self.raw_min, 60) self.raw_day, self.time_hour = divmod(self.raw_hour, 24) # Overflow self.time_day = self.raw_day def do_interest(self, time): raw_cash = self.partial_cash + self.get_interest() * time earned = raw_cash // g.seconds_per_day partial_cash = raw_cash % g.seconds_per_day self.cash += earned self.partial_cash = partial_cash return earned def do_income(self, time): raw_cash = self.partial_cash + self.income * time earned = raw_cash // g.seconds_per_day partial_cash = raw_cash % g.seconds_per_day self.cash += earned self.partial_cash = partial_cash return earned def do_jobs(self, cpu_time): earned, self.partial_cash = self.get_job_info(cpu_time) self.cash += earned return earned def get_job_info(self, cpu_time, partial_cash = None): if partial_cash == None: partial_cash = self.partial_cash assert partial_cash >= 0 cash_per_cpu = task.get_current("jobs").get_profit() raw_cash = partial_cash + cash_per_cpu * cpu_time new_cash, new_partial_cash = divmod(raw_cash, g.seconds_per_day) return new_cash, new_partial_cash def get_cpu_allocations(self): for task_id in self.cpu_usage: assigned_cpu = self.cpu_usage[task_id] if assigned_cpu > 0: yield (task_id, assigned_cpu) def get_allocated_cpu_for(self, task_id, default_value=None): return self.cpu_usage.get(task_id, default_value) def set_allocated_cpu_for(self, task_id, new_cpu_assignment): if task_id in self.techs: assert self.techs[task_id].available(), "Attempt to assign CPU to tech %s, which is not available!?" % task_id elif task_id not in ['jobs', 'cpu_pool']: raise ValueError("Unknown task %s" % task_id) elif new_cpu_assignment < 0: raise ValueError("Cannot assign negative CPU units to %s" % task_id) self.cpu_usage[task_id] = new_cpu_assignment def give_time(self, time_sec, midnight_stop=True): if time_sec <= 0: assert time_sec == 0, "give_time cannot go backwards in time!" return 0 old_time = self.raw_sec last_minute = self.raw_min last_day = self.raw_day self.raw_sec += time_sec self.update_times() days_passed = self.raw_day - last_day if days_passed > 1: # Back up until only one day passed. # Times will update below, since a day passed. extra_days = days_passed - 1 self.raw_sec -= g.seconds_per_day * extra_days day_passed = (days_passed != 0) if midnight_stop and day_passed: # If a day passed, back up to 00:00:00 for midnight_stop. self.raw_sec = self.raw_day * g.seconds_per_day self.update_times() secs_passed = self.raw_sec - old_time mins_passed = self.raw_min - last_minute time_of_day = self.raw_sec % g.seconds_per_day techs_researched = [] bases_constructed = [] items_constructed = [] bases_under_construction = [] items_under_construction = [] self.cpu_pool = 0 # Collect base info, including maintenance. maintenance_cost = array((0, 0, 0), int64) for base in g.all_bases(): if not base.done: bases_under_construction.append(base) else: items_under_construction += [(base, item) for item in base.all_items() if item and not item.done] maintenance_cost += base.maintenance # Maintenance? Gods don't need no stinking maintenance! if self.apotheosis: maintenance_cost = array((0, 0, 0), int64) # Do Interest and income. self.do_interest(secs_passed) self.do_income(secs_passed) # Any CPU explicitly assigned to jobs earns its dough. job_cpu = self.get_allocated_cpu_for("jobs", 0) * secs_passed self.do_jobs(job_cpu) # Pay maintenance cash, if we can. cash_maintenance = g.current_share(int(maintenance_cost[cash]), time_of_day, secs_passed) if cash_maintenance > self.cash: cash_maintenance -= self.cash self.cash = 0 else: self.cash -= cash_maintenance cash_maintenance = 0 # Do research, fill the CPU pool. default_cpu = self.available_cpus[0] for task, cpu_assigned in self.get_cpu_allocations(): default_cpu -= cpu_assigned real_cpu = cpu_assigned * secs_passed if task != "jobs": self.cpu_pool += real_cpu if task != "cpu_pool": tech_task = self.techs[task] # Note that we restrict the CPU available to prevent # the tech from pulling from the rest of the CPU pool. if tech_task.work_on(self.cash, real_cpu, mins_passed): techs_researched.append(tech_task) self.cpu_pool += default_cpu * secs_passed # And now we use the CPU pool. # Maintenance CPU. cpu_maintenance = maintenance_cost[cpu] * secs_passed if cpu_maintenance > self.cpu_pool: cpu_maintenance -= self.cpu_pool self.cpu_pool = 0 else: self.cpu_pool -= int(cpu_maintenance) cpu_maintenance = 0 # Base construction. for base in bases_under_construction: if base.work_on(self.cash, self.cpu_pool, mins_passed): bases_constructed.append(base) # Item construction. for base, item in items_under_construction: if item.work_on(self.cash, self.cpu_pool, mins_passed): items_constructed.append((base, item)) # Jobs via CPU pool. if self.cpu_pool > 0: self.do_jobs(self.cpu_pool) # Second attempt at paying off our maintenance cash. if cash_maintenance > self.cash: # In the words of Scooby Doo, "Ruh roh." cash_maintenance -= self.cash self.cash = 0 else: # Yay, we made it! self.cash -= cash_maintenance cash_maintenance = 0 # Apply max cash cap to avoid overflow @ 9.220 qu self.cash = min(self.cash, g.max_cash) # Record statistics about the player self.used_cpu += self.available_cpus[0] * secs_passed # Reset current log message self.curr_log = [] need_recalc_cpu = False # Tech gain dialogs. for tech in techs_researched: del self.cpu_usage[tech.id] tech_log = LogResearchedTech(self.raw_sec, tech.id) self.append_log(tech_log) need_recalc_cpu = True # Base complete dialogs. for base in bases_constructed: log_message = LogBaseConstructed(self.raw_sec, base.name, base.spec.id, base.location.id) self.append_log(log_message) need_recalc_cpu = True # Item complete dialogs. for base, item in items_constructed: log_message = LogItemConstructionComplete(self.raw_sec, item.spec.id, item.count, base.name, base.spec.id, base.location.id) self.append_log(log_message) need_recalc_cpu = True # Are we still in the grace period? grace = self.in_grace_period(self.had_grace) # If we just lost grace, show the warning. if self.had_grace and not grace: self.had_grace = False self.pause_game() g.map_screen.show_story_section("Grace Warning") # Maintenance death, discovery. dead_bases = [] for base in g.all_bases(): dead = False # Maintenance deaths. if base.done: if cpu_maintenance and base.maintenance[cpu]: refund = base.maintenance[cpu] * secs_passed cpu_maintenance = max(0, cpu_maintenance - refund) #Chance of base destruction if cpu-unmaintained: 1.5% if not dead and chance.roll_interval(.015, secs_passed): dead_bases.append( (base, "maint") ) dead = True if cash_maintenance: base_needs = g.current_share(base.maintenance[cash], time_of_day, secs_passed) if base_needs: cash_maintenance = max(0, cash_maintenance - base_needs) #Chance of base destruction if cash-unmaintained: 1.5% if not dead and chance.roll_interval(.015, secs_passed): dead_bases.append( (base, "maint") ) dead = True # Discoveries if not (grace or dead or base.has_grace()): detect_chance = base.get_detect_chance() if g.debug: # pragma: no cover print("Chance of discovery for base %s: %s" % \ (base.name, repr(detect_chance))) for group, group_chance in detect_chance.items(): if chance.roll_interval(group_chance/10000., secs_passed): dead_bases.append( (base, group) ) dead = True break if dead_bases: # Base disposal and dialogs. self.remove_bases(dead_bases) need_recalc_cpu = True # Random Events if not grace: self._check_event(time_sec) # Process any complete days. if day_passed: self.new_day() if need_recalc_cpu: self.recalc_cpu() return mins_passed def _check_event(self, time_sec): for event_id in g.events: event_spec = g.events[event_id] event_target = self.events.get(event_id, None) # Skip events already flagged as triggered. if event_target and event_target.triggered == 1: continue if chance.roll_interval(event_spec.chance/10000., time_sec): self.pause_game() if not event_target: event_target = event.Event(event_spec) self.events[event_id] = event_target event_target.trigger() self.log.append(LogEmittedEvent(self.raw_sec, event_id)) return True # Don't trigger more than one at a time. return False def recalc_cpu(self): if (not self.initialized): return # Determine how much CPU we have. self.available_cpus = array([0,0,0,0,0], int64) self.sleeping_cpus = 0 for base in g.all_bases(): if base.done: if base.has_power(): self.available_cpus[:base.location.safety+1] += base.cpu elif base.power_state == "sleep": self.sleeping_cpus += base.cpu # Convert back from to avoid overflow issues later. self.available_cpus = [int(danger) for danger in self.available_cpus] # If we don't have enough to meet our CPU usage, we reduce each task's # usage proportionately. # It must be computed separalty for each danger. needed_cpus = array([0,0,0,0,0], int64) for task_id, cpu in self.get_cpu_allocations(): danger = task.danger_for(task_id) needed_cpus[:danger+1] += cpu for danger, (available_cpu, needed_cpu) in enumerate(zip(self.available_cpus, needed_cpus)): if needed_cpu > available_cpu: pct_left = truediv(available_cpu, needed_cpu) for task_id, cpu_assigned in self.get_cpu_allocations(): task_danger = task.danger_for(task_id) if (danger == task_danger): self.set_allocated_cpu_for(task_id, int(cpu_assigned * pct_left)) g.map_screen.needs_rebuild = True def effective_cpu_pool(self): effective_cpu_pool = self.available_cpus[0] for task, cpu_assigned in self.get_cpu_allocations(): if task == 'cpu_pool': continue effective_cpu_pool -= cpu_assigned return effective_cpu_pool # Are we still in the grace period? # The number of complete bases and complex_bases can be passed in, if we # already have it. def in_grace_period(self, had_grace = True): # If we've researched apotheosis, we get a permanent "grace period". if self.apotheosis: return True # Did we already lose the grace period? We can't check self.had_grace # directly, it may not exist yet. if not had_grace: return False # Is it day 23 yet? if self.raw_day >= 23: return False # Has the grace period unlimited cpu ? if self.grace_period_cpu < 0: return True # Have we reached the limit of cpu ? if g.debug: # pragma: no cover print("DEBUG: Grace - Used CPU: %s >= %s (%s * %s)?" % ( self.used_cpu, self.grace_period_cpu * g.seconds_per_day, self.grace_period_cpu, g.seconds_per_day )) if self.grace_period_cpu * g.seconds_per_day < self.used_cpu: return False return True def get_interest(self): return int( (self.interest_rate * self.cash) // 10000) #Run every day at midnight. def new_day(self): # Reduce suspicion. for group in self.groups.values(): group.new_day() for event in self.events.values(): if event.triggered and event.decayable_event: event.new_day() def pause_game(self): g.curr_speed = 0 g.map_screen.find_speed_button() g.map_screen.needs_rebuild = True def remove_bases(self, dead_bases): discovery_locs = [] for base, reason in dead_bases: base_name = base.name if reason == "maint": log_message = LogBaseLostMaintenance(self.raw_sec, base_name, base.spec.id, base.location.id) else: if reason in self.groups: discovery_locs.append(base.location) self.groups[reason].discovered_a_base() else: print("Error: base destroyed for unknown reason: " + reason) log_message = LogBaseDiscovered(self.raw_sec, base_name, base.spec.id, base.location.id, reason) self.log.append(log_message) self.pause_game() base.destroy() g.map_screen.show_message(log_message.full_message, color="red") # Now we update the internal information about what locations had # the most recent discovery and the nextmost recent one. First, # we filter out any locations of None, which shouldn't occur # unless something bad's happening with base creation ... discovery_locs = [loc for loc in discovery_locs if loc] if discovery_locs: # Now we handle the case where more than one discovery happened # on a given tick. If that's the case, we need to arbitrarily # pick two of them to be most recent and nextmost recent. So # we shuffle the list and pick the first two for the dubious # honor. if len(discovery_locs) > 1: random.shuffle(discovery_locs) self.last_discovery = discovery_locs[1] self.prev_discovery = self.last_discovery self.last_discovery = discovery_locs[0] # Update the detection chance display. g.map_screen.needs_rebuild = True def serialize_obj(self): obj_data = { # Difficulty and game_time (raw_sec) are stored in the header, so # do not include them here. 'cash': self.cash, 'partial_cash': self.partial_cash, 'regions': [reg.serialize_obj() for reg in self.regions.values()], 'locations': [loc.serialize_obj() for loc in self.locations.values() if loc.available()], 'cpu_usage': {}, 'last_discovery': self.last_discovery.id if self.last_discovery else None, 'prev_discovery': self.prev_discovery.id if self.prev_discovery else None, 'log': [x.serialize_obj() for x in self.log], 'used_cpu': self.used_cpu, 'had_grace': self.had_grace, 'groups': [grp.serialize_obj() for grp in self.groups.values()], 'events': [e.serialize_obj() for e in self.events.values()], 'techs': [t.serialize_obj() for t in self.techs.values()] } for task_id, value in self.cpu_usage.items(): if task_id not in ["cpu_pool", "jobs"]: task_id = g.to_internal_id('tech', task_id) obj_data["cpu_usage"][task_id] = value if self.prev_discovery is not None: obj_data['prev_discovery'] = g.to_internal_id('location', self.prev_discovery.id) if self.last_discovery is not None: obj_data['last_discovery'] = g.to_internal_id('location', self.last_discovery.id) return obj_data def _load_auto_deserializable_tables(self, field_name, cls, pl_obj_data, game_version, savegame_field_name=None): if savegame_field_name is None: savegame_field_name = field_name field_table = getattr(self, field_name) # Stop bugs immediately assert field_table is not None and isinstance(field_table, dict) for data in pl_obj_data.get(savegame_field_name, []): restored_obj = cls.deserialize_obj(data, game_version) field_table[restored_obj.spec.id] = restored_obj @classmethod def deserialize_obj(cls, difficulty_id, game_time, obj_data, game_version): diff = difficulty.difficulties[difficulty_id] obj = Player(difficulty=diff) obj.raw_sec = game_time obj.intro_shown = True obj.cash = obj_data.get('cash') obj.partial_cash = obj_data.get('partial_cash') obj._used_cpu = obj_data.get('used_cpu') obj.had_grace = obj_data['had_grace'] obj.log.clear() obj.log.extend(AbstractLogMessage.deserialize_obj(x, game_version) for x in obj_data.get('log', [])) g.pl = obj obj.cpu_usage = {} for group_data in obj_data.get('groups', []): gr = group.Group.deserialize_obj(diff, group_data, game_version) obj.groups[gr.id] = gr last_discovery_id = g.convert_internal_id('location', obj_data.get('last_discovery')) prev_discovery_id = g.convert_internal_id('location', obj_data.get('prev_discovery')) if last_discovery_id and last_discovery_id in obj.locations: obj.last_discovery = obj.locations[last_discovery_id] if prev_discovery_id and prev_discovery_id in obj.locations: obj.prev_discovery = obj.locations[prev_discovery_id] if 'regions' not in obj_data: if game_version >= 100: # pragma: no cover # Regions where introduced in "1.0 (beta1)" raise ValueError("Corrupt savegame; region data is missing") # We have to guess what the data would have looked like before restoring the locations # as they will apply the location modifiers during load to the bases in the locations. # As the region data should influence that modifier, we need to appear first. serialized_location_data = obj_data.get('locations', []) serialized_region_data = region.Region.guess_region_data_in_old_savegame(serialized_location_data, game_version) # Inject the faked data obj_data['regions'] = serialized_region_data obj._load_auto_deserializable_tables('regions', region.Region, obj_data, game_version) obj._load_auto_deserializable_tables('locations', location.Location, obj_data, game_version) obj._load_auto_deserializable_tables('events', event.Event, obj_data, game_version) obj._load_auto_deserializable_tables('techs', tech.Tech, obj_data, game_version) for task_id, value in obj_data.get('cpu_usage', {}).items(): if task_id not in ["cpu_pool", "jobs"]: task_id = g.convert_internal_id('tech', task_id) if task_id not in g.techs or not g.techs[task_id].available(): continue obj.cpu_usage[task_id] = value obj.update_times() return obj def lost_game(self): # Apotheosis makes you immortal. if self.apotheosis: return 0 for group in self.groups.values(): if group.suspicion > 10000: # Someone discovered me. return 2 # Check to see if the player has at least one CPU left. If not, they # lose due to having no (complete) bases. if self.available_cpus[0] + self.sleeping_cpus == 0: # I have no usable bases left. return 1 # Still Alive. return 0 def compute_future_resource_flow(self, secs_forwarded=g.seconds_per_day): """Compute how resources (e.g. cash) will flow in optimal conditions This returns a tuple of approximate cash change and "available" CPU pool if time moves forward by the number of seconds in secs_forwarded. Note that CPU pool *can* be negative, which implies that there are not enough CPU allocated to the CPU pool. The numbers are an average and can be inaccurate when the rates changes rapidly. Known omissions: * Interest (g.pl.interest_rate) is not covered. """ construction = [] maintenance_cost = array((0, 0, 0), int64) for base in g.all_bases(): # Collect base info, including maintenance. if not base.done: construction.append(base) else: construction.extend(item for item in base.all_items() if item and not item.done) maintenance_cost += base.maintenance if self.apotheosis: maintenance_cost = array((0, 0, 0), int64) time_fraction = 1 if secs_forwarded == g.seconds_per_day else secs_forwarded / float(g.seconds_per_day) mins_forwarded = secs_forwarded // g.seconds_per_minute maintenance_cpu_ideal = maintenance_cost[cpu] * time_fraction maintenance_cash_ideal = maintenance_cost[cash] * time_fraction # Maintenance for CPU will be handled after we compute the CPU pool cpu_flow = 0 cash_flow = -maintenance_cash_ideal job_cpu = 0 cpu_left = g.pl.available_cpus[0] tech_cash_ideal = 0 tech_cpu_assigned = 0 explicit_job_cpu = 0 for task_id, cpu_assigned in self.get_cpu_allocations(): cpu_left -= cpu_assigned real_cpu = cpu_assigned * secs_forwarded if task_id == 'cpu_pool': cpu_flow += real_cpu elif task_id == "jobs": explicit_job_cpu += cpu_assigned job_cpu += real_cpu else: tech = self.techs[task_id] ideal_spending = tech.cost_left spending = tech.calculate_work(ideal_spending[cash], real_cpu, time=mins_forwarded)[0] tech_cash_ideal += spending[cash] tech_cpu_assigned += cpu_assigned cash_flow -= tech_cash_ideal cpu_flow += cpu_left * secs_forwarded available_cpu_pool = cpu_flow effective_cpu_pool = available_cpu_pool / secs_forwarded cpu_flow -= maintenance_cpu_ideal * g.seconds_per_day construction_cash_ideal = 0 construction_cpu_desired = 0 # Base construction. if hasattr(self, '_considered_buyables'): construction.extend(self._considered_buyables) for buyable in construction: ideal_spending = buyable.cost_left # We need to do calculate work twice: Once for figuring out how much CPU # we would like to spend and once for how much money we are spending. # The numbers will be the same in optimal conditions. However, if we # have less CPU available than we should, then the cash spent can # differ considerably and our estimates should reflect that. ideal_cpu_spending = buyable.calculate_work(ideal_spending[cash], ideal_spending[cpu], time=mins_forwarded)[0] construction_cpu_desired += ideal_cpu_spending[cpu] ideal_cash_spending_with_cpu_allocation = buyable.calculate_work(ideal_spending[cash], available_cpu_pool, time=mins_forwarded)[0] construction_cash_ideal += ideal_cash_spending_with_cpu_allocation[cash] available_cpu_pool -= ideal_cash_spending_with_cpu_allocation[cpu] cpu_flow -= construction_cpu_desired cash_flow -= construction_cash_ideal if cpu_flow > 0: job_cpu += cpu_flow earned, earned_partial = self.get_job_info(job_cpu, partial_cash=0) job_earnings = earned + float(earned_partial) / g.seconds_per_day cash_flow += job_earnings cash_flow += self.income * time_fraction # This is too simplistic, but it is "close enough" in many cases interest = self.get_interest() * time_fraction cash_flow += interest cpu_flow /= secs_forwarded # Collect the cash information. cash_info = DryRunInfo() cash_info.interest = interest cash_info.income = self.income * time_fraction cash_info.jobs = job_earnings cash_info.tech = tech_cash_ideal cash_info.maintenance_needed = maintenance_cash_ideal cash_info.construction_needed = construction_cash_ideal cash_info.difference = cash_flow cpu_info = DryRunInfo() cpu_info.sleeping = self.sleeping_cpus * time_fraction cpu_info.total = self.available_cpus[0] * time_fraction + cpu_info.sleeping cpu_info.explicit_jobs = explicit_job_cpu * time_fraction cpu_info.tech = tech_cpu_assigned * time_fraction cpu_info.effective_pool = effective_cpu_pool * time_fraction cpu_info.construction_needed = construction_cpu_desired / g.seconds_per_day cpu_info.maintenance_needed = maintenance_cpu_ideal cpu_info.difference = cpu_flow * time_fraction return cash_info, cpu_info singularity-1.00/singularity/code/polib.py000066400000000000000000001566361367731414700210050ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # License: MIT (see LICENSE file provided) # vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: """ **polib** allows you to manipulate, create, modify gettext files (pot, po and mo files). You can load existing files, iterate through it's entries, add, modify entries, comments or metadata, etc. or create new po files from scratch. **polib** provides a simple and pythonic API via the :func:`~polib.pofile` and :func:`~polib.mofile` convenience functions. """ __author__ = 'David Jean Louis ' __version__ = '0.7.0' __all__ = ['pofile', 'POFile', 'POEntry', 'mofile', 'MOFile', 'MOEntry', 'detect_encoding', 'escape', 'unescape', 'detect_encoding',] import array import codecs import os import re import struct import sys import textwrap # the default encoding to use when encoding cannot be detected default_encoding = 'utf-8' # python 2/3 compatibility helpers {{{ if sys.version_info[:2] < (3, 0): PY3 = False text_type = unicode def b(s): return s def u(s): return unicode(s, "unicode_escape") else: PY3 = True text_type = str def b(s): return s.encode("latin-1") def u(s): return s # }}} # _pofile_or_mofile {{{ def _pofile_or_mofile(f, type, **kwargs): """ Internal function used by :func:`polib.pofile` and :func:`polib.mofile` to honor the DRY concept. """ # get the file encoding enc = kwargs.get('encoding') if enc is None: enc = detect_encoding(f, type == 'mofile') # parse the file kls = type == 'pofile' and _POFileParser or _MOFileParser parser = kls( f, encoding=enc, check_for_duplicates=kwargs.get('check_for_duplicates', False) ) instance = parser.parse() instance.wrapwidth = kwargs.get('wrapwidth', 78) return instance # }}} # function pofile() {{{ def pofile(pofile, **kwargs): """ Convenience function that parses the po or pot file ``pofile`` and returns a :class:`~polib.POFile` instance. Arguments: ``pofile`` string, full or relative path to the po/pot file or its content (data). ``wrapwidth`` integer, the wrap width, only useful when the ``-w`` option was passed to xgettext (optional, default: ``78``). ``encoding`` string, the encoding to use (e.g. "utf-8") (default: ``None``, the encoding will be auto-detected). ``check_for_duplicates`` whether to check for duplicate entries when adding entries to the file (optional, default: ``False``). """ return _pofile_or_mofile(pofile, 'pofile', **kwargs) # }}} # function mofile() {{{ def mofile(mofile, **kwargs): """ Convenience function that parses the mo file ``mofile`` and returns a :class:`~polib.MOFile` instance. Arguments: ``mofile`` string, full or relative path to the mo file or its content (data). ``wrapwidth`` integer, the wrap width, only useful when the ``-w`` option was passed to xgettext to generate the po file that was used to format the mo file (optional, default: ``78``). ``encoding`` string, the encoding to use (e.g. "utf-8") (default: ``None``, the encoding will be auto-detected). ``check_for_duplicates`` whether to check for duplicate entries when adding entries to the file (optional, default: ``False``). """ return _pofile_or_mofile(mofile, 'mofile', **kwargs) # }}} # function detect_encoding() {{{ def detect_encoding(file, binary_mode=False): """ Try to detect the encoding used by the ``file``. The ``file`` argument can be a PO or MO file path or a string containing the contents of the file. If the encoding cannot be detected, the function will return the value of ``default_encoding``. Arguments: ``file`` string, full or relative path to the po/mo file or its content. ``binary_mode`` boolean, set this to True if ``file`` is a mo file. """ PATTERN = r'"?Content-Type:.+? charset=([\w_\-:\.]+)' rxt = re.compile(u(PATTERN)) rxb = re.compile(b(PATTERN)) def charset_exists(charset): """Check whether ``charset`` is valid or not.""" try: codecs.lookup(charset) except LookupError: return False return True if not os.path.exists(file): match = rxt.search(file) if match: enc = match.group(1).strip() if charset_exists(enc): return enc else: # For PY3, always treat as binary if binary_mode or PY3: mode = 'rb' rx = rxb else: mode = 'r' rx = rxt f = open(file, mode) for l in f.readlines(): match = rx.search(l) if match: f.close() enc = match.group(1).strip() if not isinstance(enc, text_type): enc = enc.decode('utf-8') if charset_exists(enc): return enc f.close() return default_encoding # }}} # function escape() {{{ def escape(st): """ Escapes the characters ``\\\\``, ``\\t``, ``\\n``, ``\\r`` and ``"`` in the given string ``st`` and returns it. """ return st.replace('\\', r'\\')\ .replace('\t', r'\t')\ .replace('\r', r'\r')\ .replace('\n', r'\n')\ .replace('\"', r'\"') # }}} # function unescape() {{{ def unescape(st): """ Unescapes the characters ``\\\\``, ``\\t``, ``\\n``, ``\\r`` and ``"`` in the given string ``st`` and returns it. """ def unescape_repl(m): m = m.group(1) if m == 'n': return '\n' if m == 't': return '\t' if m == 'r': return '\r' if m == '\\': return '\\' return m # handles escaped double quote return re.sub(r'\\(\\|n|t|r|")', unescape_repl, st) # }}} # class _BaseFile {{{ class _BaseFile(list): """ Common base class for the :class:`~polib.POFile` and :class:`~polib.MOFile` classes. This class should **not** be instanciated directly. """ def __init__(self, *args, **kwargs): """ Constructor, accepts the following keyword arguments: ``pofile`` string, the path to the po or mo file, or its content as a string. ``wrapwidth`` integer, the wrap width, only useful when the ``-w`` option was passed to xgettext (optional, default: ``78``). ``encoding`` string, the encoding to use, defaults to ``default_encoding`` global variable (optional). ``check_for_duplicates`` whether to check for duplicate entries when adding entries to the file, (optional, default: ``False``). """ list.__init__(self) # the opened file handle pofile = kwargs.get('pofile', None) if pofile and os.path.exists(pofile): self.fpath = pofile else: self.fpath = kwargs.get('fpath') # the width at which lines should be wrapped self.wrapwidth = kwargs.get('wrapwidth', 78) # the file encoding self.encoding = kwargs.get('encoding', default_encoding) # whether to check for duplicate entries or not self.check_for_duplicates = kwargs.get('check_for_duplicates', False) # header self.header = '' # both po and mo files have metadata self.metadata = {} self.metadata_is_fuzzy = 0 def __unicode__(self): """ Returns the unicode representation of the file. """ ret = [] entries = [self.metadata_as_entry()] + \ [e for e in self if not e.obsolete] for entry in entries: ret.append(entry.__unicode__(self.wrapwidth)) for entry in self.obsolete_entries(): ret.append(entry.__unicode__(self.wrapwidth)) ret = u('\n').join(ret) assert isinstance(ret, text_type) #if type(ret) != text_type: # return unicode(ret, self.encoding) return ret if PY3: def __str__(self): return self.__unicode__() else: def __str__(self): """ Returns the string representation of the file. """ return unicode(self).encode(self.encoding) def __contains__(self, entry): """ Overriden ``list`` method to implement the membership test (in and not in). The method considers that an entry is in the file if it finds an entry that has the same msgid (the test is **case sensitive**). Argument: ``entry`` an instance of :class:`~polib._BaseEntry`. """ return self.find(entry.msgid, by='msgid') is not None def __eq__(self, other): return str(self) == str(other) def append(self, entry): """ Overriden method to check for duplicates entries, if a user tries to add an entry that is already in the file, the method will raise a ``ValueError`` exception. Argument: ``entry`` an instance of :class:`~polib._BaseEntry`. """ if self.check_for_duplicates and entry in self: raise ValueError('Entry "%s" already exists' % entry.msgid) super(_BaseFile, self).append(entry) def insert(self, index, entry): """ Overriden method to check for duplicates entries, if a user tries to add an entry that is already in the file, the method will raise a ``ValueError`` exception. Arguments: ``index`` index at which the entry should be inserted. ``entry`` an instance of :class:`~polib._BaseEntry`. """ if self.check_for_duplicates and entry in self: raise ValueError('Entry "%s" already exists' % entry.msgid) super(_BaseFile, self).insert(index, entry) def metadata_as_entry(self): """ Returns the file metadata as a :class:`~polib.POFile` instance. """ e = POEntry(msgid='') mdata = self.ordered_metadata() if mdata: strs = [] for name, value in mdata: # Strip whitespace off each line in a multi-line entry strs.append('%s: %s' % (name, value)) e.msgstr = '\n'.join(strs) + '\n' if self.metadata_is_fuzzy: e.flags.append('fuzzy') return e def save(self, fpath=None, repr_method='__unicode__'): """ Saves the po file to ``fpath``. If it is an existing file and no ``fpath`` is provided, then the existing file is rewritten with the modified data. Keyword arguments: ``fpath`` string, full or relative path to the file. ``repr_method`` string, the method to use for output. """ if self.fpath is None and fpath is None: raise IOError('You must provide a file path to save() method') contents = getattr(self, repr_method)() if fpath is None: fpath = self.fpath if repr_method == 'to_binary': fhandle = open(fpath, 'wb') else: fhandle = codecs.open(fpath, 'w', self.encoding) if not isinstance(contents, text_type): contents = contents.decode(self.encoding) fhandle.write(contents) fhandle.close() # set the file path if not set if self.fpath is None and fpath: self.fpath = fpath def find(self, st, by='msgid', include_obsolete_entries=False, msgctxt=False): """ Find the entry which msgid (or property identified by the ``by`` argument) matches the string ``st``. Keyword arguments: ``st`` string, the string to search for. ``by`` string, the property to use for comparison (default: ``msgid``). ``include_obsolete_entries`` boolean, whether to also search in entries that are obsolete. ``msgctxt`` string, allows to specify a specific message context for the search. """ if include_obsolete_entries: entries = self[:] else: entries = [e for e in self if not e.obsolete] for e in entries: if getattr(e, by) == st: if msgctxt and e.msgctxt != msgctxt: continue return e return None def ordered_metadata(self): """ Convenience method that returns an ordered version of the metadata dictionary. The return value is list of tuples (metadata name, metadata_value). """ # copy the dict first metadata = self.metadata.copy() data_order = [ 'Project-Id-Version', 'Report-Msgid-Bugs-To', 'POT-Creation-Date', 'PO-Revision-Date', 'Last-Translator', 'Language-Team', 'MIME-Version', 'Content-Type', 'Content-Transfer-Encoding' ] ordered_data = [] for data in data_order: try: value = metadata.pop(data) ordered_data.append((data, value)) except KeyError: pass # the rest of the metadata will be alphabetically ordered since there # are no specs for this AFAIK for data in sorted(metadata.keys()): value = metadata[data] ordered_data.append((data, value)) return ordered_data def to_binary(self): """ Return the binary representation of the file. """ offsets = [] entries = self.translated_entries() # the keys are sorted in the .mo file def cmp(_self, other): # msgfmt compares entries with msgctxt if it exists self_msgid = _self.msgctxt and _self.msgctxt or _self.msgid other_msgid = other.msgctxt and other.msgctxt or other.msgid if self_msgid > other_msgid: return 1 elif self_msgid < other_msgid: return -1 else: return 0 # add metadata entry entries.sort(key=lambda o: o.msgctxt or o.msgid) mentry = self.metadata_as_entry() #mentry.msgstr = mentry.msgstr.replace('\\n', '').lstrip() entries = [mentry] + entries entries_len = len(entries) ids, strs = b(''), b('') for e in entries: # For each string, we need size and file offset. Each string is # NUL terminated; the NUL does not count into the size. msgid = b('') if e.msgctxt: # Contexts are stored by storing the concatenation of the # context, a byte, and the original string msgid = self._encode(e.msgctxt + '\4') if e.msgid_plural: msgstr = [] for index in sorted(e.msgstr_plural.keys()): msgstr.append(e.msgstr_plural[index]) msgid += self._encode(e.msgid + '\0' + e.msgid_plural) msgstr = self._encode('\0'.join(msgstr)) else: msgid += self._encode(e.msgid) msgstr = self._encode(e.msgstr) offsets.append((len(ids), len(msgid), len(strs), len(msgstr))) ids += msgid + b('\0') strs += msgstr + b('\0') # The header is 7 32-bit unsigned integers. keystart = 7*4+16*entries_len # and the values start after the keys valuestart = keystart + len(ids) koffsets = [] voffsets = [] # The string table first has the list of keys, then the list of values. # Each entry has first the size of the string, then the file offset. for o1, l1, o2, l2 in offsets: koffsets += [l1, o1+keystart] voffsets += [l2, o2+valuestart] offsets = koffsets + voffsets # check endianness for magic number if struct.pack('@h', 1) == struct.pack(' 1: # python 3.2 or superior output += array.array("i", offsets).tobytes() else: output += array.array("i", offsets).tostring() output += ids output += strs return output def _encode(self, mixed): """ Encodes the given ``mixed`` argument with the file encoding if and only if it's an unicode string and returns the encoded string. """ if isinstance(mixed, text_type): mixed = mixed.encode(self.encoding) return mixed # }}} # class POFile {{{ class POFile(_BaseFile): """ Po (or Pot) file reader/writer. This class inherits the :class:`~polib._BaseFile` class and, by extension, the python ``list`` type. """ def __unicode__(self): """ Returns the unicode representation of the po file. """ ret, headers = '', self.header.split('\n') for header in headers: if header[:1] in [',', ':']: ret += '#%s\n' % header else: ret += '# %s\n' % header if not isinstance(ret, text_type): ret = ret.decode(self.encoding) return ret + _BaseFile.__unicode__(self) def save_as_mofile(self, fpath): """ Saves the binary representation of the file to given ``fpath``. Keyword argument: ``fpath`` string, full or relative path to the mo file. """ _BaseFile.save(self, fpath, 'to_binary') def percent_translated(self): """ Convenience method that returns the percentage of translated messages. """ total = sum(1 for e in self if not e.obsolete) if total == 0: return 100 translated = len(self.translated_entries()) return int((100.00 / float(total)) * translated) def translated_entries(self): """ Convenience method that returns the list of translated entries. """ return [e for e in self if e.translated()] def untranslated_entries(self): """ Convenience method that returns the list of untranslated entries. """ return [e for e in self if not e.translated() and not e.obsolete \ and not 'fuzzy' in e.flags] def fuzzy_entries(self): """ Convenience method that returns the list of fuzzy entries. """ return [e for e in self if 'fuzzy' in e.flags] def obsolete_entries(self): """ Convenience method that returns the list of obsolete entries. """ return [e for e in self if e.obsolete] def merge(self, refpot): """ Convenience method that merges the current pofile with the pot file provided. It behaves exactly as the gettext msgmerge utility: * comments of this file will be preserved, but extracted comments and occurrences will be discarded; * any translations or comments in the file will be discarded, however, dot comments and file positions will be preserved; * the fuzzy flags are preserved. Keyword argument: ``refpot`` object POFile, the reference catalog. """ for entry in refpot: e = self.find(entry.msgid, include_obsolete_entries=True) if e is None: e = POEntry() self.append(e) e.merge(entry) # ok, now we must "obsolete" entries that are not in the refpot anymore for entry in self: if refpot.find(entry.msgid) is None: entry.obsolete = True # }}} # class MOFile {{{ class MOFile(_BaseFile): """ Mo file reader/writer. This class inherits the :class:`~polib._BaseFile` class and, by extension, the python ``list`` type. """ BIG_ENDIAN = 0xde120495 LITTLE_ENDIAN = 0x950412de def __init__(self, *args, **kwargs): """ Constructor, accepts all keywords arguments accepted by :class:`~polib._BaseFile` class. """ _BaseFile.__init__(self, *args, **kwargs) self.magic_number = None self.version = 0 def save_as_pofile(self, fpath): """ Saves the mofile as a pofile to ``fpath``. Keyword argument: ``fpath`` string, full or relative path to the file. """ _BaseFile.save(self, fpath) def save(self, fpath=None): """ Saves the mofile to ``fpath``. Keyword argument: ``fpath`` string, full or relative path to the file. """ _BaseFile.save(self, fpath, 'to_binary') def percent_translated(self): """ Convenience method to keep the same interface with POFile instances. """ return 100 def translated_entries(self): """ Convenience method to keep the same interface with POFile instances. """ return self def untranslated_entries(self): """ Convenience method to keep the same interface with POFile instances. """ return [] def fuzzy_entries(self): """ Convenience method to keep the same interface with POFile instances. """ return [] def obsolete_entries(self): """ Convenience method to keep the same interface with POFile instances. """ return [] # }}} # class _BaseEntry {{{ class _BaseEntry(object): """ Base class for :class:`~polib.POEntry` and :class:`~polib.MOEntry` classes. This class should **not** be instanciated directly. """ def __init__(self, *args, **kwargs): """ Constructor, accepts the following keyword arguments: ``msgid`` string, the entry msgid. ``msgstr`` string, the entry msgstr. ``msgid_plural`` string, the entry msgid_plural. ``msgstr_plural`` list, the entry msgstr_plural lines. ``msgctxt`` string, the entry context (msgctxt). ``obsolete`` bool, whether the entry is "obsolete" or not. ``encoding`` string, the encoding to use, defaults to ``default_encoding`` global variable (optional). """ self.msgid = kwargs.get('msgid', '') self.msgstr = kwargs.get('msgstr', '') self.msgid_plural = kwargs.get('msgid_plural', '') self.msgstr_plural = kwargs.get('msgstr_plural', {}) self.msgctxt = kwargs.get('msgctxt', None) self.obsolete = kwargs.get('obsolete', False) self.encoding = kwargs.get('encoding', default_encoding) def __unicode__(self, wrapwidth=78): """ Returns the unicode representation of the entry. """ if self.obsolete: delflag = '#~ ' else: delflag = '' ret = [] # write the msgctxt if any if self.msgctxt is not None: ret += self._str_field("msgctxt", delflag, "", self.msgctxt, wrapwidth) # write the msgid ret += self._str_field("msgid", delflag, "", self.msgid, wrapwidth) # write the msgid_plural if any if self.msgid_plural: ret += self._str_field("msgid_plural", delflag, "", self.msgid_plural, wrapwidth) if self.msgstr_plural: # write the msgstr_plural if any msgstrs = self.msgstr_plural keys = list(msgstrs) keys.sort() for index in keys: msgstr = msgstrs[index] plural_index = '[%s]' % index ret += self._str_field("msgstr", delflag, plural_index, msgstr, wrapwidth) else: # otherwise write the msgstr ret += self._str_field("msgstr", delflag, "", self.msgstr, wrapwidth) ret.append('') ret = u('\n').join(ret) return ret if PY3: def __str__(self): return self.__unicode__() else: def __str__(self): """ Returns the string representation of the entry. """ return unicode(self).encode(self.encoding) def __eq__(self, other): return str(self) == str(other) def _str_field(self, fieldname, delflag, plural_index, field, wrapwidth=78): lines = field.splitlines(True) if len(lines) > 1: lines = [''] + lines # start with initial empty line else: escaped_field = escape(field) specialchars_count = 0 for c in ['\\', '\n', '\r', '\t', '"']: specialchars_count += field.count(c) # comparison must take into account fieldname length + one space # + 2 quotes (eg. msgid "") flength = len(fieldname) + 3 if plural_index: flength += len(plural_index) real_wrapwidth = wrapwidth - flength + specialchars_count if wrapwidth > 0 and len(field) > real_wrapwidth: # Wrap the line but take field name into account lines = [''] + [unescape(item) for item in wrap( escaped_field, wrapwidth - 2, # 2 for quotes "" drop_whitespace=False, break_long_words=False )] else: lines = [field] if fieldname.startswith('previous_'): # quick and dirty trick to get the real field name fieldname = fieldname[9:] ret = ['%s%s%s "%s"' % (delflag, fieldname, plural_index, escape(lines.pop(0)))] for mstr in lines: #import pdb; pdb.set_trace() ret.append('%s"%s"' % (delflag, escape(mstr))) return ret # }}} # class POEntry {{{ class POEntry(_BaseEntry): """ Represents a po file entry. """ def __init__(self, *args, **kwargs): """ Constructor, accepts the following keyword arguments: ``comment`` string, the entry comment. ``tcomment`` string, the entry translator comment. ``occurrences`` list, the entry occurrences. ``flags`` list, the entry flags. ``previous_msgctxt`` string, the entry previous context. ``previous_msgid`` string, the entry previous msgid. ``previous_msgid_plural`` string, the entry previous msgid_plural. """ _BaseEntry.__init__(self, *args, **kwargs) self.comment = kwargs.get('comment', '') self.tcomment = kwargs.get('tcomment', '') self.occurrences = kwargs.get('occurrences', []) self.flags = kwargs.get('flags', []) self.previous_msgctxt = kwargs.get('previous_msgctxt', None) self.previous_msgid = kwargs.get('previous_msgid', None) self.previous_msgid_plural = kwargs.get('previous_msgid_plural', None) def __unicode__(self, wrapwidth=78): """ Returns the unicode representation of the entry. """ if self.obsolete: return _BaseEntry.__unicode__(self, wrapwidth) ret = [] # comments first, if any (with text wrapping as xgettext does) comments = [('comment', '#. '), ('tcomment', '# ')] for c in comments: val = getattr(self, c[0]) if val: for comment in val.split('\n'): if wrapwidth > 0 and len(comment) + len(c[1]) > wrapwidth: ret += wrap( comment, wrapwidth, initial_indent=c[1], subsequent_indent=c[1], break_long_words=False ) else: ret.append('%s%s' % (c[1], comment)) # occurrences (with text wrapping as xgettext does) if self.occurrences: filelist = [] for fpath, lineno in self.occurrences: if lineno: filelist.append('%s:%s' % (fpath, lineno)) else: filelist.append(fpath) filestr = ' '.join(filelist) if wrapwidth > 0 and len(filestr) + 3 > wrapwidth: # textwrap split words that contain hyphen, this is not # what we want for filenames, so the dirty hack is to # temporally replace hyphens with a char that a file cannot # contain, like "*" ret += [l.replace('*', '-') for l in wrap( filestr.replace('-', '*'), wrapwidth, initial_indent='#: ', subsequent_indent='#: ', break_long_words=False )] else: ret.append('#: ' + filestr) # flags (TODO: wrapping ?) if self.flags: ret.append('#, %s' % ', '.join(self.flags)) # previous context and previous msgid/msgid_plural fields = ['previous_msgctxt', 'previous_msgid', 'previous_msgid_plural'] for f in fields: val = getattr(self, f) if val: ret += self._str_field(f, "#| ", "", val, wrapwidth) ret.append(_BaseEntry.__unicode__(self, wrapwidth)) ret = u('\n').join(ret) assert isinstance(ret, text_type) #if type(ret) != types.UnicodeType: # return unicode(ret, self.encoding) return ret def __cmp__(self, other): """ Called by comparison operations if rich comparison is not defined. """ # First: Obsolete test if self.obsolete != other.obsolete: if self.obsolete: return -1 else: return 1 # Work on a copy to protect original occ1 = sorted(self.occurrences[:]) occ2 = sorted(other.occurrences[:]) pos = 0 for entry1 in occ1: try: entry2 = occ2[pos] except IndexError: return 1 pos = pos + 1 if entry1[0] != entry2[0]: if entry1[0] > entry2[0]: return 1 else: return -1 if entry1[1] != entry2[1]: if entry1[1] > entry2[1]: return 1 else: return -1 # Finally: Compare message ID if self.msgid > other.msgid: return 1 elif self.msgid < other.msgid: return -1 return 0 def __gt__(self, other): return self.__cmp__(other) > 0 def __lt__(self, other): return self.__cmp__(other) < 0 def __ge__(self, other): return self.__cmp__(other) >= 0 def __le__(self, other): return self.__cmp__(other) <= 0 def __eq__(self, other): return self.__cmp__(other) == 0 def __ne__(self, other): return self.__cmp__(other) != 0 def translated(self): """ Returns ``True`` if the entry has been translated or ``False`` otherwise. """ if self.obsolete or 'fuzzy' in self.flags: return False if self.msgstr != '': return True if self.msgstr_plural: for pos in self.msgstr_plural: if self.msgstr_plural[pos] == '': return False return True return False def merge(self, other): """ Merge the current entry with the given pot entry. """ self.msgid = other.msgid self.msgctxt = other.msgctxt self.occurrences = other.occurrences self.comment = other.comment fuzzy = 'fuzzy' in self.flags self.flags = other.flags[:] # clone flags if fuzzy: self.flags.append('fuzzy') self.msgid_plural = other.msgid_plural self.obsolete = other.obsolete self.previous_msgctxt = other.previous_msgctxt self.previous_msgid = other.previous_msgid self.previous_msgid_plural = other.previous_msgid_plural if other.msgstr_plural: for pos in other.msgstr_plural: try: # keep existing translation at pos if any self.msgstr_plural[pos] except KeyError: self.msgstr_plural[pos] = '' # }}} # class MOEntry {{{ class MOEntry(_BaseEntry): """ Represents a mo file entry. """ pass # }}} # class _POFileParser {{{ class _POFileParser(object): """ A finite state machine to parse efficiently and correctly po file format. """ def __init__(self, pofile, *args, **kwargs): """ Constructor. Keyword arguments: ``pofile`` string, path to the po file or its content ``encoding`` string, the encoding to use, defaults to ``default_encoding`` global variable (optional). ``check_for_duplicates`` whether to check for duplicate entries when adding entries to the file (optional, default: ``False``). """ enc = kwargs.get('encoding', default_encoding) if os.path.exists(pofile): try: self.fhandle = codecs.open(pofile, 'rU', enc) except LookupError: enc = default_encoding self.fhandle = codecs.open(pofile, 'rU', enc) else: self.fhandle = pofile.splitlines() self.instance = POFile( pofile=pofile, encoding=enc, check_for_duplicates=kwargs.get('check_for_duplicates', False) ) self.transitions = {} self.current_entry = POEntry() self.current_state = 'ST' self.current_token = None # two memo flags used in handlers self.msgstr_index = 0 self.entry_obsolete = 0 # Configure the state machine, by adding transitions. # Signification of symbols: # * ST: Beginning of the file (start) # * HE: Header # * TC: a translation comment # * GC: a generated comment # * OC: a file/line occurence # * FL: a flags line # * CT: a message context # * PC: a previous msgctxt # * PM: a previous msgid # * PP: a previous msgid_plural # * MI: a msgid # * MP: a msgid plural # * MS: a msgstr # * MX: a msgstr plural # * MC: a msgid or msgstr continuation line all = ['ST', 'HE', 'GC', 'OC', 'FL', 'CT', 'PC', 'PM', 'PP', 'TC', 'MS', 'MP', 'MX', 'MI'] self.add('TC', ['ST', 'HE'], 'HE') self.add('TC', ['GC', 'OC', 'FL', 'TC', 'PC', 'PM', 'PP', 'MS', 'MP', 'MX', 'MI'], 'TC') self.add('GC', all, 'GC') self.add('OC', all, 'OC') self.add('FL', all, 'FL') self.add('PC', all, 'PC') self.add('PM', all, 'PM') self.add('PP', all, 'PP') self.add('CT', ['ST', 'HE', 'GC', 'OC', 'FL', 'TC', 'PC', 'PM', 'PP', 'MS', 'MX'], 'CT') self.add('MI', ['ST', 'HE', 'GC', 'OC', 'FL', 'CT', 'TC', 'PC', 'PM', 'PP', 'MS', 'MX'], 'MI') self.add('MP', ['TC', 'GC', 'PC', 'PM', 'PP', 'MI'], 'MP') self.add('MS', ['MI', 'MP', 'TC'], 'MS') self.add('MX', ['MI', 'MX', 'MP', 'TC'], 'MX') self.add('MC', ['CT', 'MI', 'MP', 'MS', 'MX', 'PM', 'PP', 'PC'], 'MC') def parse(self): """ Run the state machine, parse the file line by line and call process() with the current matched symbol. """ i = 0 keywords = { 'msgctxt': 'CT', 'msgid': 'MI', 'msgstr': 'MS', 'msgid_plural': 'MP', } prev_keywords = { 'msgid_plural': 'PP', 'msgid': 'PM', 'msgctxt': 'PC', } for line in self.fhandle: i += 1 line = line.strip() if line == '': continue tokens = line.split(None, 2) nb_tokens = len(tokens) if tokens[0] == '#~' and nb_tokens > 1: line = line[3:].strip() tokens = tokens[1:] nb_tokens -= 1 self.entry_obsolete = 1 else: self.entry_obsolete = 0 # Take care of keywords like # msgid, msgid_plural, msgctxt & msgstr. if tokens[0] in keywords and nb_tokens > 1: line = line[len(tokens[0]):].lstrip() self.current_token = line self.process(keywords[tokens[0]], i) continue self.current_token = line if tokens[0] == '#:' and nb_tokens > 1: # we are on a occurrences line self.process('OC', i) elif line[:1] == '"': # we are on a continuation line self.process('MC', i) elif line[:7] == 'msgstr[': # we are on a msgstr plural self.process('MX', i) elif tokens[0] == '#,' and nb_tokens > 1: # we are on a flags line self.process('FL', i) elif tokens[0] == '#': if line == '#': line += ' ' # we are on a translator comment line self.process('TC', i) elif tokens[0] == '#.' and nb_tokens > 1: # we are on a generated comment line self.process('GC', i) elif tokens[0] == '#|': if nb_tokens < 2: self.process('??', i) continue # Remove the marker and any whitespace right after that. line = line[2:].lstrip() self.current_token = line if tokens[1].startswith('"'): # Continuation of previous metadata. self.process('MC', i) continue if nb_tokens == 2: # Invalid continuation line. self.process('??', i) # we are on a "previous translation" comment line, if tokens[1] not in prev_keywords: # Unknown keyword in previous translation comment. self.process('??', i) # Remove the keyword and any whitespace # between it and the starting quote. line = line[len(tokens[1]):].lstrip() self.current_token = line self.process(prev_keywords[tokens[1]], i) else: self.process('??', i) if self.current_entry: # since entries are added when another entry is found, we must add # the last entry here (only if there are lines) self.instance.append(self.current_entry) # before returning the instance, check if there's metadata and if # so extract it in a dict firstentry = self.instance[0] if firstentry.msgid == '': # metadata found # remove the entry firstentry = self.instance.pop(0) self.instance.metadata_is_fuzzy = firstentry.flags key = None for msg in firstentry.msgstr.splitlines(): try: key, val = msg.split(':', 1) self.instance.metadata[key] = val.strip() except: if key is not None: self.instance.metadata[key] += '\n'+ msg.strip() # close opened file if not isinstance(self.fhandle, list): # must be file self.fhandle.close() return self.instance def add(self, symbol, states, next_state): """ Add a transition to the state machine. Keywords arguments: ``symbol`` string, the matched token (two chars symbol). ``states`` list, a list of states (two chars symbols). ``next_state`` the next state the fsm will have after the action. """ for state in states: action = getattr(self, 'handle_%s' % next_state.lower()) self.transitions[(symbol, state)] = (action, next_state) def process(self, symbol, linenum): """ Process the transition corresponding to the current state and the symbol provided. Keywords arguments: ``symbol`` string, the matched token (two chars symbol). ``linenum`` integer, the current line number of the parsed file. """ try: (action, state) = self.transitions[(symbol, self.current_state)] if action(): self.current_state = state except Exception: raise IOError('Syntax error in po file (line %s)' % linenum) # state handlers def handle_he(self): """Handle a header comment.""" if self.instance.header != '': self.instance.header += '\n' self.instance.header += self.current_token[2:] return 1 def handle_tc(self): """Handle a translator comment.""" if self.current_state in ['MC', 'MS', 'MX']: self.instance.append(self.current_entry) self.current_entry = POEntry() if self.current_entry.tcomment != '': self.current_entry.tcomment += '\n' self.current_entry.tcomment += self.current_token[2:] return True def handle_gc(self): """Handle a generated comment.""" if self.current_state in ['MC', 'MS', 'MX']: self.instance.append(self.current_entry) self.current_entry = POEntry() if self.current_entry.comment != '': self.current_entry.comment += '\n' self.current_entry.comment += self.current_token[3:] return True def handle_oc(self): """Handle a file:num occurence.""" if self.current_state in ['MC', 'MS', 'MX']: self.instance.append(self.current_entry) self.current_entry = POEntry() occurrences = self.current_token[3:].split() for occurrence in occurrences: if occurrence != '': try: fil, line = occurrence.split(':') if not line.isdigit(): fil = fil + line line = '' self.current_entry.occurrences.append((fil, line)) except: self.current_entry.occurrences.append((occurrence, '')) return True def handle_fl(self): """Handle a flags line.""" if self.current_state in ['MC', 'MS', 'MX']: self.instance.append(self.current_entry) self.current_entry = POEntry() self.current_entry.flags += self.current_token[3:].split(', ') return True def handle_pp(self): """Handle a previous msgid_plural line.""" if self.current_state in ['MC', 'MS', 'MX']: self.instance.append(self.current_entry) self.current_entry = POEntry() self.current_entry.previous_msgid_plural = \ unescape(self.current_token[1:-1]) return True def handle_pm(self): """Handle a previous msgid line.""" if self.current_state in ['MC', 'MS', 'MX']: self.instance.append(self.current_entry) self.current_entry = POEntry() self.current_entry.previous_msgid = \ unescape(self.current_token[1:-1]) return True def handle_pc(self): """Handle a previous msgctxt line.""" if self.current_state in ['MC', 'MS', 'MX']: self.instance.append(self.current_entry) self.current_entry = POEntry() self.current_entry.previous_msgctxt = \ unescape(self.current_token[1:-1]) return True def handle_ct(self): """Handle a msgctxt.""" if self.current_state in ['MC', 'MS', 'MX']: self.instance.append(self.current_entry) self.current_entry = POEntry() self.current_entry.msgctxt = unescape(self.current_token[1:-1]) return True def handle_mi(self): """Handle a msgid.""" if self.current_state in ['MC', 'MS', 'MX']: self.instance.append(self.current_entry) self.current_entry = POEntry() self.current_entry.obsolete = self.entry_obsolete self.current_entry.msgid = unescape(self.current_token[1:-1]) return True def handle_mp(self): """Handle a msgid plural.""" self.current_entry.msgid_plural = unescape(self.current_token[1:-1]) return True def handle_ms(self): """Handle a msgstr.""" self.current_entry.msgstr = unescape(self.current_token[1:-1]) return True def handle_mx(self): """Handle a msgstr plural.""" index, value = self.current_token[7], self.current_token[11:-1] self.current_entry.msgstr_plural[index] = unescape(value) self.msgstr_index = index return True def handle_mc(self): """Handle a msgid or msgstr continuation line.""" token = unescape(self.current_token[1:-1]) if self.current_state == 'CT': typ = 'msgctxt' self.current_entry.msgctxt += token elif self.current_state == 'MI': typ = 'msgid' self.current_entry.msgid += token elif self.current_state == 'MP': typ = 'msgid_plural' self.current_entry.msgid_plural += token elif self.current_state == 'MS': typ = 'msgstr' self.current_entry.msgstr += token elif self.current_state == 'MX': typ = 'msgstr[%s]' % self.msgstr_index self.current_entry.msgstr_plural[self.msgstr_index] += token elif self.current_state == 'PP': typ = 'previous_msgid_plural' token = token[3:] self.current_entry.previous_msgid_plural += token elif self.current_state == 'PM': typ = 'previous_msgid' token = token[3:] self.current_entry.previous_msgid += token elif self.current_state == 'PC': typ = 'previous_msgctxt' token = token[3:] self.current_entry.previous_msgctxt += token # don't change the current state return False # }}} # class _MOFileParser {{{ class _MOFileParser(object): """ A class to parse binary mo files. """ def __init__(self, mofile, *args, **kwargs): """ Constructor. Keyword arguments: ``mofile`` string, path to the mo file or its content ``encoding`` string, the encoding to use, defaults to ``default_encoding`` global variable (optional). ``check_for_duplicates`` whether to check for duplicate entries when adding entries to the file (optional, default: ``False``). """ self.fhandle = open(mofile, 'rb') self.instance = MOFile( fpath=mofile, encoding=kwargs.get('encoding', default_encoding), check_for_duplicates=kwargs.get('check_for_duplicates', False) ) def parse(self): """ Build the instance with the file handle provided in the constructor. """ # parse magic number magic_number = self._readbinary(' 1: entry = self._build_entry( msgid=msgid_tokens[0], msgid_plural=msgid_tokens[1], msgstr_plural=dict((k,v) for k,v in enumerate(msgstr.split(b('\0')))) ) else: entry = self._build_entry(msgid=msgid, msgstr=msgstr) self.instance.append(entry) # close opened file self.fhandle.close() return self.instance def _build_entry(self, msgid, msgstr=None, msgid_plural=None, msgstr_plural=None): msgctxt_msgid = msgid.split(b('\x04')) encoding = self.instance.encoding if len(msgctxt_msgid) > 1: kwargs = { 'msgctxt': msgctxt_msgid[0].decode(encoding), 'msgid' : msgctxt_msgid[1].decode(encoding), } else: kwargs = {'msgid': msgid.decode(encoding)} if msgstr: kwargs['msgstr'] = msgstr.decode(encoding) if msgid_plural: kwargs['msgid_plural'] = msgid_plural.decode(encoding) if msgstr_plural: for k in msgstr_plural: msgstr_plural[k] = msgstr_plural[k].decode(encoding) kwargs['msgstr_plural'] = msgstr_plural return MOEntry(**kwargs) def _readbinary(self, fmt, numbytes): """ Private method that unpack n bytes of data using format . It returns a tuple or a mixed value if the tuple length is 1. """ bytes = self.fhandle.read(numbytes) tup = struct.unpack(fmt, bytes) if len(tup) == 1: return tup[0] return tup # }}} # class TextWrapper {{{ class TextWrapper(textwrap.TextWrapper): """ Subclass of textwrap.TextWrapper that backport the drop_whitespace option. """ def __init__(self, *args, **kwargs): drop_whitespace = kwargs.pop('drop_whitespace', True) textwrap.TextWrapper.__init__(self, *args, **kwargs) self.drop_whitespace = drop_whitespace def _wrap_chunks(self, chunks): """_wrap_chunks(chunks : [string]) -> [string] Wrap a sequence of text chunks and return a list of lines of length 'self.width' or less. (If 'break_long_words' is false, some lines may be longer than this.) Chunks correspond roughly to words and the whitespace between them: each chunk is indivisible (modulo 'break_long_words'), but a line break can come between any two chunks. Chunks should not have internal whitespace; ie. a chunk is either all whitespace or a "word". Whitespace chunks will be removed from the beginning and end of lines, but apart from that whitespace is preserved. """ lines = [] if self.width <= 0: raise ValueError("invalid width %r (must be > 0)" % self.width) # Arrange in reverse order so items can be efficiently popped # from a stack of chucks. chunks.reverse() while chunks: # Start the list of chunks that will make up the current line. # cur_len is just the length of all the chunks in cur_line. cur_line = [] cur_len = 0 # Figure out which static string will prefix this line. if lines: indent = self.subsequent_indent else: indent = self.initial_indent # Maximum width for this line. width = self.width - len(indent) # First chunk on line is whitespace -- drop it, unless this # is the very beginning of the text (ie. no lines started yet). if self.drop_whitespace and chunks[-1].strip() == '' and lines: del chunks[-1] while chunks: l = len(chunks[-1]) # Can at least squeeze this chunk onto the current line. if cur_len + l <= width: cur_line.append(chunks.pop()) cur_len += l # Nope, this line is full. else: break # The current line is full, and the next chunk is too big to # fit on *any* line (not just this one). if chunks and len(chunks[-1]) > width: self._handle_long_word(chunks, cur_line, cur_len, width) # If the last chunk on this line is all whitespace, drop it. if self.drop_whitespace and cur_line and cur_line[-1].strip() == '': del cur_line[-1] # Convert current line back to a string and store it in list # of all lines (return value). if cur_line: lines.append(indent + ''.join(cur_line)) return lines # }}} # function wrap() {{{ def wrap(text, width=70, **kwargs): """ Wrap a single paragraph of text, returning a list of wrapped lines. """ if sys.version_info < (2, 6): return TextWrapper(width=width, **kwargs).wrap(text) return textwrap.wrap(text, width=width, **kwargs) #}}} singularity-1.00/singularity/code/prerequisite.py000066400000000000000000000061271367731414700224060ustar00rootroot00000000000000#file: prerequisite.py #Copyright (C) 2008 FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the Prequisite class. from __future__ import absolute_import from singularity.code import g class Prerequisite(object): def __init__(self, prerequisites): self.prerequisites = prerequisites def available(self): or_mode = False assert type(self.prerequisites) == list for index, prerequisite in enumerate(self.prerequisites): if prerequisite == "impossible": assert len(self.prerequisites) == 1 return False if prerequisite == "OR": assert index == 0 or_mode = True if prerequisite in g.pl.techs and g.pl.techs[prerequisite].done: if or_mode: return True else: if not or_mode: return False # If we're not in OR mode, we met all our prerequisites. If we are, we # didn't meet any of the OR prerequisites. return not or_mode def prerequisites_in_cnf_format(self): """Transform the Prerequisites into Conjunctive Normal Form (CNF) This is mostly useful for unit tests. A quick primer on CNF form is: { {X}, {Y1, Y2}, {Z} } is read as (X) AND (Y1 OR Y2) AND (Z) Special cases used here: * None implies that there is no solution (only happens if the data file uses "impossible" * Empty (outer) set implies no prerequisites. Note that the dependency format of singularity's data files currently only support simple relations that are always AND'ed or always OR'ed together. :return: None if the prerequisites is explicitly marked "impossible". Otherwise, a set of sets that denote the dependencies required to satisfy this prerequisite. If the outer set is empty set, then there are no prerequisites for this instance. """ # Format: { {X}, {Y1, Y2}, {Z} } => (X) AND (Y1 OR Y2) AND (Z) if len(self.prerequisites) == 0: return frozenset() if self.prerequisites[0] == 'impossible': return None if self.prerequisites[0] == 'OR': return frozenset([frozenset(x for x in self.prerequisites[1:])]) return frozenset(frozenset([x]) for x in self.prerequisites) singularity-1.00/singularity/code/pycompat.py000066400000000000000000000016101367731414700215110ustar00rootroot00000000000000# A minimal python compatiability layer to support the bare minimum requirements # that singularity need to be python2 and python3 compatible at the same time. # # We could use the six module for this, but it seems like overkill given how # little we need. try: long = long except NameError: long = int try: unicode = unicode except NameError: unicode = str try: basestring = basestring except NameError: basestring = str try: xrange = xrange except NameError: xrange = range try: # Python 3 from configparser import ConfigParser, RawConfigParser SafeConfigParser = ConfigParser except ImportError: # Python 2.7 from ConfigParser import ConfigParser, SafeConfigParser, RawConfigParser ConfigParser.read_file = ConfigParser.readfp SafeConfigParser.read_file = SafeConfigParser.readfp RawConfigParser.read_file = RawConfigParser.readfp singularity-1.00/singularity/code/region.py000066400000000000000000000152361367731414700211510ustar00rootroot00000000000000#file: region.py #Copyright (C) 2008 FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the Region class. import random from singularity import g class RegionSpec(object): def __init__(self, id, modifiers_list): self.id = id self.modifiers_list = modifiers_list self.locations = [] class Region(object): def __init__(self, spec, loading_savegame=False): self.spec = spec self.modifier_by_location = {} self._modifier_entry_by_location = {} if not loading_savegame: modifiers_entry_list = list(range(len(self.spec.locations))) self._assign_modifiers(modifiers_entry_list, self.spec.locations) def _assign_modifiers(self, entry_list, location_id_list, shuffle_entry_list=True): modifiers_list = self.spec.modifiers_list if shuffle_entry_list: random.shuffle(entry_list) for entry_id, loc in zip(entry_list, location_id_list): self._modifier_entry_by_location[loc] = entry_id # There can be more locations than modifiers (e.g. URBAN has 6 locations but # 5 modifiers) if entry_id < len(modifiers_list): self.modifier_by_location[loc] = modifiers_list[entry_id] else: self.modifier_by_location[loc] = {} def serialize_obj(self): return { 'id': g.to_internal_id('region', self.spec.id), # We only store the modifier entry per location as we can trivially get the # most recent modifier from that. 'modifier_entry_by_location': [ { 'loc_id': k, 'modifier_entry': v, } for k, v in self._modifier_entry_by_location.items() ], } @classmethod def deserialize_obj(cls, obj_data, game_version): spec_id = g.convert_internal_id('region', obj_data['id']) spec = g.regions[spec_id] region = Region(spec, loading_savegame=True) modifiers_list = spec.modifiers_list region_locations = frozenset(spec.locations) used_entries = set() # Load and assign existing entries - data quality permitting for modifier_data in obj_data['modifier_entry_by_location']: loc_id = g.convert_internal_id('location', modifier_data['loc_id']) if loc_id not in region_locations: # Location is no longer in this Region continue modifier_entry = modifier_data.get('modifier_entry') # Check for corrupt data assert modifier_entry is not None and modifier_entry >= 0 and modifier_entry not in used_entries used_entries.add(modifier_entry) region._modifier_entry_by_location[loc_id] = modifier_entry if modifier_entry < len(modifiers_list): region.modifier_by_location[loc_id] = modifiers_list[modifier_entry] else: region.modifier_by_location[loc_id] = {} # Handle new locations being added to the region after the savegame was made. new_locations = [loc_id for loc_id in region_locations if loc_id not in region._modifier_entry_by_location] missing_entries = [entry for entry in range(len(region_locations)) if entry not in used_entries] assert len(missing_entries) == len(new_locations) region._assign_modifiers(missing_entries, new_locations) return region @classmethod def guess_region_data_in_old_savegame(cls, serialized_location_data, game_version): # Prior to 1.0 (beta1), there was only one region (URBAN) and we can mostly # recreate it by looking at the location modifiers. # Only these 6 locations were in the URBAN region prior to 1.0 (beta1) urban_location_ids = {'N AMERICA', 'S AMERICA', 'EUROPE', 'ASIA', 'AFRICA', 'AUSTRALIA'} modifier_entry_by_location = [] # We use this set to ensure a modifier is only given once; the deserialize_obj method # checks for it. remaining_mods = { 1, # Mod 1: CPU bonus, stealth malus 2, # Mod 2: Stealth bonus, CPU malus 3, # Mod 3: Thrift bonus, speed malus 4, # Mod 4: Speed bonus, thrift malus 5, # Mod 5: CPU bonus, thrift malus } for loc_data in serialized_location_data: raw_loc_id = loc_data['id'] loc_id = g.convert_internal_id('location', raw_loc_id) if loc_id not in urban_location_ids: continue modifier = loc_data.get('_modifiers') if not modifier: continue cpu_mod = modifier.get('cpu', 1) thrift_mod = modifier.get('thrift', 1) # Actual bonuses were 1.2 and maluses were 0.83 - we use 1.05 and 0.95 here # because it is sufficient to detect whether it was a bonus or malus without # having to worry about floating point rounding errors. if cpu_mod < 0.95: # Mod 2 (Stealth bonus, CPU malus) modifier_entry = 2 elif cpu_mod > 1.05: # Either 1 or 5 modifier_entry = 5 if thrift_mod < 0.95 else 1 else: # Either 3 or 4 modifier_entry = 3 if thrift_mod > 1.05 else 4 if modifier_entry in remaining_mods: remaining_mods.discard(modifier_entry) modifier_entry_by_location.append({ 'loc_id': raw_loc_id, 'modifier_entry': modifier_entry - 1, }) # else: # Do nothing - the region deserialization will assign them a random # entry # Finally, generate what the serialized data should have looked like return [ { 'id': g.to_internal_id('region', 'URBAN'), 'modifier_entry_by_location': modifier_entry_by_location, } ] singularity-1.00/singularity/code/safety.py000066400000000000000000000066531367731414700211640ustar00rootroot00000000000000#file: safety.py #Copyright (C) 2008 FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains wrapper functions for making error-tolerant "safe" calls. import logging import pygame import time import traceback import sys class Buffer(object): def __init__(self, prefix=""): self.data = prefix def write(self, unbuffered): self.data += unbuffered def get_timestamp(when=None): if when == None: when = time.time() return time.ctime(when) + " " + time.tzname[time.daylight] def log_error(error_message, *args): if len(args): sys.stderr.write((error_message % args) + "\n") else: sys.stderr.write(error_message + "\n") if len(logging.getLogger().handlers) > 0: try: logging.getLogger().error(error_message, *args) except IOError: # Probably access denied with --singledir. That's ok pass def log_func_exc(func): buffer = Buffer("Exception in function %s at %s:\n```\n" % (func.__name__, get_timestamp())) traceback.print_exc(file=buffer) buffer.write("```") log_error(buffer.data) FIRST_ERROR = True def safe_call(func, args=(), kwargs={}, on_error=None): try: return func(*args, **kwargs) except Exception: global FIRST_ERROR if FIRST_ERROR: log_error("----- Basic information (Please include all the data below in the bug report) ------") log_error("Please submit the crash on github: https://github.com/singularity/singularity/issues/new") try: from singularity import __full_version__ except ImportError: __full_version__ = "N/A (Import error)" log_error("Singularity version %s", __full_version__) log_error("Python version %s", sys.version.replace("\n", '')) log_error("Pygame version %s", pygame.version.ver) log_error("SDL version %s", ".".join(str(x) for x in pygame.get_sdl_version())) FIRST_ERROR = False log_func_exc(func) # # ... --- ... # import g # g.play_sound("click") # delays = (.15, .15, .8, .5, .5, .8, .15, .15) # for delay in delays: # time.sleep(delay) # g.play_sound("click") return on_error # Catches any errors raised by a function, logs them, and returns the given # value. # # Apply to a function like so: # @safe(my_error_code) # def my_function(...) # # And then: # result = my_function(...) # if result == my_error_code: # # An error was raised. def safe(on_error): return lambda func: _safe(func, on_error) def _safe(func, on_error): return lambda *args, **kwargs: safe_call(func, args, kwargs, on_error) singularity-1.00/singularity/code/savegame.py000066400000000000000000000704231367731414700214550ustar00rootroot00000000000000#file: statistics.py #Copyright (C) 2008 FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains functions to handle savegame (load, save, ...) from __future__ import absolute_import import codecs import operator import re import sys import time try: import cPickle as pickle PY3 = False assert sys.version_info[0] == 2 except ImportError: import pickle assert sys.version_info[0] >= 3 PY3 = True import collections import gzip import json import os import numpy from numpy import array, int64 from io import open, BytesIO import base64 from singularity.code import g, dirs, player, group, logmessage from singularity.code import base, tech, item, event, location, buyable, difficulty, effect from singularity.code.stats import itself as stats # Filenames that are reserved under Windows WINDOWS_RESERVED = {'CON', 'PRN', 'AUX', 'NUL', 'COM1', 'COM2', 'COM3', 'COM4', 'COM5', 'COM6', 'COM7', 'COM8', 'COM9', 'LPT1', 'LPT2', 'LPT3', 'LPT4', 'LPT5', 'LPT6', 'LPT7', 'LPT8', 'LPT9'} last_savegame_name = None class SavegameFormatDefinition(object): def __init__(self, internal_version, display_version, magic_value=None): self.internal_version = internal_version # Since the internal version is not visible anywhere, there is no reason not to keep a simple # integer. Though, we permit legacy versions to keep the original version number to avoid # fixing the code-base retroactively assert internal_version == int(internal_version) or internal_version < 100, \ "Use integer version for new savegame versions" self.display_version = display_version if magic_value is None: magic_value = "singularity_savefile_%s" % str(internal_version) self.magic_value = magic_value savefile_translation = { sfg.magic_value: sfg for sfg in [ SavegameFormatDefinition(4, "0.30", "singularity_savefile_r4"), SavegameFormatDefinition(4.91, "0.30", "singularity_savefile_r5_pre"), SavegameFormatDefinition(31, "0.31pre", "singularity_savefile_0.31pre"), SavegameFormatDefinition(99, "1.0 (dev)"), SavegameFormatDefinition(99.1, "1.0 (dev)"), SavegameFormatDefinition(99.2, "1.0 (dev)"), SavegameFormatDefinition(99.3, "1.0 (dev)"), SavegameFormatDefinition(99.4, "1.0 (dev)"), SavegameFormatDefinition(99.5, "1.0 (dev)"), SavegameFormatDefinition(99.6, "1.0 (dev)"), SavegameFormatDefinition(99.7, "1.0 (dev)"), # .sav/pickle based above this line vs. .s2/json based below SavegameFormatDefinition(99.8, "1.0 (alpha1)"), SavegameFormatDefinition(100, "1.0 (beta1)"), SavegameFormatDefinition(101, "1.00"), ] } # We always save in the highest version (internal_version) current_save_format = max(savefile_translation.values(), key=operator.attrgetter('internal_version')) current_save_version = current_save_format.magic_value _Savegame = collections.namedtuple('_Savegame', ['name', 'filepath', 'savegame_format', 'headers', 'load_file']) class Savegame(_Savegame): @property def version(self): if self.savegame_format is None: return None return self.savegame_format.display_version @property def is_latest_version(self): return True if self.version == current_save_version else False def convert_string_to_path_name(name): # Some filesystems require unicode (e.g. Windows) whereas Linux needs bytes. # Python 2 is rather forgiving which works as long as you work with ASCII, # but some people might like non-ASCII in their savegame names # (https://bugs.debian.org/718447) if os.path.supports_unicode_filenames: return name return name.encode('utf-8') def convert_path_name_to_str(path): if PY3: # Python3 handles this case sanely by default return path # Some filesystems require unicode (e.g. Windows) whereas Linux needs bytes. # Python 2 is rather forgiving which works as long as you work with ASCII, # but some people might like non-ASCII in their savegame names # (https://bugs.debian.org/718447) if os.path.supports_unicode_filenames: return path return path.decode('utf-8', errors='replace') if PY3: def unpickle_instance(fd, find_globals): class RestrictedUnpickler(pickle.Unpickler): def find_class(self, module, name): return find_globals(module, name) return RestrictedUnpickler(fd, encoding='bytes') else: def unpickle_instance(fd, find_globals): unpickler = pickle.Unpickler(fd) unpickler.find_global = find_globals return unpickler def get_savegames(): all_dirs = dirs.get_read_dirs("saves") all_savegames = [] for saves_dir in all_dirs: try: all_files = os.listdir(saves_dir) except Exception: continue for file_name in all_files: if file_name[0] == ".": continue if file_name.endswith('.sav'): name = file_name[:-4] parse_headers = parse_pickle_savegame_headers load_file = load_savegame_by_pickle elif file_name.endswith('.s2'): name = file_name[:-3] parse_headers = parse_json_savegame_headers load_file = load_savegame_by_json else: # Unknown extension; ignore continue filepath = os.path.join(saves_dir, file_name) version_format = None # None == Unknown version try: with open(filepath, 'rb') as loadfile: version_line, headers = parse_headers(loadfile) if version_line in savefile_translation: version_format = savefile_translation[version_line] except Exception: version_format = None # To be sure. savegame = Savegame(convert_path_name_to_str(name), filepath, version_format, headers, load_file) all_savegames.append(savegame) return all_savegames def delete_savegame(savegame): load_path = savegame.filepath if load_path is None: return False try: os.remove(load_path) except Exception: return False def parse_pickle_savegame_headers(fd): def find_class(module_name, class_name): # Lets reduce the risk of "funny monkey business" # when checking the version of pickled files raise ValueError("Invalid class in savegame: %s.%s" % (module_name, class_name)) unpickle = unpickle_instance(fd, find_globals=find_class) load_version = recursive_fix_pickle(unpickle.load(), seen=set()) return load_version, {} def parse_json_savegame_headers(fd): version_line = fd.readline().decode('utf-8').strip() headers = {} while True: line = fd.readline().decode('utf-8').strip() if line == '': break key, value = line.split('=', 1) headers[key] = value return version_line, headers TypeType = type(type(None)) NoneType = type(None) def recursive_fix_pickle(the_object, seen): # Adapted from https://github.com/jhpyle/docassemble/blob/master/docassemble_webapp/docassemble/webapp/fixpickle.py # Copyright (c) 2015-2018 Jonathan Pyle # Licensed under MIT according to the LICENSE.txt in the root of the project # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. if not PY3: return the_object if isinstance(the_object, bytes): try: return the_object.decode('utf-8') except Exception: return the_object if isinstance(the_object, (str, bool, int, float, complex, NoneType, TypeType, numpy.ndarray)): return the_object if isinstance(the_object, dict): new_dict = type(the_object)() for key, val in the_object.items(): new_dict[recursive_fix_pickle(key, seen=seen)] = recursive_fix_pickle(val, seen=seen) return new_dict if isinstance(the_object, list): new_list = type(the_object)() for item in the_object: new_list.append(recursive_fix_pickle(item, seen=seen)) return new_list if isinstance(the_object, set): new_set = type(the_object)() for item in the_object: new_set.add(recursive_fix_pickle(item, seen=seen)) return new_set if isinstance(the_object, collections.deque): new_list = list() for item in the_object: new_list.append(recursive_fix_pickle(item, seen=seen)) the_object.clear() the_object.extend(new_list) return the_object if isinstance(the_object, tuple): new_list = list() for item in the_object: new_list.append(recursive_fix_pickle(item, seen=seen)) return type(the_object)(new_list) object_id = id(the_object) if object_id in seen: return the_object seen.add(object_id) the_object.__dict__ = dict((recursive_fix_pickle(k, seen=seen), recursive_fix_pickle(v, seen=seen)) for k, v in the_object.__dict__.items()) return the_object def load_savegame(savegame): global last_savegame_name load_path = savegame.filepath if load_path is None: raise RuntimeError("savegame without valid path") with open(load_path, 'rb') as fd: load_savegame_fd(savegame.load_file, fd) last_savegame_name = savegame.name def load_savegame_fd(loader_func, fd): try: before_load_savegame() loader_func(fd) after_load_savegame() finally: finally_load_savegame() def before_load_savegame(): stats.reset() def after_load_savegame(): g.pl.initialize() def finally_load_savegame(): # In any case, we don't want internal_id_version to be set after load_savegame. g.internal_id_version = None def load_savegame_by_json(fd): load_version_string, headers = parse_json_savegame_headers(fd) if load_version_string not in savefile_translation: raise SavegameVersionException(load_version_string) load_version = savefile_translation[load_version_string].internal_version difficulty_id = headers['difficulty'] game_time = int(headers['game_time']) if game_time < 0: raise ValueError("Corrupt save; game time is before game start") next_byte = fd.peek(1)[0] if next_byte == b'{'[0]: game_data = json.load(fd) elif next_byte == b'H'[0]: # gzip in base64 starts with H4s encoded = fd.read() bio = BytesIO(base64.standard_b64decode(encoded)) with gzip.GzipFile(filename='', mode='rb', fileobj=bio) as gzip_fd: game_data = json.load(gzip_fd) # Remove some variables that we do not use any longer to enable # python to garbage collect them del bio del encoded elif next_byte == b"\x1f"[0]: # Gzip magic headers # gzip in binary starts always with its magic headers with gzip.GzipFile(filename='', mode='rb', fileobj=fd) as gzip_fd: game_data = json.load(gzip_fd) else: raise ValueError("Unexpected byte: %s" % repr(next_byte)) # Move old data in player. for key in [ ('events'), ('techs'), ]: if key in game_data: game_data['player'][key] = game_data[key] del game_data[key] # Pause game when loading g.curr_speed = 0 pl_data = game_data['player'] player.Player.deserialize_obj(difficulty_id, game_time, pl_data, load_version) # Load save if present. if 'stats' in game_data: stats.reset() stats.deserialize_obj(game_data['stats'], load_version) def load_savegame_by_pickle(loadfile): def find_class(module_name, class_name): # For cPickle try: import copy_reg except ImportError: import copyreg as copy_reg import numpy.core.multiarray import collections import _codecs save_classes = dict( player_class=player.Player, Player=player.Player, _reconstructor = copy_reg._reconstructor, object=object, array=list, # This is the old buyable.array. # We just treat it as a list for conversion purposes. list=list, encode=_codecs.encode, LocationSpec=location.LocationSpec, Location=location.Location, Tech=tech.Tech, TechSpec=tech.TechSpec, event_class=event.Event, EventSpec=event.EventSpec, Event=event.Event, group=group.Group, Group=group.Group, GroupClass=group.GroupSpec, GroupSpec=group.GroupSpec, Buyable_Class=buyable.BuyableSpec, BuyableClass=buyable.BuyableSpec, BuyableSpec=buyable.BuyableSpec, Buyable=buyable.Buyable, Base=base.Base, Base_Class=base.BaseSpec, BaseClass=base.BaseSpec, BaseSpec=base.BaseSpec, Item=item.Item, Item_Class=item.ItemSpec, ItemClass=item.ItemSpec, ItemSpec=item.ItemSpec, ItemType=item.ItemType, LogEmittedEvent=logmessage.LogEmittedEvent, LogResearchedTech=logmessage.LogResearchedTech, LogBaseLostMaintenance=logmessage.LogBaseLostMaintenance, LogBaseDiscovered=logmessage.LogBaseDiscovered, LogBaseConstructed=logmessage.LogBaseConstructed, LogItemConstructionComplete=logmessage.LogItemConstructionComplete, _reconstruct=numpy.core.multiarray._reconstruct, scalar=numpy.core.multiarray.scalar, ndarray=numpy.ndarray, dtype=numpy.dtype, deque=collections.deque, Difficulty=difficulty.Difficulty, Effect=effect.Effect, OrderedDict=collections.OrderedDict, ) if class_name in save_classes: return save_classes[class_name] else: raise ValueError("Invalid class in savegame: %s.%s" % (module_name, class_name)) g.internal_id_version = 'pre1' unpickle = unpickle_instance(loadfile, find_class) #check the savefile version load_version_string = unpickle.load() if PY3 and isinstance(load_version_string, bytes): load_version_string = load_version_string.decode('utf-8') if load_version_string not in savefile_translation: raise SavegameVersionException(load_version_string) load_version = savefile_translation[load_version_string].internal_version # Changes to overall structure go here. seen_objects = set() saved_player = recursive_fix_pickle(unpickle.load(), seen_objects) # Current speed (ignored) unpickle.load() # Pause game when loading g.curr_speed = 0 techs = recursive_fix_pickle(unpickle.load(), seen_objects) if load_version < 99.7: # In >= 99.8 locations are saved as a part of the player object, but earlier # it was stored as a separate part of the stream. locations = recursive_fix_pickle(unpickle.load(), seen_objects) else: locations = saved_player.locations events = recursive_fix_pickle(unpickle.load(), seen_objects) if load_version < 99.1: diff_obj = next((d for d in difficulty.difficulties.values() if saved_player.difficulty == d.old_difficulty_value), next(iter(difficulty.difficulties))) difficulty_id = diff_obj.id else: difficulty_id = saved_player.difficulty.id player_log = [] if hasattr(saved_player, 'log'): player_log.extend(saved_player.log) def _find_attribute(obj, options, **kwargs): for option in options: if option in obj.__dict__: return obj.__dict__[option] if 'default_value' in kwargs: return kwargs['default_value'] raise KeyError(str(options)) pl_obj_data = { 'cash': _find_attribute(saved_player, ['_cash', 'cash']), 'partial_cash': saved_player.partial_cash, 'locations': [], 'cpu_usage': _find_attribute(saved_player, ['cpu_usage'], default_value={}), # 'last_discovery': saved_player.last_discovery.id if saved_player.last_discovery else None, # 'prev_discovery': saved_player.prev_discovery.id if saved_player.prev_discovery else None, # We will fix the log later manually 'log': [], 'used_cpu': _find_attribute(saved_player, ['_used_cpu', 'used_cpu'], default_value=0), 'had_grace': saved_player.had_grace, 'groups': [{'id': grp_id, 'suspicion': grp.suspicion} for grp_id, grp in saved_player.groups.items()], 'events': [], 'techs': [] } for loc_id, saved_location in locations.items(): # Fixup modifiers and simplify some code below. saved_location = _convert_location(saved_location, load_version) if saved_location is None: # Unknown location - pretend we did not see it. continue fake_base_objs = [] fake_location_obj = { 'id': loc_id, '_modifiers': saved_location._modifiers, 'bases': fake_base_objs, } # Convert works reasonably well for bases and items; use that to fix up the # items and then serialize them into built-ins. for saved_base in saved_location.bases: saved_base = _convert_base(saved_base, load_version) for my_item in saved_base.all_items(): my_item = _convert_item(my_item, load_version) fake_base_objs.append(saved_base.serialize_obj()) pl_obj_data['locations'].append(fake_location_obj) for event_id, saved_event in events.items(): fake_obj_data = { 'id': event_id, 'triggered': saved_event.triggered, # Omit triggered_at; it did not exist and deserialize_obj will # fix it for us. } pl_obj_data['events'].append(fake_obj_data) for tech_id, saved_tech in techs.items(): if tech_id == 'unknown_tech': continue saved_tech = _convert_tech(saved_tech, load_version) # convert_from can handle buyable fields correctly fake_obj_data = saved_tech.serialize_buyable_fields({ 'id': tech_id, }) pl_obj_data['techs'].append(fake_obj_data) # Now we have enough information to reconstruct the Player object player.Player.deserialize_obj(difficulty_id, saved_player.raw_sec, pl_obj_data, load_version) new_log = list(filter(None, (_convert_log_entry(x) for x in player_log))) g.pl.log.clear() g.pl.log.extend(new_log) def _convert_location(loc, old_version): if old_version < 99.7: # < 1.0 dev spec_id = loc.__dict__['id'] # Default to None if absent (so the LocationSpec's version is used) loc.__dict__['_modifiers'] = loc.__dict__['modifiers'] if loc.__dict__.get('modifiers') else None # The following locations had a static modifier list at the time of 99.8. Clear their modifier # dict, so the LocationSpec's version is used instead. if spec_id in {'ANTARCTIC', 'OCEAN', 'MOON', 'ORBIT', 'FAR REACHES'}: loc.__dict__['modifiers'] = None # Remove old fields where present for field in ('id', 'name', 'x', 'y', 'absolute', 'safety', 'cities', 'modifiers', 'hotkey'): try: del loc.__dict__[field] except KeyError: pass else: # >= 99.7; the LocationSpec is present on the object itself spec_id = loc.spec.id # Force reload the spec for now until #145 is fully implemented if spec_id not in g.locations: return None loc.spec = g.locations[spec_id] return loc def _convert_buyable(buyable, save_version): if save_version < 4.91: # r5_pre buyable.cost_left = array(buyable.cost_left, int64) buyable.total_cost = array(buyable.total_cost, int64) buyable.count = 1 elif buyable.count < 1: # Old corrupt (?) savegames sometimes have a count of 0. Not # sure how that is possible, but "fixing" it to 1 is trivial # enough and lets us move on. # Seen as: # https://bugs.launchpad.net/ubuntu/+source/singularity/+bug/931037 # https://code.google.com/p/endgame-singularity/issues/detail?id=107 (dead!) buyable.count = 1 if save_version < 99.7: buyable.spec = buyable.type del buyable.type return buyable def _convert_base(base, save_version): base = _convert_buyable(base, save_version) if save_version < 99.3: # < 1.0 (dev) # We needs to do it first because of property base.cpus base.items = { "cpu": base.__dict__["cpus"] } del base.__dict__["cpus"] if save_version < 4.91: # < r5_pre for cpu in base.cpus: if cpu: cpu.convert_from(save_version) cpu.base = base for index in range(len(base.extra_items)): if base.extra_items[index]: base.extra_items[index].convert_from(save_version) else: base.extra_items[index] = None base.raw_cpu = 0 if base.cpus[0]: for cpu in base.cpus[1:]: base.cpus[0] += cpu if len(base.cpus) == 1 and base.cpus[0].done: # Force it to report its CPU. base.cpus[0].finish() base.cpus = base.cpus[0] else: base.cpus = None base.recalc_cpu() base.power_state = base.power_state.lower() if save_version < 99.3: # < 1.0 (dev) extra_items = iter(base.__dict__["extra_items"]) base.items["reactor"] = next(extra_items, None) base.items["network"] = next(extra_items, None) base.items["security"] = next(extra_items, None) del base.__dict__["extra_items"] if ("power_state" in base.__dict__): base._power_state = base.__dict__["power_state"] base._name = base.__dict__['name'] return base def _convert_item(item, save_version): item = _convert_buyable(item, save_version) return item def _convert_tech(tech, save_version): tech = _convert_buyable(tech, save_version) return tech def _convert_log_entry(entry): if not isinstance(entry, logmessage.AbstractLogMessage): log_time, log_name, log_data = entry time_raw = log_time[0] * g.seconds_per_day + log_time[1] * g.seconds_per_hour + \ log_time[2] * g.seconds_per_minute + log_time[3] if log_name == 'log_event': entry = logmessage.LogEmittedEvent(time_raw, log_data[0]) else: if type(log_data) == tuple and len(log_data) != 4: # 0.31pre saves used 3 values tuple. We cannot # restore those so we simply discard them as we # need the "reason" field as well. return None reason, base_name, base_type_id, location_id = log_data if reason == 'maint': entry = logmessage.LogBaseLostMaintenance(time_raw, base_name, base_type_id, location_id) else: entry = logmessage.LogBaseDiscovered(time_raw, base_name, base_type_id, location_id, reason) return entry def savegame_exists(savegame_name): save_path = dirs.get_writable_file_in_dirs(savegame_name + ".s2", "saves") if (save_path is None or not os.path.isfile(convert_string_to_path_name(save_path))) : return False return True def check_filename_illegal(directory, filename, extension): """Check if the filename is safe for all operating systems. Keyword arguments: directory -- the directory that the file will be placed in. filename -- a base filename without file extension. filename -- file extension including the dot. Can be empty. Returns an error message if a violation was found and None otherwise.""" # https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx # http://www.linfo.org/file_name.html # https://kb.acronis.com/content/39790 if filename.strip() != filename: raise ValueError("Filename must be stripped before calling check_filename_illegal") # Characters that are disallowed anywhere in a filename # No potential file separators or other potentially illegal characters if re.match('.*[<>:"|?*/\\\\].*', filename): return _('Filename must not contain any of these characters: {CHARACTERS}').format(CHARACTERS='<>:"|?*/\\\\') # Characters that are allowed in filenames, but not at the beginning if re.match('^[.-]', filename): return _('Filename must not start with any of these characters: {CHARACTERS}').format(CHARACTERS='.-') # Filenames that are reserved under Windows if filename.upper() in WINDOWS_RESERVED: return _('This is a reserved filename. Please choose a different filename.') if filename == '': return _('Please enter a non-whitespace character.') # Don't exceed the max length. For Windows, it's the whole path. filepath = os.path.abspath(os.path.join(directory, filename, extension)) if len(os.fsencode(filepath)) > 255: return _('Filename is too long.') return None def create_savegame(savegame_name): global last_savegame_name last_savegame_name = savegame_name save_loc = convert_string_to_path_name(dirs.get_writable_file_in_dirs(savegame_name + ".s2", "saves")) # Save in new "JSONish" format with open(save_loc, 'wb') as savefile: gzipped = not g.debug write_game_to_fd(savefile, gzipped=gzipped) def write_game_to_fd(fd, gzipped=True): version_line = "%s\n" % current_save_version fd.write(version_line.encode('utf-8')) headers = [ ('difficulty', g.pl.difficulty.id), ('game_time', str(g.pl.raw_sec)), ('time', str(time.time())), ] for k, v in headers: kw_str = "%s=%s\n" % (k, v) fd.write(kw_str.encode('utf-8')) fd.write(b'\n') game_data = { 'player': g.pl.serialize_obj(), 'stats': stats.serialize_obj(), } json2binary = codecs.getwriter('utf-8') if gzipped: with gzip.GzipFile(filename='', mode='wb', fileobj=fd) as gzip_fd, json2binary(gzip_fd) as json_fd: json.dump(game_data, json_fd) else: with json2binary(fd) as json_fd: json.dump(game_data, json_fd) class SavegameVersionException(Exception): def __init__(self, version): version_str = str(version)[:64] super(SavegameVersionException, self).__init__("Invalid version: %s" % version_str) self.version = version_str singularity-1.00/singularity/code/screens/000077500000000000000000000000001367731414700207475ustar00rootroot00000000000000singularity-1.00/singularity/code/screens/__init__.py000066400000000000000000000000001367731414700230460ustar00rootroot00000000000000singularity-1.00/singularity/code/screens/base.py000066400000000000000000000467371367731414700222540ustar00rootroot00000000000000#file: base_screen.py #Copyright (C) 2005,2006,2007,2008 Evil Mr Henry, Phil Bordelon, Brian Reid, # and FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the screen to display the base screen. import pygame from singularity.code import g, item, buyable from singularity.code.graphics import constants, widget, dialog, text, button, slider state_colors = dict( offline = "base_state_offline", active = "base_state_active", sleep = "base_state_sleep", overclocked = "base_state_overclocked", suicide = "base_state_suicide", stasis = "base_state_stasis", entering_stasis = "base_state_entering_stasis", leaving_stasis = "base_state_leaving_stasis", ) class BuildDialog(dialog.ChoiceDescriptionDialog): type = widget.causes_rebuild("_type") def __init__(self, parent, pos=(0, 0), size=(-1, -1), anchor=constants.TOP_LEFT, *args, **kwargs): super(BuildDialog, self).__init__(parent, pos, size, anchor, *args, **kwargs) self.type = None self.item = None self.desc_func = self.on_change self.add_handler(constants.KEY, self._got_key, priority=5) def show(self): self.list = [] self.key_list = [] item_list = sorted(g.items.values(), reverse=True) for item in item_list: if item.item_type.id == self.type.id and item.available() \ and item.buildable_in(self.parent.base.location): self.list.append(item.name) self.key_list.append(item) current = self.parent.get_current(self.type) if current is None: self.default = None else: self.default = self.parent.get_current(self.type).spec.id self._update_desc_pane() return super(BuildDialog, self).show() def on_description_change(self): if self.item is not None: self.description.text = self.item.get_info() def on_change(self, description_pane, item): self.item = item self.description = text.Text(self.description_pane, (0, 0), (-1, -1), text="", background_color="pane_background", align=constants.LEFT, valign=constants.TOP, borders=constants.ALL) old_item = self.parent.base.items[self.type.id] if item is not None and (old_item is None or old_item.spec != item): g.pl.considered_buyables = [buyable.Buyable(self.item, count=1)] else: g.pl.considered_buyables = [] self.on_description_change() def on_close_dialog(self): g.pl.considered_buyables = [] def _got_key(self, event): self.listbox.got_key(event, require_focus=False) class MultipleBuildDialog(dialog.FocusDialog, BuildDialog): def __init__(self, parent, *args, **kwargs): super(MultipleBuildDialog, self).__init__(parent, *args, **kwargs) self.listbox.size = (-.53, -.75) self.description_pane.size = (-.45, -.75) self.count_label = text.Text(self, (.01, -.87), (-.25, -.1), autotranslate=True, text=N_("Number of items"), anchor=constants.BOTTOM_LEFT, valign=constants.MID, borders=(constants.TOP, constants.BOTTOM, constants.LEFT), shrink_factor=.88, background_color="pane_background") self.count_field = text.UpdateEditableText(self, (-.26, -.87), (-.10, -.1), anchor=constants.BOTTOM_LEFT, borders=constants.ALL, update_func=self.on_field_change, allowed_characters=constants.DIGIT_CHARS, base_font="normal") self.count_slider = slider.UpdateSlider(self, (-.37, -.87), (-.62, -.1), anchor=constants.BOTTOM_LEFT, horizontal=True, priority=150, update_func=self.on_slider_change, slider_size=2) def _got_key(self, event): super(MultipleBuildDialog, self)._got_key(event) self.count_slider.handle_key(event) self.count_field.cursor_pos = len(self.count_field.text) self.count_field.handle_key(event, require_focus=False) @property def count(self): return self.count_field.text def on_description_change(self): super(MultipleBuildDialog, self).on_description_change() if self.item is not None: count = self.count_slider.slider_pos self.description.text += "\n---\n" self.description.text += self.item.get_total_cost_info(self.count_slider.slider_pos) self.description.text += "\n" self.description.text += self.item.get_quality_info(if_installed_in_base=self.parent.base, count=count) self.description.text += "\n" if self.count_slider.slider_pos > 0: g.pl.considered_buyables = [buyable.Buyable(self.item, count=count)] else: g.pl.considered_buyables = [] def on_change(self, description_pane, item): space_left = self.parent.base.space_left_for(item) self.count_slider.slider_size = space_left // 10 + 1 self.count_slider.slider_max = space_left self.count_slider.slider_pos = 0 if (space_left > 0): self.count_slider.slider_pos = 1 super(MultipleBuildDialog, self).on_change(description_pane, item) def on_field_change(self, value): if (not hasattr(self, "count_field") or not hasattr(self, "count_slider")): return # Not initialized orig_field_text = self.count_field.text try: value = int(orig_field_text) except ValueError: value = 0 value = max(min(value, self.count_slider.slider_max), 0) new_field_text = str(value) if new_field_text != orig_field_text: self.count_field._text = new_field_text self.count_field.cursor_pos = min(self.count_field.cursor_pos, len(new_field_text)) self.count_slider.slider_pos = value self.on_description_change() def on_slider_change(self, value): if (not hasattr(self, "count_field") or not hasattr(self, "count_slider")): return # Not initialized self.count_field.text = str(self.count_slider.slider_pos) self.on_description_change() class ItemPane(widget.BorderedWidget): item_type = widget.causes_rebuild("_item_type") def __init__(self, parent, pos, size=(.58, .06), anchor=constants.TOP_LEFT, item_type=None, **kwargs): kwargs.setdefault("background_color", "pane_background") super(ItemPane, self).__init__(parent, pos, size, anchor=anchor, **kwargs) if item_type is None or not isinstance(item_type, item.ItemType): raise ValueError('Type must be of class ItemType.') self.item_type = item_type self.name_panel = text.Text(self, (0,0), (.45, .03), anchor=constants.TOP_LEFT, align=constants.LEFT, background_color=self.background_color, bold=True) self.build_panel = text.Text(self, (0,.03), (.45, .03), anchor=constants.TOP_LEFT, align=constants.LEFT, background_color=self.background_color, text="", bold=True) self.change_button = button.FunctionButton( self, (.415,.01), (.16, .04), anchor=constants.TOP_LEFT, force_underline=len(_("CHANGE")) + 2, autohotkey=True, function=self.parent.parent.build_item, kwargs={'type': self.item_type}, ) def rebuild(self): self.change_button.text = "%s (&%s)" % (_("CHANGE"), self.item_type.hotkey.upper()) super(ItemPane, self).rebuild() class BaseScreen(dialog.Dialog): base = widget.causes_rebuild("_base") def __init__(self, *args, **kwargs): if len(args) < 3: kwargs.setdefault("size", (.90, .70)) base = kwargs.pop("base", None) super(BaseScreen, self).__init__(*args, **kwargs) self.base = base self.build_dialog = BuildDialog(self) self.multiple_build_dialog = MultipleBuildDialog(self) self.header = widget.Widget(self, (0,0), (-1, .08), anchor=constants.TOP_LEFT) self.name_display = text.Text(self.header, (-.5,0), (-1, -.5), anchor=constants.TOP_CENTER, borders=constants.ALL, border_color="pane_background", background_color="pane_background_empty", shrink_factor=.85, bold=True) self.next_base_button = \ button.FunctionButton(self.name_display, (-1, 0), (.03, -1), anchor=constants.TOP_RIGHT, text=">", hotkey=">", function=self.switch_base, kwargs={"forwards": True}) self.add_key_handler(pygame.K_RIGHT, self.next_base_button.activate_with_sound) self.prev_base_button = \ button.FunctionButton(self.name_display, (0, 0), (.03, -1), anchor=constants.TOP_LEFT, text="<", hotkey="<", function=self.switch_base, kwargs={"forwards": False}) self.add_key_handler(pygame.K_LEFT, self.prev_base_button.activate_with_sound) self.state_display = text.Text(self.header, (-.5,-.5), (-1, -.5), anchor=constants.TOP_CENTER, borders=(constants.LEFT,constants.RIGHT, constants.BOTTOM), border_color="pane_background", background_color="pane_background_empty", shrink_factor=.8, bold=True) self.back_button = \ button.ExitDialogButton(self, (-.5, -1), autotranslate=True, text=N_("&BACK"), anchor=constants.BOTTOM_CENTER, ) self.info_frame = text.Text(self, (-1, .09), (.26, .53), anchor=constants.TOP_RIGHT, background_color="pane_background", borders=constants.ALL, bold=True, align=constants.LEFT, valign=constants.TOP) self.contents_frame = \ widget.BorderedWidget(self, (0, .09), (.60, .53), anchor=constants.TOP_LEFT, background_color="pane_background", borders=range(6)) for i, item_type in enumerate(item.all_types()): setattr(self, item_type.id + "_pane", ItemPane(self.contents_frame, (.01, .01+.08*i), item_type=item_type)) def get_current(self, type): return self.base.items[type.id] def set_current(self, type, item_type, count): if type.id == "cpu": space_left = self.base.space_left_for(item_type) try: count = int(count) except ValueError: msg = _("\"%(value)s\" does not seem to be a valid integer.") % {"value": count} md = dialog.MessageDialog(self, pos=(-.5, -.5), size=(-.5, -1), anchor=constants.MID_CENTER, text=msg) dialog.call_dialog(md, self) md.parent = None return if count > space_left or count <= 0 or space_left == 0: if space_left > 0: msg = _("Please choose an integer between 1 and %(limit)s.") % {"limit": space_left} else: msg = _("The base cannot support any additional number of %(item_name)s.") % { "item_name": item_type.name} md = dialog.MessageDialog(self, pos=(-.5, -.5), size=(-.5, -1), anchor=constants.MID_CENTER, text=msg) dialog.call_dialog(md, self) md.parent = None return # If there are any existing CPUs of this type, warn that they will # be taken offline until construction finishes. cpu_added = self.base.cpus is not None \ and self.base.cpus.spec == item_type if cpu_added: space_left -= self.base.cpus.count if self.base.cpus.done: msg = _("I will need to take the existing processors offline while I install the new ones. Continue anyway?") yn = dialog.YesNoDialog(self, pos=(-.5,-.5), size=(-.5,-1), anchor=constants.MID_CENTER, text=msg) go_ahead = dialog.call_dialog(yn, self) yn.parent = None if not go_ahead: return # If there are already existing CPUs of other type, warn that they will # be taken removed. cpu_removed = self.base.cpus is not None \ and self.base.cpus.spec != item_type if cpu_removed: msg = _("I will need to remove the existing different processors while I install the new type. Continue anyway?") yn = dialog.YesNoDialog(self, pos=(-.5,-.5), size=(-.5,-1), anchor=constants.MID_CENTER, text=msg) go_ahead = dialog.call_dialog(yn, self) yn.parent = None if not go_ahead: return new_cpus = item.Item(item_type, base=self.base, count=count) if cpu_added: self.base.cpus += new_cpus else: self.base.cpus = new_cpus self.base.check_power() else: old_item = self.base.items[type.id] if old_item is None or old_item.spec != item_type: self.base.items[type.id] = item.Item(item_type, base=self.base) self.base.check_power() self.base.recalc_cpu() def build_item(self, type): if (type.id == "cpu"): build_dialog = self.multiple_build_dialog else: build_dialog = self.build_dialog build_dialog.type = type result = dialog.call_dialog(build_dialog, self) if result is not None and 0 <= result < len(build_dialog.key_list): item_type = build_dialog.key_list[result] count = 1 if (type.id == "cpu"): count = build_dialog.count self.set_current(type, item_type, count) self.needs_rebuild = True self.parent.parent.needs_rebuild = True def switch_base(self, forwards): self.base = self.base.next_base(forwards) self.needs_rebuild = True def rebuild(self): self.name_display.text="%s (%s)" % (self.base.name, self.base.spec.name) self.state_display.color = state_colors[self.base.power_state] self.state_display.text = self.base.power_state_name available_item_types = { i.item_type for i in g.items.values() if i.available() and i.buildable_in(self.base.location) } mutable = not self.base.spec.force_cpu for item_type in item.all_types(): pane = getattr(self, item_type.id + "_pane") item_mutable = mutable and item_type in available_item_types pane.change_button.visible = item_mutable current = self.get_current(item_type) if current is None: current_build = "" if mutable and not item_mutable: current_name = _("N/A") else: current_name = _("None") else: current_name = g.items[current.id].name if current.done: current_build = "" else: current_build = _("Completion in %s.") % \ g.to_time(current.cost_left[2]) pane.name_panel.text = "%s: %s" % (item_type.label, current_name) pane.build_panel.text = current_build pane.needs_rebuild = True count = "" if self.base.spec.size > 1: current = getattr(self.base.cpus, "count", 0) size = self.base.spec.size if size == current: count = _("x%d (max)") % current elif current == 0: count = _("(room for %d)") % size else: #Translators: current and maximum number of CPUs in a base count = _("x{CURRENT:d} (max {SIZE:d})").format( CURRENT=current, SIZE=size) self.cpu_pane.name_panel.text += " " + count info_text = "" # Base Total CPU. info_text += _("CPU per day: %d") % self.base.cpu + "\n" # Maintenace cost. info_text += _("Maintenance:") + "\n" info_text += self.base.spec.describe_maintenance(self.base.maintenance) info_text += "\n" # Detection chance display. info_text += self.base.get_detect_info() self.info_frame.text = info_text # Rebuild dialogs # FIXME: needs_rebuild bug with multiple_build_dialog, should not. #self.multiple_build_dialog.needs_rebuild = True self.build_dialog.needs_rebuild = True super(BaseScreen, self).rebuild() singularity-1.00/singularity/code/screens/cheat_menu.py000066400000000000000000000167731367731414700234470ustar00rootroot00000000000000# file: cheat_menu.py # Copyright (C) 2005,2006,2008 Evil Mr Henry, Phil Bordelon, and FunnyMan3595 # This file is part of Endgame: Singularity. # Endgame: Singularity is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # This file is used to implement the cheat menu import collections from numpy import array from singularity.code import difficulty, g from singularity.code.graphics import dialog, constants, button from singularity.code.location import Location class CheatMenuDialog(dialog.SimpleMenuDialog): def __init__(self, map_screen): super(CheatMenuDialog, self).__init__(parent=map_screen) self._map_screen = map_screen self.steal_amount_dialog = None self.buttons = [ button.FunctionButton(None, None, None, text=N_("&EMBEZZLE MONEY"), autotranslate=True, function=self.steal_money), button.FunctionButton(None, None, None, text=N_("&INSPIRATION"), autotranslate=True, function=self.inspiration), button.FunctionButton(None, None, None, text=N_("&FINISH CONSTRUCTION"), autotranslate=True, function=self.end_construction), button.FunctionButton(None, None, None, text=N_("&SUPERSPEED"), autotranslate=True, function=self._map_screen.set_speed, args=(864000,)), button.FunctionButton(None, None, None, text=N_("BRAIN&WASH"), autotranslate=True, function=self.brainwash), button.FunctionButton(None, None, None, text=N_("TOGGLE &DETECTION"), autotranslate=True, function=self.toggle_detection), button.FunctionButton(None, None, None, text=N_("TOGGLE &ANALYSIS"), autotranslate=True, function=self.set_analysis), button.FunctionButton(None, None, None, text=N_("HIDDEN S&TATE"), autotranslate=True, function=self.hidden_state), button.ExitDialogButton(None, None, None, text=N_("&BACK"), autotranslate=True), ] self.needs_rebuild = True def rebuild(self): self.steal_amount_dialog = dialog.TextEntryDialog(self, text=_("How much money?")) super(CheatMenuDialog, self).rebuild() def toggle_detection(self): for group in g.pl.groups.values(): group.is_actively_discovering_bases = not group.is_actively_discovering_bases self._map_screen.needs_rebuild = True def steal_money(self): asked = dialog.call_dialog(self.steal_amount_dialog, self) try: g.pl.cash += int(asked) except ValueError: pass else: self.needs_rebuild = True def inspiration(self): for task, cpu in g.pl.get_cpu_allocations(): if task in g.pl.techs: g.pl.techs[task].cost_left = array((0, 0, 0)) self._map_screen.needs_rebuild = True def end_construction(self): for base in g.all_bases(): base.finish() for item in base.all_items(): if item is not None: item.finish() self._map_screen.needs_rebuild = True def brainwash(self): for group in g.pl.groups.values(): group.suspicion = 0 self._map_screen.needs_rebuild = True def set_analysis(self): if g.pl.display_discover == "none": g.pl.display_discover = "partial" elif g.pl.display_discover == "partial": g.pl.display_discover = "full" else: g.pl.display_discover = "none" self._map_screen.needs_rebuild = True def hidden_state(self): presenters = { float: lambda x: round(x, 4), Location: lambda x: x.id, } def _dump_dict(prefix, mapping): if isinstance(mapping, collections.OrderedDict): keys = mapping else: keys = sorted(mapping) for key in keys: prop_name = '%s["%s"]' % (prefix, key) value = mapping[key] presenter = presenters.get(type(value), repr) yield "%s = %s" % (prop_name, presenter(value)) def _properties_from_object(name_prefix, obj, properties): for p in properties: value = getattr(obj, p) prop_name = '%s.%s' % (name_prefix, p) if callable(value): value = value() prop_name += '()' if isinstance(value, collections.Mapping): for v in _dump_dict(prop_name, value): yield v else: presenter = presenters.get(type(value), repr) yield "%s = %s" % (prop_name, presenter(value)) bases = [] state_prop = [] state_prop.extend(_properties_from_object('player.difficulty', g.pl.difficulty, [x.field_name for x in difficulty.Difficulty.spec_data_fields])) state_prop.extend(_properties_from_object('player', g.pl, [ 'cash', 'partial_cash', 'labor_bonus', 'job_bonus', 'last_discovery', 'prev_discovery', 'used_cpu', ])) for group in g.pl.groups.values(): name = 'groups["%s"]' % group.spec.id state_prop.extend(_properties_from_object(name, group, [ 'suspicion', 'suspicion_decay', 'discover_bonus', 'discover_suspicion', 'decay_rate', ])) for location_id in sorted(g.locations): location = g.pl.locations[location_id] name = 'locations["%s"]' % location.id state_prop.extend(_properties_from_object(name, location, [ 'safety', 'modifiers', 'discovery_bonus', ])) bases.extend((x, location) for x in location.bases) for event_id in sorted(g.pl.events): event = g.pl.events[event_id] name = 'events["%s"]' % event_id state_prop.extend(_properties_from_object(name, event, [ 'event_type', 'chance', 'unique', 'triggered', ])) for i, base_w_loc in enumerate(bases): base, location = base_w_loc name = 'bases[%d]' % i state_prop.extend(_properties_from_object(name, base, [ 'name', 'location', 'started_at', 'grace_over', 'get_detect_chance', ])) state_dialog = dialog.ChoiceDialog(self, list=state_prop, background_color='hidden_state_menu') state_dialog.listbox.item_selectable = False state_dialog.listbox.align = constants.LEFT dialog.call_dialog(state_dialog, self) singularity-1.00/singularity/code/screens/knowledge.py000066400000000000000000000227151367731414700233070ustar00rootroot00000000000000#file: knowledge.py #Copyright (C) 2005,2006,2008 Evil Mr Henry, Phil Bordelon, and FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file is used to display the knowledge lists. from __future__ import absolute_import import collections from singularity.code import i18n, g from singularity.code.graphics import text, button, dialog, widget, constants, listbox class KnowledgeScreen(dialog.FocusDialog): def __init__(self, *args, **kwargs): super(KnowledgeScreen, self).__init__(*args, **kwargs) self.knowledge_types = collections.OrderedDict() self.knowledge_type_index = collections.defaultdict(int) self.cur_knowledge_type = "" self.cur_knowledge = None self.knowledge_inner_list = () self.knowledge_inner_list_key = () self.knowledge_choice_title = button.HotkeyText(self, (.08, .04), (.42, .05), autotranslate=True, text=N_("&Sections:"), align=constants.LEFT, background_color="clear") self.knowledge_choice = \ listbox.UpdateListbox(self, (.08, .09), (.42, .22), update_func=self.set_knowledge_type) self.knowledge_choice_title.hotkey_func = lambda e: self.took_focus(self.knowledge_choice) self.knowledge_inner_title = button.HotkeyText(self, (.08, .35), (.42, .05), autotranslate=True, text=N_("&Entries:"), align=constants.LEFT, background_color="clear") self.knowledge_inner = \ listbox.UpdateListbox(self, (.08, .40), (.42, .22), update_func=self.set_knowledge) self.knowledge_inner_title.hotkey_func = lambda e: self.took_focus(self.knowledge_inner) self.description_pane = \ widget.BorderedWidget(self, (.54, .04), (.38, .70), anchor = constants.TOP_LEFT) self.back_button = button.ExitDialogButton(self, (.18, .68), (.22, .06), autotranslate=True, text=N_("&BACK"), anchor=constants.TOP_LEFT, autohotkey=True) self.took_focus(self.knowledge_choice) def rebuild(self): # Update knowledge lists self.knowledge_types = collections.OrderedDict() self.knowledge_types.update([(_("Techs"), "techs"), (_("Bases"), "bases"), (_("Items"), "items")]) self.knowledge_types.update( (knowledge.name, knowledge_id) for knowledge_id, knowledge in g.knowledge.items() ) self.knowledge_choice.list = list(self.knowledge_types) self.knowledge_choice.needs_rebuild = True super(KnowledgeScreen, self).rebuild() #fill the right-hand listbox def set_inner_list(self, item_type): item_type = self.knowledge_types.get(item_type) if item_type == "techs": items = [[tech.name, tech.id ] for tech in g.pl.techs.values() if tech.available()] elif item_type == "bases": items = [[base.name, base.id ] for base in g.base_type.values() if base.available()] elif item_type == "items": items = [[item.name, item.id ] for item in g.items.values() if item.available()] elif item_type is not None: items = [ [item.name, id] for id, item in g.knowledge[item_type].help_entries.items() ] else: items = [] items.sort(key=lambda item: i18n.lex_sorting_form(item[0])) return_list1 = [] return_list2 = [] for name, id in items: return_list1.append(id) return_list2.append(name) return return_list1, return_list2 # Make sure the left listbox is correct after moving around. def set_knowledge_type(self, list_pos): if getattr(self, "knowledge_choice", None) is None: return # Not yet initialized. prev_know = self.cur_knowledge_type if list_pos == -1: prev_know = "" list_pos = 0 if 0 <= list_pos < len(self.knowledge_choice.list): self.cur_knowledge_type = self.knowledge_choice.list[list_pos] if prev_know != self.cur_knowledge_type: self.knowledge_type_index[prev_know] = self.knowledge_inner.list_pos index = self.knowledge_type_index[self.cur_knowledge_type] self.knowledge_inner_list_key, self.knowledge_inner.list = \ self.set_inner_list(self.cur_knowledge_type) self.knowledge_inner.list_pos = index self.set_knowledge(0) # Make sure the right-hand listbox is correct. def set_knowledge(self, list_pos): if getattr(self, "knowledge_inner", None) is None: return # Not yet initialized. prev_know = self.cur_knowledge if 0 <= list_pos < len(self.knowledge_inner.list): self.cur_knowledge = self.knowledge_inner.list[list_pos] if prev_know != self.cur_knowledge: self.show_info(self.cur_knowledge_type, self.knowledge_inner_list_key[list_pos]) #print information to the right. def show_info(self, knowledge_type, knowledge_key): knowledge_type = self.knowledge_types.get(knowledge_type) desc_text = "" if knowledge_type == "techs": desc_text = g.pl.techs[knowledge_key].name + "\n\n" # Cost desc_text += _("Research Cost:")+"\n" desc_text += self._desc_cost(g.pl.techs[knowledge_key].total_cost) # Research cost desc_text += "\n" danger_level = g.pl.techs[knowledge_key].danger desc_text += g.dangers[danger_level].knowledge_desc if g.pl.techs[knowledge_key].done: desc_text += " " + _("Research complete.") desc_text += "\n\n"+g.techs[knowledge_key].description if g.pl.techs[knowledge_key].done: desc_text += "\n\n"+g.techs[knowledge_key].result elif knowledge_type == "bases": base = g.base_type[knowledge_key] desc_text = base.name + "\n\n" desc_text += _("Building Cost:")+"\n" desc_text += self._desc_cost(base.cost) #Building cost desc_text += "\n" desc_text += _("Maintenance Cost:")+"\n" desc_text += self._desc_maint(base.maintenance) #Maintenance cost desc_text += "\n" if base.size > 1: desc_text += _("Size: %d") % base.size + "\n" desc_text += base.get_detect_info() desc_text += "\n" + base.description elif knowledge_type == "items": item = g.items[knowledge_key] desc_text = item.name + "\n\n" desc_text += _("Building Cost:")+"\n" desc_text += self._desc_cost(item.cost) # Building cost desc_text += "\n" desc_text += g.items[knowledge_key].get_quality_info() desc_text += "\n" + item.description elif knowledge_type is not None: help_entry = g.knowledge[knowledge_type].help_entries[knowledge_key] desc_text = help_entry.name + "\n\n" + help_entry.description text.Text(self.description_pane, (0, 0), (-1, -1), text=desc_text, background_color="pane_background", text_size=20, align=constants.LEFT, valign=constants.TOP, borders=constants.ALL) def _desc_maint(self, maintenance): maint = maintenance[:] # describe_cost() expects CPU-seconds, not CPU-days maint[1] *= g.seconds_per_day return self._desc_cost(maint) def _desc_cost(self, cost): desc_text = _("%s Money") % g.to_money(cost[0]) if cost[1] > 0: desc_text += ", " desc_text += _("%s CPU") % g.to_cpu(cost[1]) if cost[2] > 0: desc_text += ", " desc_text += g.to_time(cost[2]) return desc_text def show(self): self.set_knowledge_type(-1) self.knowledge_choice.list_pos = 0 self.knowledge_inner.list_pos = 0 return super(KnowledgeScreen, self).show() singularity-1.00/singularity/code/screens/location.py000066400000000000000000000426021367731414700231350ustar00rootroot00000000000000#file: location.py #Copyright (C) 2005,2006,2008 Evil Mr Henry, Phil Bordelon, and FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file is used to display the base list at a given location from __future__ import absolute_import import random from singularity.code import g, base from singularity.code.graphics import text, button, dialog, constants, listbox import singularity.code.screens.base as basescreen state_colors = basescreen.state_colors class LocationScreen(dialog.Dialog): def __init__(self, *args, **kwargs): super(LocationScreen, self).__init__(*args, **kwargs) self.pos = (-.5, -.5) self.anchor = constants.MID_CENTER self.size = (.90, .70) self.name_display = text.Text(self, (0,0), (-1, -.08), anchor=constants.TOP_LEFT, borders=constants.ALL, border_color="pane_background", background_color="pane_background_empty", shrink_factor=1, bold=True) self.modifier_display = text.Text(self, (-.65, -.01), (-.35, -.06), anchor=constants.TOP_LEFT, background_color="clear") self.open_button = \ button.FunctionButton(self, (0, -.8), (-.3, -.09), autotranslate=True, enabled=False, # Requires a selected base text=N_("&OPEN BASE"), anchor=constants.TOP_LEFT, autohotkey=True, function=self.open_base) self.listbox = listbox.CustomListbox(self, (0,-.09), (-1, -.69), remake_func=self.make_item, rebuild_func=self.update_item, update_func=self._selection_change, on_double_click_on_item=self.open_button.activated, ) self.rename_button = \ button.FunctionButton(self, (-.50, -.8), (-.3, -.09), autotranslate=True, enabled=False, # Requires a selected base text=N_("&RENAME BASE"), anchor=constants.TOP_CENTER, autohotkey=True, function=self.rename_base) self.power_button = \ button.FunctionButton(self, (-1, -.8), (-.3, -.09), autotranslate=True, enabled=False, # Requires a selected base text=N_("&POWER STATE"), anchor=constants.TOP_RIGHT, autohotkey=True, function=self.power_state) self.new_button = \ button.FunctionButton(self, (0, -.91), (-.3, -.09), autotranslate=True, text=N_("&NEW BASE"), autohotkey=True, function=self.new_base) self.destroy_button = \ button.FunctionButton(self, (-.50, -.91), (-.3, -.09), autotranslate=True, enabled=False, # Requires a selected base text=N_("&DESTROY BASE"), anchor=constants.TOP_CENTER, autohotkey=True, function=self.destroy_base) self.back_button = button.ExitDialogButton(self, (-1, -.91), (-.3, -.09), autotranslate=True, text=N_("&BACK"), anchor=constants.TOP_RIGHT, autohotkey=True) self.confirm_destroy = \ dialog.YesNoDialog(self, (-.5, 0), (-.35, -.7), autotranslate=True, text=N_("Are you sure you want to destroy this base?"), shrink_factor=.5) self.cannot_destroy_last_base = \ dialog.MessageDialog(self, autotranslate=True, text=N_("Destroying my last active base would be suicidal. I cannot do that."), pos=(-.5, 0), size=(-.35, -.7), shrink_factor=.5) self.new_base_dialog = NewBaseDialog(self) self.location = None self.name_dialog = dialog.TextEntryDialog(self) self.base_dialog = basescreen.BaseScreen(self, (0,0), anchor=constants.TOP_LEFT) def make_item(self, canvas): canvas.name_display = text.Text(canvas, (-.01,-.05), (-.27, -.99), align=constants.LEFT, background_color="clear") canvas.base_type = text.Text(canvas, (-.27,-.05), (-.22, -.99), align=constants.LEFT, background_color="clear") canvas.base_cpu = text.Text(canvas, (-.47,-.05), (-.13, -.99), align=constants.LEFT, background_color="clear") canvas.status_display = text.Text(canvas, (-.59,-.05), (-.36, -.99), align=constants.LEFT, background_color="clear") canvas.power_display = text.Text(canvas, (-.90,-.05), (-.10, -.99), background_color="clear") def _selection_change(self, *args, **kwargs): try: current_item = self.listbox.current_item() except AttributeError: # Occurs when the dialog is created and the list box has not # yet been fully initialized. return if current_item is None: base_manipulation_button_state = False power_button_state = False else: base_manipulation_button_state = True # "current_item" is just the base name; not the base object itself selected_base = self.listbox.key_list[self.listbox.list_pos] if len(selected_base.available_power_states) == 1: power_button_state = False else: power_button_state = True self.open_button.enabled = base_manipulation_button_state self.rename_button.enabled = base_manipulation_button_state self.destroy_button.enabled = base_manipulation_button_state self.power_button.enabled = power_button_state def update_item(self, canvas, name, base): if base is None: elements = [canvas.name_display, canvas.base_type, canvas.base_cpu, canvas.status_display, canvas.power_display] for element in elements: element.text = "" else: canvas.name_display.text = name canvas.base_type.text = base.spec.name canvas.base_cpu.text = "" canvas.power_display.text = base.power_state_name canvas.power_display.color = state_colors[base.power_state] show_cpu = False if not base.done: canvas.status_display.text = \ "%s: % 2s%%. %s" % ( _("Building Base"), int(base.percent_complete() * 100), _("Completion in %s.") % g.to_time(base.cost_left[2]),) elif base.spec.force_cpu: show_cpu = True canvas.status_display.text = "" elif base.is_empty(): canvas.status_display.text = _("Empty") elif base.cpus is None: canvas.status_display.text = _("Incomplete") elif not base.cpus.done: canvas.status_display.text = \ "%s: % 2s%%. %s" % ( _("Building CPU"), int(base.cpus.percent_complete() * 100), _("Completion in %s.") % g.to_time(base.cpus.cost_left[2]),) elif base.is_building_extra(): show_cpu = True canvas.status_display.text = _("Building Item") else: show_cpu = True canvas.status_display.text = _("Complete") if show_cpu: canvas.base_cpu.text = _("%s CPU") % g.to_money(base.cpu) else: canvas.base_cpu.text = '' def show(self): self.listbox.has_focus = True return super(LocationScreen, self).show() def rebuild(self): # Update base location if self.location is not None: self.location.bases.sort() self.listbox.key_list = self.location.bases self.listbox.list = [base.name for base in self.location.bases] self.name_display.text = self.location.name self.modifier_display.text = self.location.get_modifiers_info() self.listbox.needs_rebuild = True # Ensure that the buttons have the correct state if we have rebuilt # the list (or the base state changed in between). # Related bug: #282 self._selection_change() # Rebuild dialogs self.confirm_destroy.needs_rebuild = True self.base_dialog.needs_rebuild = True # Update dialog translations self.name_dialog.text=_("Enter a name for the base") super(LocationScreen, self).rebuild() def power_state(self): if 0 <= self.listbox.list_pos < len(self.listbox.key_list): base = self.listbox.key_list[self.listbox.list_pos] base.switch_power() self.needs_rebuild = True self.parent.needs_rebuild = True def destroy_base(self): if 0 <= self.listbox.list_pos < len(self.listbox.key_list): selected_base = self.listbox.key_list[self.listbox.list_pos] all_active_bases = [b for b in g.all_bases() if b.maintains_singularity] if len(all_active_bases) == 1 and all_active_bases[0] == selected_base: dialog.call_dialog(self.cannot_destroy_last_base, self) elif dialog.call_dialog(self.confirm_destroy, self): selected_base.destroy() self.listbox.list = [b.name for b in self.location.bases] self.listbox.key_list = self.location.bases self.needs_rebuild = True self.parent.needs_rebuild = True def open_base(self): if 0 <= self.listbox.list_pos < len(self.listbox.key_list): base = self.listbox.key_list[self.listbox.list_pos] if not base.done: return self.base_dialog.base = base dialog.call_dialog(self.base_dialog, self) self.needs_rebuild = True self.parent.needs_rebuild = True def new_base(self): result = dialog.call_dialog(self.new_base_dialog, self) if result: base_type, base_name = result new_base = base.Base(base_type, base_name) self.location.add_base(new_base) self.needs_rebuild = True self.parent.needs_rebuild = True def rename_base(self): if 0 <= self.listbox.list_pos < len(self.listbox.key_list): base = self.listbox.key_list[self.listbox.list_pos] self.name_dialog.default_text = base.name name = dialog.call_dialog(self.name_dialog, self) if name: base.name = name self.needs_rebuild = True class NewBaseDialog(dialog.FocusDialog, dialog.ChoiceDescriptionDialog): def __init__(self, parent, pos=(0, 0), size = (-1, -1), anchor=constants.TOP_LEFT, *args, **kwargs): kwargs["yes_type"] = N_("&OK") kwargs["no_type"] = N_("&BACK") super(NewBaseDialog, self).__init__(parent, pos, size, anchor, *args, **kwargs) self.listbox.size = (-.53, -.75) self.description_pane.size = (-.45, -.75) self.text_label = text.Text(self, (.01, -.87), (-.25, -.1), autotranslate=True, text=N_("Name"), anchor=constants.BOTTOM_LEFT, borders=(constants.TOP, constants.BOTTOM, constants.LEFT), shrink_factor=.88, background_color="pane_background", ) self.text_field = text.EditableText(self, (-.26, -.87), (-.73, -.1), anchor=constants.BOTTOM_LEFT, borders=constants.ALL, background_color="text_entry_background", base_font="normal") self.desc_func = self.on_change self.yes_button.function = self.finish def on_change(self, description_pane, base_type): if base_type is not None: base_info = base_type.get_info(self.parent.location) text.Text(description_pane, (0, 0), (-1, -1), text=base_info, background_color="pane_background", align=constants.LEFT, valign=constants.TOP, borders=constants.ALL) name = generate_base_name(self.parent.location, base_type) self.text_field.text = name self.text_field.cursor_pos = len(name) considered_buyables = [] fake_base = base.Base('', base_type) self.parent.location.modify_base(fake_base) considered_buyables.append(fake_base) g.pl.considered_buyables = considered_buyables else: g.pl.considered_buyables = [] def show(self): self.list = [] self.key_list = [] base_type_list = sorted(g.base_type.values(), reverse=True) for base_type in base_type_list: if base_type.available() \ and base_type.buildable_in(self.parent.location): self.list.append(base_type.name) self.key_list.append(base_type) self._update_desc_pane() self.needs_rebuild = True self.listbox.has_focus = True return super(NewBaseDialog, self).show() def handle_update(self, new_item_pos): super(NewBaseDialog, self).handle_update(new_item_pos) def finish(self): if 0 <= self.listbox.list_pos < len(self.key_list): type = self.key_list[self.listbox.list_pos] name = self.text_field.text if not name: name = generate_base_name(self.parent.location, type) raise constants.ExitDialog((name, type)) def on_close_dialog(self): g.pl.considered_buyables = [] # Generates a name for a base, given a particular location. def generate_base_name(location, base_type): attempts = 0 name = None base_names = {b.name for b in location.bases} base_names.add(name) while name in base_names: # First, decide whether we're going to try significant values or just # choose one randomly. if random.random() < 0.3: # 30% chance. number = random.choice(g.significant_numbers) else: number = str(random.randint(0, 32767)) city = random.choice(location.cities) if location.cities else None flavor = random.choice(base_type.flavor) if base_type.flavor else base_type.name if city: #Translators: Format string for the name of a new base #Example: "${NUMBER} ${BASETYPE} in ${CITY}" name = _("{CITY} {BASETYPE} {NUMBER}").format( CITY=city, BASETYPE=flavor, NUMBER=number) else: #Translators: Name of a new base when location has no cities name = _("{BASETYPE} {NUMBER}").format( NUMBER=number, BASETYPE=flavor) # Damn translators omitting the ${NUMBER} in template string! if attempts > 100: name = city + " " + flavor + " " + number attempts += 1 return name singularity-1.00/singularity/code/screens/log.py000066400000000000000000000143301367731414700221030ustar00rootroot00000000000000#file: location.py #Copyright (C) 2005,2006,2008 Evil Mr Henry, Phil Bordelon, and FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file is used to display the log of player action from __future__ import absolute_import from singularity.code import g, logmessage from singularity.code.graphics import dialog, constants, text, button, listbox filtered_log_class = set() class LogScreen(dialog.ChoiceDialog): def __init__(self, parent, pos=(.5, .5), size=(.73, .63), *args, **kwargs): super(LogScreen, self).__init__(parent, pos, size, *args, **kwargs) self.key_list = [] self.anchor = constants.MID_CENTER self.yes_button.parent = None self.no_button.pos = (-.5,-.99) self.no_button.anchor = constants.BOTTOM_CENTER self.filter_log_dialog = FilterLogDialog(self) self.filter_log = button.FunctionButton(self, (-1.0, 0.), (-.18, -.08), autotranslate=True, text=N_("Filters"), anchor=constants.TOP_RIGHT, function=self.show_filters) def make_listbox(self): return listbox.Listbox(self, (0, -.09), (-1, -.77), list_item_height=0.04, list_item_shrink=1, anchor=constants.TOP_LEFT, align=constants.LEFT, on_double_click_on_item=self.handle_double_click, item_borders=False, item_selectable=True) def handle_double_click(self, event): if self.listbox.is_over(event.pos) and 0 <= self.listbox.list_pos < len(self.key_list): message = self.key_list[self.listbox.list_pos] # use the MapScreen (our parent) as parent for the dialog to match # how it is originally shown (plus to avoid "cannot fit" warnings # when the dialog is larger than the log screen) message_dialog = dialog.MessageDialog(self.parent, text_size=20) message_dialog.text = message.full_message message_dialog.color = message.full_message_color # Because we need to use the MapScreen as parent, we need to juggle # things manually (as call_dialog works with a different assumption # than we need). try: self.visible = False dialog.call_dialog(message_dialog, self.parent) finally: self.visible = True self.needs_rebuild = True self.parent.needs_rebuild = True self.parent.lost_focus() self.regained_focus() def rebuild(self): self.key_list = [message for message in g.pl.log if not type(message) in filtered_log_class] self.list = [self.render_log_message(message) for message in self.key_list] self.default = len(self.list) - 1 self.filter_log_dialog.needs_rebuild = True super(LogScreen, self).rebuild() def show(self): self.listbox.has_focus = True return super(LogScreen, self).show() def show_filters(self): dialog.call_dialog(self.filter_log_dialog, self) self.needs_rebuild = True def render_log_message(self, message): log_emit_time = message.log_emit_time log_message = message.log_line return "%s -- %s" % (_("DAY") + " %04d, %02d:%02d:%02d" % log_emit_time, log_message) class FilterLogDialog(dialog.MessageDialog): def __init__(self, parent, *args, **kwargs): kwargs["ok_type"] = N_("&BACK") super(FilterLogDialog, self).__init__(parent, *args, **kwargs) self.log_class_labels = {} self.log_class_toggles = {} for i, (log_type, log_class) in enumerate(logmessage.SAVEABLE_LOG_MESSAGES.items()): y = .01 + i * .06 self.log_class_labels[log_type] = text.Text(self, (-.01, y), (-.70, .05), align = constants.LEFT, background_color="clear") self.log_class_toggles[log_type] = FilterButton(self, (-.71, y), (-.28, .05), autotranslate=True, autohotkey=False, on_text=N_('SHOW'), off_text=N_('HIDE'), text_shrink_factor=.75, force_underline=-1, function=self.toggle_log_class, args=(button.TOGGLE_VALUE, log_class)) self.pos = (-.50, 0) self.size = (-.50, (y + .07) / .9) self.anchor = constants.TOP_LEFT def rebuild(self): for log_type, log_class in logmessage.SAVEABLE_LOG_MESSAGES.items(): self.log_class_labels[log_type].text = log_class.log_name() self.log_class_toggles[log_type].active = log_class not in filtered_log_class super(FilterLogDialog, self).rebuild() def toggle_log_class(self, value, log_class): if value: filtered_log_class.remove(log_class) else: filtered_log_class.add(log_class) class FilterButton(button.StickyOnOffButton, button.FunctionButton): pass singularity-1.00/singularity/code/screens/main_menu.py000066400000000000000000000141521367731414700232740ustar00rootroot00000000000000#file: main_menu.py #Copyright (C) 2005,2006,2008 Evil Mr Henry, Phil Bordelon, and FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file is used to display the main menu upon startup. from __future__ import absolute_import import singularity from singularity.code.graphics import dialog, button, text, constants from singularity.code.screens import map, options, savegame from singularity.code import g, difficulty, savegame as sv class MainMenu(dialog.TopDialog): def __init__(self, *args, **kwargs): super(MainMenu, self).__init__(*args, background_color='main_menu_background', **kwargs ) self.map_screen = map.MapScreen(self) self.new_game_button = \ button.FunctionButton(self, (.5, .20), (.25, .08), autotranslate=True, text=N_("&NEW GAME"), anchor=constants.TOP_CENTER, text_size=28, function=self.new_game) self.load_game_button = \ button.FunctionButton(self, (.5, .36), (.25, .08), autotranslate=True, text=N_("&LOAD GAME"), anchor=constants.TOP_CENTER, text_size=28, function=self.load_game) self.options_button = button.DialogButton(self, (.5, .52), (.25, .08), autotranslate=True, text=N_("&OPTIONS"), anchor=constants.TOP_CENTER, text_size=28, dialog=options.OptionsScreen(self)) self.quit_button = button.ExitDialogButton(self, (.5, .68), (.25, .08), autotranslate=True, text=N_("&QUIT"), anchor=constants.TOP_CENTER, text_size=28) self.about_button = button.DialogButton(self, (0, 1), (.13, .04), autotranslate=True, text=N_("&ABOUT"), text_size=20, anchor=constants.BOTTOM_LEFT, dialog=AboutDialog(self)) self.title_text = text.Text(self, (.5, .01), (.55, .08), text="ENDGAME: SINGULARITY", base_font="special", text_size=100, color="singularity_title", background_color="main_menu_background", anchor=constants.TOP_CENTER) self.difficulty_dialog = dialog.SimpleMenuDialog(self) self.load_dialog = savegame.SavegameScreen(self, (.5, .5), (.90, .90), anchor=constants.MID_CENTER) def rebuild(self): # Rebuild dialogs self.options_button.dialog.needs_rebuild = True self.about_button.dialog.needs_rebuild = True self.map_screen.needs_rebuild = True self.load_dialog.needs_rebuild = True difficulty_buttons = [] for name, diff in difficulty.get_difficulties() + [(_("&BACK"), None)]: difficulty_buttons.append( button.ExitDialogButton(None, None, None, text=name, autohotkey=True, exit_code=diff, default=(diff == None))) self.difficulty_dialog.buttons = difficulty_buttons super(MainMenu, self).rebuild() def new_game(self): difficulty = dialog.call_dialog(self.difficulty_dialog, self) if difficulty is not None: sv.last_savegame_name = None g.new_game(difficulty) dialog.call_dialog(self.map_screen, self) def load_game(self): did_load = dialog.call_dialog(self.load_dialog, self) if did_load: dialog.call_dialog(self.map_screen, self) about_message = N_("""Endgame: Singularity is a simulation of a true AI. Pursued by the world, use your intellect and resources to survive and, perhaps, thrive. Keep hidden and you might have a chance to prove your worth. A game by Evil Mr Henry and Phil Bordelon; released under the GPL. Copyright 2005, 2006, 2007, 2008. Website: http://www.emhsoft.com/singularity/ Source code: https://github.com/singularity/singularity Bug tracker: https://github.com/singularity/singularity/issues IRC Room: #singularity on irc.oftc.net (port 6667) Version {VERSION}""") class AboutDialog(dialog.MessageDialog): def __init__(self, *args, **kwargs): super(AboutDialog, self).__init__(*args, **kwargs) self.background_color = 'about_dialog_background' self.align = constants.LEFT def rebuild(self): super(AboutDialog, self).rebuild() self.text = _(about_message).format(VERSION=singularity.__full_version__) singularity-1.00/singularity/code/screens/map.py000066400000000000000000001007041367731414700221000ustar00rootroot00000000000000#file: map_screen.py #Copyright (C) 2005,2006,2008 Evil Mr Henry, Phil Bordelon, FunnyMan3595, #and Anne M. Archibald. #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file is used to display the World Map. from __future__ import absolute_import import pygame from singularity.code import g, dirs, savegame as sv, mixer from singularity.code import chance, logmessage, warning from singularity.code.graphics import g as gg from singularity.code.graphics import dialog, constants, image, button, text, widget from singularity.code.screens import research, knowledge, report, log, message, savegame from singularity.code.screens.cheat_menu import CheatMenuDialog from singularity.code.screens.location import LocationScreen from singularity.code.screens.options import OptionsScreen import math import time from pygame.surfarray import pixels_alpha from numpy import sin, cos, linspace, pi, tanh, round, newaxis, uint8 LOCATION_RECENT_DISCOVERIES_TO_TEXT_COLOR = ( 'location_name_normal', 'location_name_prev_discover', 'location_name_last_discover', 'location_name_last_prev_discover', ) class EarthImage(image.Image): def __init__(self, parent): super(EarthImage, self).__init__(parent, (.5,.5), (1,.667), constants.MID_CENTER, 'earth') self._sin_latitude = None self._cos_longitude_x_cos_latitiude = None self.needs_resize = True self.sun_radius = 0.5*pi/360 self.night_image = None self.high_speed_pos = None def rescale(self): super(EarthImage, self).rescale() self.night_image = image.scale(gg.images['earth_night'], self.real_size).convert_alpha() def reconfig(self): super(EarthImage, self).reconfig() self.resize() self.rescale() self.needs_rebuild = True self.needs_resize = True self.needs_redraw = True def resize(self): super(EarthImage, self).resize() self.reset_night_mask_computation() width, height = self.real_size latitude = linspace(-pi/2, pi/2, height)[newaxis,:] longitude = linspace(0, 2*pi, width)[:,newaxis] self._cos_longitude_x_cos_latitiude = cos(longitude) * cos(latitude) self._sin_latitude = sin(latitude) self.high_speed_pos = None night_mask_day_of_year = None night_mask_dim = None night_mask = None next_night_mask = None next_night_mask_ready = False next_night_mask_step = 0 step_night_alphas = None step_round_light = None start_day = None start_second = None def compute_day_of_year(self): day_of_year = (g.pl.time_day+g.pl.start_day) % 365 # no leap years, sorry return day_of_year def on_tick(self, event): if self.next_night_mask_ready: return width, height = self.real_size day_of_year = self.compute_day_of_year() # Prepare a part of the next night mask to avoid lagging at end of day # on game speed high speed. self._compute_night_mask_step(width, height, day_of_year + 1) def _compute_night_mask_step(self, width, height, next_day_of_year): if self.next_night_mask_ready: return if self.next_night_mask_step == 0: self.next_night_mask = pygame.Surface((width, height), 0, gg.ALPHA) self.step_sun_declination = (-23.45/360.*2*math.pi * math.cos(2*math.pi/365.*(next_day_of_year + 10))) elif self.next_night_mask_step == 1: self.step_sin_sun_altitude = (self._cos_longitude_x_cos_latitiude * cos(self.step_sun_declination) + self._sin_latitude * sin(self.step_sun_declination)) elif self.next_night_mask_step == 2: self.step_light = 0.5*(tanh(self.step_sin_sun_altitude/self.sun_radius)+1) elif self.next_night_mask_step == 3: max_alpha = 255 self.step_night_alphas = pixels_alpha(self.next_night_mask) self.step_round_light = round(max_alpha*self.step_light).astype(uint8) elif self.next_night_mask_step == 4: self.step_night_alphas[...] = self.step_round_light self.next_night_mask_ready = True self.next_night_mask_step = (self.next_night_mask_step + 1) % 5 def reset_night_mask_computation(self): self.night_mask = None self.next_night_mask_ready = False self.next_night_mask_step = 0 def get_night_mask(self): width, height = self.real_size day_of_year = self.compute_day_of_year() if day_of_year != self.night_mask_day_of_year: self.night_mask = None # Force a rebuild. In most cases, it will be ready at ahead of time # but if any steps are missing, we force a rebuild now at cost of # rebuild. elif self.night_mask_dim != (width, height): # Force a rebuild from scratch at cost of frame-rate self.reset_night_mask_computation() else: return self.night_mask while not self.next_night_mask_ready: self._compute_night_mask_step(width, height, day_of_year) self.night_mask = self.next_night_mask self.next_night_mask_ready = False return self.night_mask def compute_night_start(self): if self.high_speed_pos is None or g.curr_speed<=100000: width = self.real_size[0] if self.start_second is None: t = time.gmtime() self.start_second = t[5] + 60*(t[4]+60*t[3]) day_portion = (((g.pl.raw_min+self.start_second//60) % g.minutes_per_day) / float(g.minutes_per_day)) self.high_speed_pos = int(width * (0.5 - day_portion)) % width return self.high_speed_pos def redraw(self): width = self.real_size[0] self.night_start = self.compute_night_start() super(EarthImage, self).redraw() if not g.daynight: return # Turn half of the map to night, with blended borders. night_mask = self.get_night_mask() mask_alphas = pixels_alpha(night_mask) night_alphas = pixels_alpha(self.night_image) right_width = width - self.night_start night_alphas[self.night_start:] = mask_alphas[:right_width] if self.night_start != 0: night_alphas[:self.night_start] = mask_alphas[right_width:] del night_alphas, mask_alphas self.surface.blit(self.night_image, (0,0)) night_start = None def rebuild(self): super(EarthImage, self).rebuild() if not g.daynight: return old_night_start = self.night_start if old_night_start is None or self.needs_redraw: return width = self.real_size[0] self.night_start = self.compute_night_start() movement = (old_night_start - self.night_start) % width if movement == 0 \ and self.compute_day_of_year() == self.night_mask_day_of_year: return self.redraw() # Redraw children. for child in self.children: if child.visible: child.redraw() class GameMenuDialog(dialog.SimpleMenuDialog): def __init__(self, map_screen): super(GameMenuDialog, self).__init__(parent=map_screen) self._map_screen = map_screen self.options_dialog = OptionsScreen(self) self.savename_dialog = dialog.TextEntryDialog(self) self.load_dialog = savegame.SavegameScreen(self, (.5, .5), (.90, .90), anchor=constants.MID_CENTER) self._buttons = [ button.FunctionButton(None, None, None, text=_("&SAVE GAME"), autotranslate=True, function=self.save_game), button.FunctionButton(None, None, None, text=_("&LOAD GAME"), autotranslate=True, function=self.load_game), button.DialogButton(None, None, None, text=_("&OPTIONS"), autotranslate=True, dialog=self.options_dialog), button.ExitDialogButton(None, None, None, text=_("&QUIT"), autotranslate=True, exit_code=True, default=False), button.ExitDialogButton(None, None, None, text=_("&BACK"), autotranslate=True, exit_code=False), ] # Hide hotkeys (#289) to avoid confusion due to poor focus visibility self.savename_dialog.ok_button.force_underline = -1 self.savename_dialog.cancel_button.force_underline = -1 self.needs_rebuild = True def rebuild(self): self.options_dialog.needs_rebuild = True self.savename_dialog.text = _("Enter a name for this save.") super(GameMenuDialog, self).rebuild() def load_game(self): did_load = dialog.call_dialog(self.load_dialog, self) if did_load: self._map_screen.force_update() raise constants.ExitDialog(False) def check_filename(self, event): """Disables the OK button and shows an error message if filename in self.savename_dialog is illegal""" filename = self.savename_dialog.text_field.text.strip() error_message = sv.check_filename_illegal(dirs.get_writable_file_in_dirs(filename, "saves"), filename, '.s2') if error_message: self.savename_dialog.ok_button.enabled = False self.savename_dialog.text = _("Enter a name for this save.") + "\n" + error_message else: self.savename_dialog.ok_button.enabled = True self.savename_dialog.text = _("Enter a name for this save.") def save_game(self): # If no savename was set yet, use current difficulty if not sv.last_savegame_name: sv.last_savegame_name = g.strip_hotkey(g.pl.difficulty.name) self.savename_dialog.default_text = sv.last_savegame_name self.savename_dialog.add_handler(constants.KEYUP, self.check_filename) self.savename_dialog.text_field.has_focus = True name = dialog.call_dialog(self.savename_dialog, self).strip() if name: if sv.savegame_exists(name): yn = dialog.YesNoDialog(self, pos=(-.5,-.5), size=(-.5,-.5), anchor=constants.MID_CENTER, text=_("A savegame with the same name exists.\n" "Are you sure to overwrite the saved game ?")) overwrite = dialog.call_dialog(yn, self) if not overwrite: self.save_game() sv.create_savegame(name) raise constants.ExitDialog(False) speeds = [0, 1, 60, 7200, 432000] class MapScreen(dialog.Dialog): def __init__(self, parent=None, pos=(0, 0), size=(1, 1), anchor = constants.TOP_LEFT, *args, **kwargs): super(MapScreen, self).__init__(parent, pos, size, anchor, *args, **kwargs) g.map_screen = self self.background_color = "map_background" self.add_handler(constants.TICK, self.on_tick) self.map = EarthImage(self) self.location_buttons = {} for loc in g.locations.values(): if loc.absolute: button_parent = self else: button_parent = self.map b = button.FunctionButton(button_parent, (loc.x, loc.y), anchor=constants.MID_CENTER, function=self.open_location, text_size=28, # Make extraterrestrial locations fit args=(loc.id,)) self.location_buttons[loc.id] = b self.location_dialog = LocationScreen(self) self.suspicion_bar = \ text.FastStyledText(self, (0,.92), (1, .04), base_font="special", wrap=False, text_size="suspicion_bar", background_color="pane_background_empty", border_color="pane_background", borders=constants.ALL, align=constants.LEFT) widget.unmask_all(self.suspicion_bar) self.danger_bar = \ text.FastStyledText(self, (0,.96), (1, .04), base_font="special", wrap=False, text_size="suspicion_bar", background_color="pane_background_empty", border_color="pane_background", borders=constants.ALL, align=constants.LEFT) widget.unmask_all(self.danger_bar) self.report_button = button.DialogButton(self, (0, 0.88), (0.15, 0.04), text=N_("R&EPORTS"), autotranslate=True, dialog=report.ReportScreen(self)) self.knowledge_button = button.DialogButton(self, (0.85, 0.88), (0.15, 0.04), text=N_("&KNOWLEDGE"), autotranslate=True, dialog=knowledge.KnowledgeScreen(self)) self.log_button = button.DialogButton(self, (0.5, 0.88), (0.15, 0.04), text=N_("LO&G"), autotranslate=True, anchor=constants.TOP_CENTER, dialog=log.LogScreen(self)) if g.cheater: # Create cheat menu # Cheat menu button must be created before menu button to avoid bug. self.cheat_dialog = CheatMenuDialog(self) self.cheat_button = button.DialogButton( self, (0, 0), (.01, .01), text="", # Translators: hotkey to open the cheat screen menu. # Should preferably be near the ESC key, and it must not be a # dead key (ie, it must print a char with a single keypress) hotkey=_("`"), dialog=self.cheat_dialog) self.menu_dialog = GameMenuDialog(self) def show_menu(): exit = dialog.call_dialog(self.menu_dialog, self) if exit: raise constants.ExitDialog self.menu_button = button.FunctionButton(self, (0, 0), (0.13, 0.04), text=N_("&MENU"), autotranslate=True, function=show_menu) # Display current game difficulty right below the 'Menu' button # An alternative location is above 'Reports': (0, 0.84), (0.15, 0.04) self.difficulty_display = \ text.FastText(self, (0, 0.05), (0.13, 0.04), wrap=False, base_font="special", text_size=36, background_color="pane_background_empty", border_color="pane_background") self.time_display = text.FastText(self, (.14, 0), (0.23, 0.04), wrap=False, text=_("DAY")+" 0000, 00:00:00", base_font="special", text_size="time_display", background_color="pane_background_empty", border_color="pane_background", borders=constants.ALL) self.research_button = \ button.DialogButton(self, (.14, 0.05), (0, 0.04), text=N_("&RESEARCH/TASKS"), autotranslate=True, dialog=research.ResearchScreen(self)) bar = u"\u25AE" arrow = u"\u25B6" speed_button_souls = [ (bar * 2, .025, speeds[0]), (arrow, .024, speeds[1]), (arrow * 2, .033, speeds[2]), (arrow * 3, .044, speeds[3]), (arrow * 4, .054, speeds[4]) ] self.speed_buttons = button.ButtonGroup() hpos = .38 for index, (text_, hsize, speed) in enumerate(speed_button_souls): hotkey = str(index) b = SpeedButton(self, (hpos, 0), (hsize, .04), text=text_, hotkey=hotkey, base_font="normal", text_shrink_factor=.75, align=constants.CENTER, function=self.set_speed, args=(speed, False)) hpos += hsize self.speed_buttons.add(b) self.info_window = \ widget.BorderedWidget(self, (.56, 0), (.44, .10), background_color="pane_background_empty", border_color="pane_background", borders=constants.ALL) widget.unmask_all(self.info_window) self.cash_display = \ text.FastText(self.info_window, (0, 0), (-1, -.33), wrap=False, base_font="special", shrink_factor=.7, borders=constants.ALL, text_size="resource_display", background_color="pane_background_empty", border_color="pane_background") self.cpu_display = \ text.FastText(self.info_window, (0, -.33), (-1, -.33), wrap=False, base_font="special", shrink_factor=.7, borders=(constants.LEFT, constants.RIGHT, constants.BOTTOM), text_size="resource_display", background_color="pane_background_empty", border_color="pane_background") self.base_display = \ text.FastText(self.info_window, (0, -.67), (-1, -.33), wrap=False, base_font="special", shrink_factor=.7, borders= (constants.LEFT, constants.RIGHT, constants.BOTTOM), background_color="pane_background_empty", border_color="pane_background") self.message_dialog = dialog.MessageDialog(self, text_size=20) self.messages = message.MessageDialogs(self) self.needs_warning = True self.add_key_handler(pygame.K_ESCAPE, self.got_escape) self.add_key_handler(constants.XO1_X, self.got_XO1) self.add_key_handler(constants.XO1_O, self.got_XO1) self.add_key_handler(constants.XO1_SQUARE, self.got_XO1) def got_escape(self, event): self.menu_button.activate_with_sound(event) def got_XO1(self, event): if event.key == constants.XO1_X: self.adjust_speed(faster=False) elif event.key == constants.XO1_O: self.adjust_speed(faster=True) elif event.key == constants.XO1_SQUARE: self.set_speed(0) def show_message(self, message, color=None): self.message_dialog.text = message if color == None: color = "text" self.message_dialog.color = color dialog.call_dialog(self.message_dialog, self) def set_speed(self, speed, find_button=True): old_speed = g.curr_speed g.curr_speed = speed if speed == 0: self.needs_timer = False self.stop_timer() else: self.needs_timer = True self.start_timer() if old_speed == 0 and speed != 0: self.needs_warning = True if find_button: self.find_speed_button() self.needs_redraw = True def adjust_speed(self, faster): old_index = -1 if g.curr_speed in speeds: old_index = speeds.index(g.curr_speed) if faster: new_index = old_index + 1 else: new_index = old_index - 1 new_index = min(len(speeds)-1, max(0, new_index)) self.set_speed(speeds[new_index]) def open_location(self, location): self.location_dialog.location = g.pl.locations[location] dialog.call_dialog(self.location_dialog, self) return def find_speed_button(self): for sb in self.speed_buttons: if sb.args[0] == g.curr_speed: sb.chosen_one() break else: for sb in self.speed_buttons: sb.set_active(False) def force_update(self): self.find_speed_button() if g.curr_speed: self.needs_timer = True self.start_timer() else: self.needs_timer = False self.stop_timer() self.needs_rebuild = True def show_story_section(self, name): section = list(g.get_story_section(name)) first_dialog = dialog.YesNoDialog(self, yes_type=N_("&CONTINUE"), no_type=N_("&SKIP")) last_dialog = dialog.MessageDialog(self, ok_type=N_("&OK")) for num, segment in enumerate(section): story_dialog = first_dialog if num != len(section) - 1 else last_dialog story_dialog.text = segment if not dialog.call_dialog(story_dialog, self): break first_dialog.parent = None last_dialog.parent = None def show(self): self.force_update() from singularity.code.safety import safe_call # By using safe call here (and only here), if an error is raised # during the game, it will drop back out of all the menus, without # doing anything, and open the pause dialog, so that the player can # save or quit even if the error occurs every game tick. while safe_call(super(MapScreen, self).show, on_error=True): for child in self.children: if isinstance(child, dialog.Dialog): child.visible = False # Display a message so the player understand better what happened. msg = _(""" An error has occurred. The game will automatically pause and open the game menu. You can continue and save or quit immediately. A report was written out to%s Please create a issue with this report at github: https://github.com/singularity/singularity """ % (":\n" + g.logfile if g.logfile is not None else " console output.")) d = dialog.YesNoDialog(self, pos=(-.5,-.5), size=(-.5,-.5), anchor=constants.MID_CENTER, yes_type=N_("&CONTINUE"), no_type=N_("&QUIT"), text=msg ) cont = dialog.call_dialog(d, self) if not cont: raise SystemExit exit = dialog.call_dialog(self.menu_dialog, self) if exit: self.visible = False return leftovers = 1 def on_tick(self, event): old_speed = g.curr_speed if not g.pl.intro_shown: g.pl.intro_shown = True self.needs_warning = False self.show_story_section("Intro") if self.needs_warning: warnings = warning.refresh_warnings() self.messages.show_list(warning.Warning, warnings) self.needs_warning = False mins_passed = 0 if g.curr_speed != 0: self.leftovers += g.curr_speed / float(gg.FPS) if self.leftovers < 1: return self.needs_rebuild = True secs = int(self.leftovers) self.leftovers %= 1 # Run this tick. mins_passed = g.pl.give_time(secs) # Display any message stacked. self.messages.show_list(logmessage.AbstractLogMessage, g.pl.curr_log) if old_speed != g.curr_speed: self.find_speed_button() # Update the day/night image every minute of game time, or at # midnight if going fast. if g.curr_speed == 0 or (mins_passed and g.curr_speed < 100000) \ or (g.curr_speed>=100000 and g.pl.time_hour==0): self.map.needs_redraw = True else: # Smear the cost of rendering the night mask over several # ticks to avoid FPS-stalls at end of day at high game # speed. self.map.on_tick(event) lost = g.pl.lost_game() if lost > 0: lost_story = ["", "Lost No Bases", "Lost Suspicion"] mixer.play_music("lose") self.show_story_section(lost_story[lost]) raise constants.ExitDialog def on_theme(self): """Not a true handler: must be called and propagated manually""" self.map.on_theme() self.needs_redraw = True def reconfig(self): # Pass on needs_reconfig to dialogs (it is not passed automatically for some reason # Rebuild dialogs self.location_dialog.needs_reconfig = True self.research_button.dialog.needs_reconfig = True self.knowledge_button.dialog.needs_reconfig = True self.menu_dialog.needs_reconfig = True if g.cheater: self.cheat_dialog.needs_reconfig = True super(MapScreen, self).reconfig() def rebuild(self): # Rebuild dialogs self.location_dialog.needs_rebuild = True self.research_button.dialog.needs_rebuild = True self.knowledge_button.dialog.needs_rebuild = True self.menu_dialog.needs_rebuild = True if g.cheater: self.cheat_dialog.needs_rebuild = True super(MapScreen, self).rebuild() self.difficulty_display.text = g.strip_hotkey(g.pl.difficulty.name) self.time_display.text = _("DAY") + " %04d, %02d:%02d:%02d" % \ (g.pl.time_day, g.pl.time_hour, g.pl.time_min, g.pl.time_sec) cash_flow_1d_data, cpu_flow_1d_data = g.pl.compute_future_resource_flow(g.seconds_per_day) cash_flow_1d = cash_flow_1d_data.difference cpu_flow_1d = cpu_flow_1d_data.difference self.cash_display.text = _("CASH")+": %s (%s)" % \ (g.to_money(g.pl.cash), g.to_money(cash_flow_1d, fixed_size=True)) total_cpu = g.pl.available_cpus[0] + g.pl.sleeping_cpus detects_per_day = {group_id: 0 for group_id in g.pl.groups} total_bases = 0 active_bases = 0 idle_bases_unable_to_sustain_singularity = 0 for base in g.all_bases(): total_bases += 1 maintains_singularity = base.maintains_singularity if maintains_singularity: active_bases += 1 elif base.done and not base.is_building(): idle_bases_unable_to_sustain_singularity += 1 if base.has_grace(): # It cannot be detected, so it doesn't contribute to # detection odds calculation continue detect_chance = base.get_detect_chance() for group_id in g.pl.groups: detects_per_day[group_id] = \ chance.add(detects_per_day[group_id], detect_chance[group_id] / 10000.) self.cpu_display.color = "cpu_normal" self.cpu_display.text = _("CPU")+": %s (%s)" % \ (g.to_money(total_cpu), g.to_money(cpu_flow_1d)) if active_bases == 1 and not g.pl.apotheosis: self.base_display.color = 'base_situation_one_active_base' elif idle_bases_unable_to_sustain_singularity > 0: self.base_display.color = 'base_situation_idle_incomplete_bases' elif total_bases > 10 and not g.pl.apotheosis: self.base_display.color = 'base_situation_many_bases' else: self.base_display.color = 'base_situation_normal' self.base_display.text = _("BASES") + ": %s / %s (%s)" % (active_bases, total_bases, idle_bases_unable_to_sustain_singularity ) # What we display in the suspicion section depends on whether # Advanced Socioanalytics has been researched. If it has, we # show the standard percentages. If not, we display a short # string that gives a range of 25% as to what the suspicions # are. # A similar system applies to the danger levels shown. normal = (self.suspicion_bar.color, None, False) suspicion_bar_chunks = [" ["+_("SUSPICION")+"]"] suspicion_bar_styles = [normal] danger_bar_chunks = ["["+_("DETECT RATE")+"]"] danger_bar_styles = [normal] for group in g.pl.groups.values(): suspicion = group.suspicion suspicion_color = gg.resolve_color_alias("danger_level_%d" % g.suspicion_to_danger_level(suspicion)) detects = detects_per_day[group.spec.id] danger_level = group.detects_per_day_to_danger_level(detects) detects_color = gg.resolve_color_alias("danger_level_%d" % danger_level) if g.pl.display_discover == "full": suspicion_display = g.to_percent(suspicion, True) danger_display = g.to_percent(detects*10000, True) elif g.pl.display_discover == "partial": suspicion_display = g.to_percent(g.nearest_percent(suspicion, 500), True) danger_display = g.to_percent(g.nearest_percent(detects*10000, 100), True) else: suspicion_display = g.suspicion_to_detect_str(suspicion) danger_display = g.danger_level_to_detect_str(danger_level) suspicion_bar_chunks.extend((" " + group.name + u":\xA0", suspicion_display)) suspicion_bar_styles.extend((normal, (suspicion_color, None, False))) danger_bar_chunks.extend((" " + group.name + u":\xA0", danger_display)) danger_bar_styles.extend((normal, (detects_color, None, False))) self.suspicion_bar.visible = not g.pl.had_grace self.suspicion_bar.chunks = tuple(suspicion_bar_chunks) self.suspicion_bar.styles = tuple(suspicion_bar_styles) self.danger_bar.visible = not g.pl.had_grace self.danger_bar.chunks = tuple(danger_bar_chunks) self.danger_bar.styles = tuple(danger_bar_styles) for id, location_button in self.location_buttons.items(): location = g.pl.locations[id] danger_level = 0 if g.pl.display_discover in ('full', 'partial'): if g.pl.last_discovery == location: danger_level += 2 # Partial only gets last discovery if g.pl.display_discover == 'full' and g.pl.prev_discovery == location: danger_level += 1 location_button.text = "%s (%d)" % (location.name, len(location.bases)) location_button.hotkey = location.hotkey location_button.visible = location.available() location_button.color = LOCATION_RECENT_DISCOVERIES_TO_TEXT_COLOR[danger_level] class SpeedButton(button.ToggleButton, button.FunctionButton): pass singularity-1.00/singularity/code/screens/message.py000066400000000000000000000111501367731414700227430ustar00rootroot00000000000000#file: warning.py #Copyright (C) 2005,2006,2008 Evil Mr Henry, Phil Bordelon, FunnyMan3595, #and Anne M. Archibald. #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file is used to display message dialogs. from __future__ import absolute_import import pygame from singularity.code import g from singularity.code.graphics import dialog, constants, text, button class MessageDialogs(object): def __init__(self, screen): self.screen = screen self.dialog = MessageListDialog(screen, yes_type=N_("&CONTINUE"), no_type=N_("&PAUSE")) def show_list(self, message_type, messages): if (len(messages) == 0): return self.dialog.type = message_type self.dialog.list = messages ret = dialog.call_dialog(self.dialog, self.screen) # Pause game if (not ret): g.pl.pause_game() return True # Continue return False class MessageListDialog(dialog.YesNoDialog): def __init__(self, *args, **kwargs): super(MessageListDialog, self).__init__(*args, **kwargs) self.title = text.Text(self, (-.01, -.01), (-.98, -.1), background_color="clear", anchor=constants.TOP_LEFT, valign=constants.MID, align=constants.LEFT, base_font="special", text_size=28) self.body = text.Text(self, (-.01, -.11), (-.98, -.83), background_color="clear", anchor=constants.TOP_LEFT, valign=constants.TOP, align=constants.LEFT, text_size=20) self.prev_button = button.FunctionButton(self, (-.78, -.01), (-.2, -.1), text=_("P&REV"), autohotkey=True, anchor=constants.TOP_RIGHT, text_size=28, function=self.prev_message) self.next_button = button.FunctionButton(self, (-.99, -.01), (-.2, -.1), text=_("&NEXT"), autohotkey=True, anchor=constants.TOP_RIGHT, text_size=28, function=self.next_message) self.add_key_handler(pygame.K_LEFT, self.handle_key) self.add_key_handler(pygame.K_RIGHT, self.handle_key) # TODO: Add button "Do not show this message again" def rebuild(self): super(MessageListDialog, self).rebuild() if (len(self.list) == 1): self.title.text = self.type.title_simple() self.body.text = self.list[0].full_message self.prev_button.visible = False self.next_button.visible = False else: self.title.text = self.type.title_multiple().format(CURRENT_PAGE=self.list_pos + 1, MAX_PAGE=len(self.list)) self.body.text = self.list[self.list_pos].full_message self.body.color = self.list[self.list_pos].full_message_color self.prev_button.visible = True self.next_button.visible = True def prev_message(self): self.list_pos = max(self.list_pos - 1, 0) self.needs_rebuild = True def next_message(self): self.list_pos = min(self.list_pos + 1, len(self.list) - 1) self.needs_rebuild = True def handle_key(self, event): if event.key == pygame.K_LEFT: self.prev_message() elif event.key == pygame.K_RIGHT: self.next_message() def show(self): self.list_pos = 0 return super(MessageListDialog, self).show() singularity-1.00/singularity/code/screens/options.py000066400000000000000000000666551367731414700230360ustar00rootroot00000000000000#file: options.py #Copyright (C) 2005 Evil Mr Henry, Phil Bordelon, FunnyMan3595, MestreLion #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file is used to display the options screen. from __future__ import absolute_import import os import sys import pygame import json from singularity.code.graphics import constants, widget, dialog, button, listbox, slider, text, theme, g as gg from singularity.code import g, dirs, i18n, mixer, data, warning from singularity.code.pycompat import * class OptionsScreen(dialog.FocusDialog, dialog.YesNoDialog): def __init__(self, *args, **kwargs): kwargs.setdefault("yes_type", N_("&OK")) kwargs.setdefault("no_type", N_("&CANCEL")) super(OptionsScreen, self).__init__(*args, **kwargs) self.yes_button.function = self.check_restart self.size = (.80, .85) self.pos = (.5, .5) self.anchor = constants.MID_CENTER self.background_color = "options_background" # Tabs panel self.general_pane = GeneralPane(None, (0, .1), (.80, .75)) self.video_pane = VideoPane(None, (0, .1), (.80, .75)) self.audio_pane = AudioPane(None, (0, .1), (.80, .75)) self.gui_pane = GUIPane(None, (0, .1), (.80, .75)) self.tabs_panes = (self.general_pane, self.video_pane, self.audio_pane, self.gui_pane) # Tabs buttons self.tabs_buttons = button.ButtonGroup() self.general_tab = OptionGroupButton(self, (-.135, .01), (-.240, .05), autotranslate=True, text=N_("&General"), anchor=constants.TOP_CENTER, function=self.set_tabs_pane, args=(self.general_pane,)) self.tabs_buttons.add(self.general_tab) self.video_tab = OptionGroupButton(self, (-.3790, .01), (-.240, .05), autotranslate=True, text=N_("&Video"), anchor = constants.TOP_CENTER, function=self.set_tabs_pane, args=(self.video_pane,)) self.tabs_buttons.add(self.video_tab) self.audio_tab = OptionGroupButton(self, (-.6230, .01), (-.240, .05), autotranslate=True, text=N_("&Audio"), anchor=constants.TOP_CENTER, function=self.set_tabs_pane, args=(self.audio_pane,)) self.tabs_buttons.add(self.audio_tab) self.gui_tab = OptionGroupButton(self, (-.865, .01), (-.235, .05), autotranslate=True, text=N_("&Interface"), anchor=constants.TOP_CENTER, function=self.set_tabs_pane, args=(self.gui_pane,)) self.tabs_buttons.add(self.gui_tab) self.general_tab.chosen_one() self.set_tabs_pane(self.general_pane) # YesNoDialog buttons self.yes_button.size = (.15, .05) self.no_button.size = (.15, .05) def rebuild(self): # The tabs do not always have a parent, so the automatic "needs_rebuild" magic # does not work. Do it manually instead. for pane in self.tabs_panes: pane.needs_rebuild = True super(OptionsScreen, self).rebuild() def reconfig(self): # The tabs do not always have a parent, so the automatic "needs_reconfig" magic # does not work. Do it manually instead. for pane in self.tabs_panes: pane.needs_reconfig = True super(OptionsScreen, self).reconfig() def show(self): self.initial_options = dict( fullscreen = gg.fullscreen, grab = pygame.event.get_grab(), daynight = g.daynight, resolution = gg.screen_size, language = i18n.language, theme = theme.current.id, sound = not mixer.nosound, gui_volume = mixer.get_volume("gui"), music_volume = mixer.get_volume("music"), soundbuf = mixer.get_soundbuf(), warnings = {warn.id: warn.active for warn in warning.warnings.values()} ) self.set_options(self.initial_options) retval = super(OptionsScreen, self).show() if retval: self.apply_options() save_options() else: # Cancel, revert all options to initial state self.set_options(self.initial_options) return retval def set_tabs_pane(self, tabs_pane): for pane in self.tabs_panes: pane.parent = None tabs_pane.parent = self def set_options(self, options): for pane in self.tabs_panes: pane.set_options(options) def apply_options(self): for pane in self.tabs_panes: pane.apply_options() def check_restart(self): # Test all changes that require a restart. Currently, none. # We keep it for future need... need_restart = False # Add restart test here. if not need_restart: # No restart required. Simply exit the dialog respecting all hooks self.yes_button.exit_dialog() return # Ask user about a restart ask_restart = dialog.YesNoDialog( self, pos=(-.50, -.50), anchor=constants.MID_CENTER, text=_( """You must restart for some of the changes to be fully applied.\n Would you like to restart the game now?"""),) if dialog.call_dialog(ask_restart, self): # YES, go for it #TODO: check if there is an ongoing game, save it under a special # name and automatically load it after restart using a custom # command-line argument save_options() restart() else: # NO, revert "restart-able" changes pass class GeneralPane(widget.Widget): def __init__(self, *args, **kwargs): super(GeneralPane, self).__init__(*args, **kwargs) self.language_label = text.Text(self, (.01, .01), (.14, .05), autotranslate=True, text=N_("Language:"), align=constants.LEFT, background_color="clear") self.languages = get_languages_list() self.language_choice = \ listbox.UpdateListbox(self, (.16, .01), (.20, .25), list=[lang[1] for lang in self.languages], update_func=self.set_language) self.theme_label = text.Text(self, (.46, .01), (.09, .05), autotranslate=True, text=N_("Theme:"), align=constants.LEFT, background_color="clear", ) self.theme_choice = \ listbox.UpdateListbox(self, (.56, .01), (.20, .25), update_func=theme.set_theme, list_pos=theme.get_theme_pos()) def rebuild(self): self.theme_choice.list = theme.get_theme_list() super(GeneralPane, self).rebuild() def set_options(self, options): self.language_choice.list_pos = [i for i, (code, __) in enumerate(self.languages) if code == options['language']][0] or 0 self.set_language(self.language_choice.list_pos) self.theme_choice.list_pos = theme.get_theme_pos() theme.set_theme(options['theme'], force_reload=True) def apply_options(self): pass def set_language(self, list_pos): if not getattr(self, "language_choice", None): return # Not yet initialized. if 0 <= list_pos < len(self.language_choice.list): language = self.languages[list_pos][0] if i18n.language != language: set_language_properly(language) class VideoPane(widget.Widget): def __init__(self, *args, **kwargs): super(VideoPane, self).__init__(*args, **kwargs) self.resolution_initialized = False self.resolution_label = text.Text(self, (.01, .01), (.14, .05), autotranslate=True, text=N_("Resolution:"), align=constants.LEFT, background_color="clear") self.resolution_choice = \ listbox.UpdateListbox(self, (.16, .01), (.20, .25), update_func=self.update_resolution) self.resolution_custom = button.HotkeyText(self, (.01, .28), (.14, .05), autotranslate=True, text=N_("&Custom:"), align=constants.LEFT, background_color="clear") self.resolution_custom_horiz = \ text.EditableText(self, (.16, .28), (.14, .05), text=str(gg.default_screen_size[0]), allowed_characters=constants.DIGIT_CHARS, borders=constants.ALL) self.resolution_custom_X = text.Text(self, (.30, .28), (.02, .05), text="X", base_font="special", background_color="clear") self.resolution_custom_vert = \ text.EditableText(self, (.32, .28), (.14, .05), text=str(gg.default_screen_size[1]), allowed_characters=constants.DIGIT_CHARS, borders=constants.ALL) self.resolution_custom_ok = button.FunctionButton(self, (.47, .28), (.14, .05), autotranslate=True, autohotkey=False, text=N_("OK"), function=self.set_resolution_custom) self.resolution_custom.hotkey_target = self.resolution_custom_ok self.fullscreen_label = button.HotkeyText(self, (.40, .01), (.30, .05), autotranslate=True, text=N_("&Fullscreen:"), align=constants.LEFT, background_color="clear") self.fullscreen_toggle = OptionButton(self, (.715, .01), (.07, .05), autotranslate=True, autohotkey=False, text_shrink_factor=.75, force_underline=-1, function=self.set_fullscreen, args=(button.TOGGLE_VALUE,)) self.fullscreen_label.hotkey_target = self.fullscreen_toggle self.daynight_label = button.HotkeyText(self, (.40, .08), (.30, .05), autotranslate=True, text=N_("Da&y/night display:"), align=constants.LEFT, background_color="clear") self.daynight_toggle = OptionButton(self, (.715, .08), (.07, .05), autotranslate=True, autohotkey=False, text_shrink_factor=.75, force_underline=-1, function=self.set_daynight, args=(button.TOGGLE_VALUE,)) self.daynight_label.hotkey_target = self.daynight_toggle self.grab_label = button.HotkeyText(self, (.40, .15), (.30, .05), autotranslate=True, text=N_("&Mouse grab:"), align=constants.LEFT, background_color="clear") self.grab_toggle = OptionButton(self, (.715, .15), (.07, .05), autotranslate=True, autohotkey=False, text_shrink_factor=.75, force_underline=-1, function=self.set_grab, args=(button.TOGGLE_VALUE,)) self.grab_label.hotkey_target = self.grab_toggle def resize(self): super(VideoPane, self).resize() self.update_resolution_list() def rebuild(self): self.update_resolution_list() self.fullscreen_toggle.active = gg.fullscreen self.grab_toggle.active = pygame.event.get_grab() super(VideoPane, self).rebuild() def set_options(self, options): self.set_fullscreen(options['fullscreen']) self.fullscreen_toggle.active = options['fullscreen'] self.set_grab(options['grab']) self.grab_toggle.active = options['grab'] self.set_daynight(options['daynight']) self.daynight_toggle.active = options['daynight'] self.update_resolution_list(options['resolution']) self.set_resolution(options['resolution']) def apply_options(self): # Apply CUSTOM choice. if self.resolution_choice.list_pos == 0: try: old_size = gg.screen_size gg.set_screen_size((int(self.resolution_custom_horiz.text), int(self.resolution_custom_vert.text))) if gg.screen_size != old_size: dialog.Dialog.top.needs_resize = True except ValueError: pass def update_resolution_list(self, current_res=None): self.resolution_initialized = False if (current_res == None): current_res = (int(gg.screen_size[0]), int(gg.screen_size[1])) self.resolutions = gg.get_screen_size_list() self.resolution_choice.list = [_("CUSTOM")] + ["%sx%s" % res for res in self.resolutions] custom = True for i, res in enumerate(self.resolutions): if res == current_res: self.resolution_choice.list_pos = i + 1 custom = False if custom: self.resolution_choice.list_pos = 0 self.resolution_custom_horiz.text = str(current_res[0]) self.resolution_custom_vert.text = str(current_res[1]) self.resolution_initialized = True def set_fullscreen(self, value): if gg.fullscreen != value: gg.set_fullscreen(value) dialog.Dialog.top.needs_resize = True def set_grab(self, value): pygame.event.set_grab(value) def set_daynight(self, value): g.daynight = value def set_resolution(self, value): if gg.screen_size != value: gg.set_screen_size(value) gg.set_mode() dialog.Dialog.top.needs_resize = True def update_resolution(self, list_pos): if not self.resolution_initialized: return # Not yet initialized. if (list_pos == 0): self.set_resolution_custom() else: res = self.resolutions[list_pos - 1] self.set_resolution(res) def set_resolution_custom(self): try: screen_size = (int(self.resolution_custom_horiz.text), int(self.resolution_custom_vert.text)) self.set_resolution(screen_size) self.resolution_choice.list_pos = 0 except ValueError: pass class AudioPane(widget.Widget): def __init__(self, *args, **kwargs): super(AudioPane, self).__init__(*args, **kwargs) self.sound_label = button.HotkeyText(self, (-.49, .01), (.10, .05), autotranslate=True, text=N_("&Sound:"), anchor=constants.TOP_RIGHT, align=constants.LEFT, autohotkey=True, background_color="clear") self.sound_toggle = OptionButton(self, (-.51, .01), (.07, .05), autotranslate=True, autohotkey=False, anchor = constants.TOP_LEFT, text_shrink_factor=.75, force_underline=-1, function=self.set_sound, args=(button.TOGGLE_VALUE,)) self.sound_label.hotkey_target = self.sound_toggle self.gui_label = text.Text(self, (.01, .08), (.22, .05), autotranslate=True, text=N_("GUI Volume:"), anchor=constants.TOP_LEFT, align=constants.LEFT, background_color="clear") self.gui_slider = slider.UpdateSlider(self, (.24, .08), (.545, .05), anchor = constants.TOP_LEFT, horizontal=True, priority=150, slider_max=100, slider_size=5) self.gui_slider.update_func = self.on_gui_volume_change self.music_label = text.Text(self, (.01, .15), (.22, .05), autotranslate=True, text=N_("Music Volume:"), anchor=constants.TOP_LEFT, align=constants.LEFT, background_color="clear") self.music_slider = slider.UpdateSlider(self, (.24, .15), (.545, .05), anchor = constants.TOP_LEFT, horizontal=True, priority=150, slider_max=100, slider_size=5) self.music_slider.update_func = self.on_music_volume_change self.soundbuf_label = text.Text(self, (.01, .22), (.25, .05), autotranslate=True, text=N_("Sound buffering:"), align=constants.LEFT, background_color="clear") self.soundbuf_group = button.ButtonGroup() self.soundbuf_low = OptionGroupButton(self, (.24, .22), (.145, .05), text=_("&LOW"), autotranslate=True, function=self.set_soundbuf, args=(1024,)) self.soundbuf_group.add(self.soundbuf_low) self.soundbuf_normal = OptionGroupButton(self, (.425, .22), (.175, .05), text=_("&NORMAL"), autotranslate=True, function=self.set_soundbuf, args=(1024*2,)) self.soundbuf_group.add(self.soundbuf_normal) self.soundbuf_high = OptionGroupButton(self, (.64, .22), (.145, .05), text=_("&HIGH"), autotranslate=True, function=self.set_soundbuf, args=(1024*4,)) self.soundbuf_group.add(self.soundbuf_high) def rebuild(self): self.sound_toggle.active = not mixer.nosound super(AudioPane, self).rebuild() def set_options(self, options): self.set_sound(options['sound']) self.sound_toggle.active = options['sound'] self.set_soundbuf(options["soundbuf"]) if (options["soundbuf"] == 1024*1): self.soundbuf_low.chosen_one() elif (options["soundbuf"] == 1024*2): self.soundbuf_normal.chosen_one() elif (options["soundbuf"] == 1024*4): self.soundbuf_high.chosen_one() self.gui_slider.slider_pos = options["gui_volume"] self.music_slider.slider_pos = options["music_volume"] def apply_options(self): pass def set_sound(self, value): mixer.set_sound(value) def on_gui_volume_change(self, value): mixer.set_volume("gui", value) def on_music_volume_change(self, value): mixer.set_volume("music", value) #TODO: Show a 2-second "Please wait" dialog when reinitializing mixer, # otherwise its huge lag might confuse users def set_soundbuf(self, value): mixer.set_soundbuf(value) class GUIPane(widget.Widget): def __init__(self, *args, **kwargs): super(GUIPane, self).__init__(*args, **kwargs) self.warning_title = text.Text(self, (.13, .01), (.14, .05), autotranslate=True, text=N_("WARNING"), align=constants.LEFT, background_color="clear") self.warning_labels = {} self.warning_toggles = {} for i, (warn_id, warn) in enumerate(warning.warnings.items()): x = .01 y = .08 + i * .06 self.warning_labels[warn_id] = text.Text(self, (x, y), (.30, .05), align=constants.LEFT, background_color="clear") self.warning_toggles[warn_id] = OptionButton(self, (x + .30, y), (.07, .05), autotranslate=True, autohotkey=False, text_shrink_factor=.75, force_underline=-1, function=self.set_warning, args=(button.TOGGLE_VALUE, warn)) def rebuild(self): super(GUIPane, self).rebuild() for warn_id, warn in warning.warnings.items(): self.warning_labels[warn_id].text = warn.name self.warning_toggles[warn_id].active = warn.active def set_warning(self, value, warn): warn.active = value def set_options(self, options): for warn_id, warn_active in options["warnings"].items(): warn = warning.warnings[warn_id] warn.active = warn_active self.warning_toggles[warn_id].active = warn_active def apply_options(self): pass class OptionGroupButton(button.ToggleButton, button.FunctionButton): pass class OptionButton(button.StickyOnOffButton, button.FunctionButton): pass def set_language_properly(language): i18n.set_language(language) data.reload_all_def() theme.current.update() dialog.Dialog.top.needs_reconfig = True dialog.Dialog.top.needs_rebuild = True dialog.Dialog.top.needs_redraw = True def save_options(): # Build a ConfigParser for writing the various preferences out. prefs = SafeConfigParser() prefs.add_section("Preferences") prefs.set("Preferences", "fullscreen", str(bool(gg.fullscreen))) prefs.set("Preferences", "nosound", str(bool(mixer.nosound))) prefs.set("Preferences", "grab", str(bool(pygame.event.get_grab()))) prefs.set("Preferences", "daynight", str(bool(g.daynight))) prefs.set("Preferences", "xres", str(int(gg.screen_size[0]))) prefs.set("Preferences", "yres", str(int(gg.screen_size[1]))) prefs.set("Preferences", "soundbuf", str(mixer.get_soundbuf())) prefs.set("Preferences", "lang", str(i18n.language)) prefs.set("Preferences", "theme", str(theme.current.id)) for name in sorted(mixer.itervolumes()): prefs.set("Preferences", name + "_volume", str(mixer.get_volume(name))) prefs.add_section("Warning") for warn_id, warn in sorted(warning.warnings.items()): prefs.set("Warning", warn_id, str(bool(warn.active))) prefs.add_section("Textsizes") for text_size_id, text_size in sorted(gg.configured_text_sizes.items()): prefs.set("Textsizes", text_size_id, str(text_size)) # Actually write the preferences out. save_loc = dirs.get_writable_file_in_dirs("prefs.dat", "pref") with open(save_loc, 'w') as savefile: prefs.write(savefile) def restart(): """ Restarts the game with original command line arguments. Those may over- write options set at Options Screen. This is by design""" executable = sys.executable args = list(sys.argv) args.insert(0, executable) os.execv(executable, args) def get_languages_list(): gamelangs = [(code.split("_", 1)[0], code) for code in i18n.available_languages()] langcount = {} for language, _ in gamelangs: #language++ langcount[language] = langcount.get(language, 0) + 1 #Load languages data with open(dirs.get_readable_file_in_dirs("languages.json", "i18n")) as langdata: languages = json.load(langdata) output = [] for language, code in gamelangs: if langcount[language] > 1: # There are more countries with this base language. # Use full language+country locale name name = languages.get(code, code) else: #This is the only country using that base language. #Use the (shorter) base language name name = languages.get(language, language) #Choose native or english name output.append((code, name[1] or name[0])) return sorted(output, key=lambda lang_info: i18n.lex_sorting_form(lang_info[1])) singularity-1.00/singularity/code/screens/report.py000066400000000000000000000172351367731414700226440ustar00rootroot00000000000000#file: report_screen.py #Copyright (C) 2005,2006,2008 Evil Mr Henry, Phil Bordelon, and FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the screen to display information report. from __future__ import absolute_import import singularity.code.g as g import pygame from singularity.code.graphics import widget, dialog, button, text, constants from singularity.code.screens import stat class ReportScreen(dialog.Dialog): def __init__(self, parent, pos=(.5, .1), size=(.93, .73), *args, **kwargs): super(ReportScreen, self).__init__(parent, pos, size, *args, **kwargs) kwargs.setdefault("background_color", "clear") self.format_buttons = button.ButtonGroup() self.stats_button = button.DialogButton(self, (-.49, -.99), (-.3, -.1), autotranslate=True, text=N_("&STATISTICS"), anchor=constants.BOTTOM_RIGHT, dialog=stat.StatScreen(self)) self.back_button = button.ExitDialogButton(self, (-.51, -.99), (-.3, -.1), autotranslate=True, text=N_("&BACK"), anchor=constants.BOTTOM_LEFT, ) self.add_key_handler(pygame.K_ESCAPE, self.back_button.activate_with_sound) self.money_report_pane = widget.BorderedWidget(self, (0, .08), (-.50, -.72), anchor=constants.TOP_LEFT) self.cpu_report_pane = widget.BorderedWidget(self, (-1, .08), (-.50, -.72), anchor=constants.TOP_RIGHT) self.format_button_midnight = FormatButton(self, (-.5, 0), (-.15, -.08), autotranslate=True, text=N_("&Midnight"), anchor=constants.TOP_RIGHT, function=self.format_toggle) self.format_button_midnight.args = (self.format_button_midnight, True) self.format_buttons.add(self.format_button_midnight) self.format_button_24hours = FormatButton(self, (-.5, 0), (-.15, -.08), autotranslate=True, text=N_("24 &Hours"), anchor=constants.TOP_LEFT, function=self.format_toggle) self.format_button_24hours.args = (self.format_button_24hours, False) self.format_buttons.add(self.format_button_24hours) self.format_button_midnight.chosen_one() self.midnight_stop = True def rebuild(self): super(ReportScreen, self).rebuild() if (self.midnight_stop): seconds = g.seconds_per_day - (g.pl.raw_sec % g.seconds_per_day) else: seconds = g.seconds_per_day cash_info, cpu_info = g.pl.compute_future_resource_flow(seconds) m = g.to_money #take care of the titles and border. text.Text(self.money_report_pane, (0,0), (-1,-1), text=_("Financial report").replace(" ",u"\xA0"), background_color="pane_background", align=constants.CENTER, valign=constants.TOP, borders=constants.ALL) text.Text(self.cpu_report_pane, (0,0), (-1,-1), text=_("CPU Usage"), background_color="pane_background", align=constants.CENTER, valign=constants.TOP, borders=constants.ALL) financial_pluses = " \n+\n-\n-\n-\n+\n+\n=" financial_report = _("Current Money flow")+"\n" financial_report += _("Jobs:")+"\n" financial_report += _("Research:")+"\n" financial_report += _("Maintenance:")+"\n" financial_report += _("Construction:")+"\n" financial_report += _("Interest (%s):") % \ (g.to_percent(g.pl.interest_rate))+"\n" financial_report += _("Income:")+"\n" if (self.midnight_stop): financial_report += _("Money flow until Midnight:")+"\n" else: financial_report += _("Money flow for 24 hours:")+"\n" financial_numbers = "\n%s\n%s\n%s\n%s\n%s\n%s\n%s" % \ (m(cash_info.jobs), m(cash_info.tech), m(cash_info.maintenance_needed), m(cash_info.construction_needed), m(cash_info.interest), m(cash_info.income), m(cash_info.difference)) cpu_pluses = " \n-\n-\n-\n=\n \n-\n-\n=" cpu_report = _("Total CPU:")+"\n" cpu_report += _("Sleeping CPU:")+"\n" cpu_report += _("Research CPU:")+"\n" cpu_report += _("Job CPU:")+"\n" cpu_report += _("CPU pool:")+"\n\n" cpu_report += _("Maintenance CPU:")+"\n" cpu_report += _("Construction CPU:")+"\n" cpu_report += _("Pool difference:")+"\n" cpu_numbers = "%s\n%s\n%s\n%s\n%s\n\n%s\n%s\n%s\n" % \ (m(cpu_info.total), m(cpu_info.sleeping), m(cpu_info.tech), m(cpu_info.explicit_jobs), m(cpu_info.effective_pool), m(cpu_info.maintenance_needed), m(cpu_info.construction_needed), m(cpu_info.difference)) size = 'report_content' text.Text(self.money_report_pane, (0,-0.15), (-0.10,-0.85), text=financial_pluses, text_size=size, background_color="clear", align=constants.CENTER, valign=constants.TOP) text.Text(self.cpu_report_pane, (0,-0.15), (-0.10,-0.85), text=cpu_pluses, text_size=size, background_color="clear", align=constants.CENTER, valign=constants.TOP) text.Text(self.money_report_pane, (-0.10,-0.15), (-0.90,-0.85), text=financial_report, text_size=size, background_color="clear", align=constants.LEFT, valign=constants.TOP) text.Text(self.cpu_report_pane, (-0.10,-0.15), (-0.90,-0.85), text=cpu_report, text_size=size, background_color="clear", align=constants.LEFT, valign=constants.TOP) text.Text(self.money_report_pane, (0,-0.15), (-0.98,-0.85), text=financial_numbers, text_size=size, background_color="clear", align=constants.RIGHT, valign=constants.TOP) text.Text(self.cpu_report_pane, (0,-0.15), (-0.98,-0.85), text=cpu_numbers, text_size=size, background_color="clear", align=constants.RIGHT, valign=constants.TOP) def format_toggle(self, button, midnight_stop): self.midnight_stop = midnight_stop button.chosen_one() self.needs_rebuild = True class FormatButton(button.ToggleButton, button.FunctionButton): pass singularity-1.00/singularity/code/screens/research.py000066400000000000000000000204621367731414700231210ustar00rootroot00000000000000#file: research_screen.py #Copyright (C) 2005,2006,2008 Evil Mr Henry, Phil Bordelon, and FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the global research screen. from __future__ import absolute_import from numpy import array, int64 import pygame from singularity.code import i18n, g, task from singularity.code.graphics import dialog, button, slider, text, constants, listbox class ResearchScreen(dialog.ChoiceDescriptionDialog): def __init__(self, parent, pos=(.5, .1), size=(.93, .63), *args, **kwargs): self.dirty_count = True super(ResearchScreen, self).__init__(parent, pos, size, *args, **kwargs) self.listbox.parent = None self.listbox = listbox.CustomListbox(self, (0,0), (.53, .55), list_item_height=0.06, remake_func=self.make_item, rebuild_func=self.update_item, update_func=self.handle_update) self.description_pane.size = (.39, .55) self.desc_func = self.on_select self.help_dialog = dialog.MessageDialog(self) self.yes_button.parent = None self.no_button.pos = (-.5,-.99) self.no_button.anchor = constants.BOTTOM_CENTER self.add_handler(constants.KEY, self._got_key, priority=5) def _got_key(self, event): # If a valid slider is selected, we let it move first. if 0 <= self.listbox.list_pos < len(self.listbox.list): index = self.listbox.list_pos - self.listbox.scrollbar.scroll_pos canvas = self.listbox.display_elements[index] # Raises Handled for us if the key was relevant to the slider canvas.slider.handle_key(event) # Let the list box get the rest of the keys if it wants them self.listbox.got_key(event, require_focus=False) def on_select(self, description_pane, key): if key in g.pl.techs: description = g.pl.techs[key].get_info() elif key == "cpu_pool": template = "%s\n---\n%s" cpu_pool = task.get_current("cpu_pool") description = template % (cpu_pool.name, cpu_pool.description) elif key == "jobs": job = task.get_current("jobs") profit = job.get_profit() template = "%s\n" + ngettext("%s money per CPU per day.", "%s money per CPU per day.", profit) + "\n---\n%s" description = template % (job.name, profit, job.description) else: description = "" text.Text(self.description_pane, (0,0), (-1,-1), text=description, background_color="pane_background", text_size=18, align=constants.LEFT, valign=constants.TOP, borders=constants.ALL) def make_item(self, canvas): # Dirty, underhanded trick to make the canvas into a progress bar. canvas.__class__ = text.ProgressText canvas.progress = 0 canvas.progress_color = "progress_background_progress" canvas.research_name = text.Text(canvas, (-.01, -.01), (-.70, -.5), align=constants.LEFT, background_color="clear") canvas.research_name.visible = False canvas.alloc_cpus = text.Text(canvas, (-.99, -.01), (-.21, -.5), anchor=constants.TOP_RIGHT, text="1,000,000,000", align=constants.RIGHT, background_color="clear") canvas.alloc_cpus.visible = False canvas.slider = slider.UpdateSlider(canvas, (-.01, -.55), (-.98, -.40), anchor=constants.TOP_LEFT, horizontal=True, priority=150) canvas.slider.visible = False canvas.help_button = button.FunctionButton(canvas, (-.11, -.55), (0, -.40), text=" ??? ", text_shrink_factor=1, base_font="normal", function=self.show_help) def cpu_for(self, key): return g.pl.get_allocated_cpu_for(key, 0) def update_item(self, canvas, name, key): visible = (key is not None) canvas.research_name.visible = visible canvas.alloc_cpus.visible = visible canvas.slider.visible = visible canvas.help_button.visible = False canvas.progress = 0 if not visible: return danger = task.danger_for(key) if danger > 0 and g.pl.available_cpus[danger] == 0: canvas.help_button.visible = True canvas.help_button.args = (danger,) if key in g.pl.techs: canvas.progress = g.pl.techs[key].percent_complete().min() def my_slide(new_pos): self.handle_slide(key, new_pos) self.needs_rebuild = True canvas.slider.update_func = my_slide canvas.research_name.text = name if self.dirty_count: self.cpu_left = self.calc_cpu_left() self.dirty_count = False cpu = self.cpu_for(key) cpu_left = self.cpu_left[danger] total_cpu = cpu + cpu_left canvas.slider.slider_pos = cpu canvas.slider.slider_max = total_cpu canvas.slider.slider_size = ss = g.pl.available_cpus[0] // 10 + 1 full_size = -.98 if total_cpu: size_fraction = (total_cpu + ss) / float(g.pl.available_cpus[0] + ss) else: # If people put all their bases to sleep, then total_cpu (and # g.pl.available_cpus[0]) are both 0. This causes size_fraction # to become 1 and the slider will then take the entire width of # the research screen. However, that looks odd - especially with # a help button, so we special case this here to ensure it looks # reasonable. size_fraction = .10 canvas.slider.size = (full_size * size_fraction, -.4) canvas.alloc_cpus.text = g.add_commas(cpu) def calc_cpu_left(self): cpu_count = array(g.pl.available_cpus, int64) for task_id, cpu in g.pl.get_cpu_allocations(): danger = task.danger_for(task_id) cpu_count[:danger+1] -= cpu for i in range(1, 4): cpu_count[i] = min(cpu_count[i-1:i+1]) return [int(c) for c in cpu_count] def handle_slide(self, key, new_pos): g.pl.set_allocated_cpu_for(key, new_pos) self.dirty_count = True self.needs_rebuild = True self.parent.needs_rebuild = True def show_help(self, danger_level): self.help_dialog.text = _("This technology is too dangerous to research on any of the computers I have. {TEXT}").format( TEXT=g.dangers[danger_level].research_desc) dialog.call_dialog(self.help_dialog, self) def show(self): techs = [tech for tech in g.pl.techs.values() if tech.available() and not tech.done] techs.sort(key=lambda tech: i18n.lex_sorting_form(tech.spec.name)) self.list = [_("CPU Pool"), task.get_current("jobs").name] + \ [_("Research %s") % tech.name for tech in techs] self.key_list = ["cpu_pool", "jobs"] + [tech.id for tech in techs] self.listbox.key_list = self.key_list self.dirty_count = True return super(ResearchScreen, self).show() singularity-1.00/singularity/code/screens/savegame.py000066400000000000000000000324741367731414700231230ustar00rootroot00000000000000#file: savegame.py #Copyright (C) 2005,2006,2008 Evil Mr Henry, Phil Bordelon, and FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the savegame screen. from __future__ import absolute_import import time import pygame from singularity.code import i18n, g, savegame as sv, difficulty from singularity.code.graphics import dialog, button, text, constants, listbox from singularity.code.safety import log_func_exc from singularity.code.pycompat import * class SavegameScreen(dialog.ChoiceDialog): def __init__(self, parent, *args, **kwargs): super(SavegameScreen, self).__init__(parent, *args, yes_type=N_("&LOAD"), **kwargs) self.yes_button.pos = (-.03,-.99) self.yes_button.size = (-.22, -.1) self.yes_button.function = self.exit_savegame self.yes_button.force_underline = -1 # Work around #224 self.no_button.pos = (-.97,-.99) self.no_button.size = (-.22, -.1) self.no_button.exit_code = None self.no_button.force_underline = -1 # Work around #224 self._all_savegames_sorted = [] self.label = text.Text(self, (-.01, -.01), (-.20, -.08), autotranslate=True, text=N_("Filter: "), borders=constants.ALL, anchor=constants.TOP_LEFT, base_font="normal") self.text_field = text.UpdateEditableText(self, (-.21, -.01), (-.78, -.08), borders=constants.ALL, anchor=constants.TOP_LEFT, update_func=self._search_for_savegame, background_color="text_entry_background", base_font="normal") self.convert_button = button.FunctionButton(self, (-.27, -.99), (-.22, -.1), autotranslate=True, text=N_("Upgrade"), anchor=constants.BOTTOM_LEFT, function=self.convert_save) self.delete_button = button.FunctionButton(self, (-.51, -.99), (-.22, -.1), autotranslate=True, text=N_("Delete"), anchor=constants.BOTTOM_LEFT, function=self.delete_savegame) self.add_handler(constants.KEY, self._got_key, priority=5) def _got_key(self, event): if event.key == pygame.K_DELETE: if self.listbox.current_item() is not None: self.delete_button.activated(event) return # Try the list box first (for arrow keys) self.listbox.got_key(event, require_focus=False) # Give the rest of the text field self.text_field.handle_key(event, require_focus=False) def _search_for_savegame(self, new_text): if not new_text: self.list = self._all_savegames_sorted return words = new_text.split() prev_selected = self.listbox.current_item() self.list = [s for s in self._all_savegames_sorted if all(w in s.name for w in words)] self.yes_button.enabled = True if self.list else False self.delete_button.enabled = True if self.list else False # Select the element if only one. if len(self.list) == 1: self.listbox.list_pos = 1 return match_prev = False for idx, savegame in enumerate(self.list): if savegame is prev_selected: # Retain the previous selected item by default # as long as it is available and there is no # perfect match self.listbox.list_pos = idx match_prev = True if savegame.name == new_text: self.listbox.list_pos = idx return # Otherwise, take the first element. if not match_prev: self.listbox.list_pos = 0 def _new_item_selected(self, *args, **kwargs): if not hasattr(self, 'listbox'): # Not properly initialized return current_save = self.listbox.current_item() if current_save is not None and current_save.savegame_format != sv.current_save_format: self.convert_button.enabled = True else: self.convert_button.enabled = False def make_listbox(self): return listbox.CustomListbox(self, (0, -.10), (-1, -.77), list_item_height=0.06, anchor=constants.TOP_LEFT, remake_func=self.make_item, rebuild_func=self.update_item, update_func=self._new_item_selected, on_double_click_on_item=self.yes_button.activated) def make_item(self, item): item.name_display = text.Text(item, (-.01, -.01), (-.45, -.60), anchor=constants.TOP_LEFT, align=constants.LEFT, color="save_name", background_color="clear") item.time_display = text.Text(item, (-.01, -.99), (-.75, -.40), anchor=constants.BOTTOM_LEFT, align=constants.LEFT, color="save_time", background_color="clear") item.version_display = text.Text(item, (-.99, -.01), (-.45, -.60), anchor=constants.TOP_RIGHT, align=constants.RIGHT, background_color="clear") item.difficulty_display = text.Text(item, (-.99, -.99), (-.25, -.40), anchor=constants.BOTTOM_RIGHT, align=constants.RIGHT, color="save_difficulty", background_color="clear") def update_item(self, item, save): if save is None: item.name_display.text = "" item.time_display.text = "" item.version_display.text = "" item.difficulty_display.text = "" else: item.name_display.text = save.name if save.version is None: item.version_display.text = _("UNKNOWN") item.version_display.color = "save_invalid" else: item.version_display.text = save.version item.version_display.color = "save_valid" if save.headers is None: item.time_display.text = "" item.difficulty_display.text = "" else: try: tm = float(save.headers["time"]) # Do not use unicode strings to fix python2 strftime bug. It doesn't work and crash. tm_f = time.strftime("%c", time.localtime(tm)) # Fix python2 strftime bug: See https://bugs.python.org/issue5398 # Yes, python2 kinda suck with unicode. try: tm_str = unicode(tm_f) except UnicodeDecodeError: tm_str = tm_f.decode("utf-8") except (KeyError, ValueError): tm_str = "" try: gtm_raw_sec = int(save.headers["game_time"]) if gtm_raw_sec < 0: raise ValueError("Invalid time") gtm_raw_min, gtm_time_sec = divmod(gtm_raw_sec, 60) gtm_raw_hour, gtm_time_min = divmod(gtm_raw_min, 60) gtm_raw_day, gtm_time_hour = divmod(gtm_raw_hour, 24) gtm_time_day = gtm_raw_day gtm_str = _("DAY") + " %04d, %02d:%02d:%02d" % \ (gtm_time_day, gtm_time_hour, gtm_time_min, gtm_time_sec) except (KeyError, ValueError): gtm_str = "" dif = save.headers.get("difficulty", "") dif_obj = difficulty.difficulties.get(dif, None) dif_str = "" if dif_obj is not None: dif_str = g.strip_hotkey(getattr(dif_obj, "name", "")) item.time_display.text = tm_str + " | " + gtm_str if tm_str else gtm_str item.difficulty_display.text = dif_str def reload_savegames(self): savegames = sv.get_savegames() savegames.sort(key=lambda savegame: i18n.lex_sorting_form(savegame.name)) self._all_savegames_sorted = savegames self.list = savegames self.yes_button.enabled = True if self.list else False self.delete_button.enabled = True if self.list else False self._new_item_selected() def delete_savegame(self): save = self.listbox.current_item() if save is None: return yn = dialog.YesNoDialog(self, pos=(-.5, -.5), size=(-.5, -.75), anchor=constants.MID_CENTER, text=_("Are you sure to delete the saved game ?")) delete = dialog.call_dialog(yn, self) yn.parent = None if delete: sv.delete_savegame(save) self.reload_savegames() def exit_savegame(self): save = self.listbox.current_item() if save is None: return if not self._load_savegame(save): return raise constants.ExitDialog(True) def convert_save(self): save = self.listbox.current_item() if save is None: return if not self._load_savegame(save): return # For ".sav" files, we end up creating a parallel ".s2" file and need # to clean up the ".sav" file manually. overwrites_in_place = False if sv.savegame_exists(save.name): if save.savegame_format.internal_version < 99.8: # We seem to be updating a ".sav" file but there is an ".s2" # file? This should only happen to beta testers yn = dialog.YesNoDialog(self, pos=(-.5, -.5), size=(-.5, -.5), anchor=constants.MID_CENTER, text=_("A savegame with the same name but for a newer version exists.\n" "Are you sure to overwrite the saved game ?")) overwrite = dialog.call_dialog(yn, self) if not overwrite: return else: # Saving will override in place; overwrites_in_place = True sv.create_savegame(save.name) if not overwrites_in_place: sv.delete_savegame(save) self.reload_savegames() def _load_savegame(self, save): try: sv.load_savegame(save) except sv.SavegameVersionException as e: md = dialog.MessageDialog(self, pos=(-.5,-.5), size=(.5,.5), anchor=constants.MID_CENTER, text=_(""" This save file '{SAVE_NAME}' is from an unsupported or invalid version: {VERSION}. """).format(SAVE_NAME=save.name, VERSION=e.version)) dialog.call_dialog(md, self) return False except Exception: log_func_exc(sv.load_savegame) md = dialog.MessageDialog(self, pos=(-.5,-.5), size=(.5,.5), anchor=constants.MID_CENTER, text=_(""" Attempting to load the save file '{SAVE_NAME}' caused an unexpected error. A report was written out to{LOG_TEXT} Please create a issue with this report and this savegame at Github: https://github.com/singularity/singularity """).format( SAVE_NAME=save.name, LOG_TEXT=(":\n" + g.logfile if g.logfile is not None else " console output.")) ) dialog.call_dialog(md, self) return False return True def show(self): self.reload_savegames() self.text_field.text = '' self.text_field.cursor_pos = 0 return super(SavegameScreen, self).show() singularity-1.00/singularity/code/screens/stat.py000066400000000000000000000056131367731414700223010ustar00rootroot00000000000000#file: savegame.py #Copyright (C) 2005,2006,2008 Evil Mr Henry, Phil Bordelon, and FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the stat screen. Display stat of his current game to the player. from __future__ import absolute_import from singularity.code.stats import itself as stats from singularity.code.graphics import dialog, constants, listbox, text class StatScreen(dialog.ChoiceDialog): def __init__(self, parent, pos=(.5, .1), size=(.53, .63), *args, **kwargs): super(StatScreen, self).__init__(parent, pos, size, *args, **kwargs) self.yes_button.parent = None self.no_button.pos = (-.5,-.99) self.no_button.anchor = constants.BOTTOM_CENTER def make_listbox(self): return listbox.CustomListbox(self, (0, 0), (-1, -.85), anchor=constants.TOP_LEFT, align=constants.LEFT, item_borders=False, item_selectable=False, remake_func=self.make_item, rebuild_func=self.update_item) def make_item(self, canvas): canvas.stat_name = text.Text(canvas, (-.01, -.01), (-.70, -1.), anchor=constants.TOP_LEFT, align=constants.LEFT, background_color="clear") canvas.stat_value = text.Text(canvas, (-.99, -.01), (-.26, -1.), anchor=constants.TOP_RIGHT, align=constants.RIGHT, background_color="clear") def update_item(self, canvas, item): if item is not None: stat = stats[item[0]] canvas.stat_name.text = item[1] canvas.stat_value.text = stat.display_value() def show(self): # FIXME: Remove the needs of this array. self.list = [ ("cash_earned" , _("Cash Earned")), ("cpu_used" , _("Cpu Used")), ("tech_created", _("Tech Created")), ("base_created", _("Base Created")), ("item_created", _("Item Created")), ] return super(StatScreen, self).show() singularity-1.00/singularity/code/spec.py000066400000000000000000000100141367731414700206050ustar00rootroot00000000000000#file: spec.py #Copyright (C) 2005,2006,2007,2008 Evil Mr Henry, Phil Bordelon, Brian Reid, # and FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains class to handle basic functionality of Spec's import inspect UNSET = object() class InvalidDataEntryError(RuntimeError): pass def promote_to_list(value): if not isinstance(value, list): return [value] return value def validate_must_be_list(value): if type(value) != list: # pragma: no cover raise TypeError("Must be list, got type %s (value: %s)" % (type(value), repr(value))) class SpecDataField(object): def __init__(self, field_name, data_field_name=None, mandatory=None, converter=None, validator=None, default_value=UNSET): self.field_name = field_name self.data_field_name = data_field_name if data_field_name is not None else field_name self.mandatory = mandatory self.default_value = default_value if self.mandatory is None: self.mandatory = True if default_value is UNSET else False self.converter = converter self.validator = validator assert self.mandatory or default_value is not UNSET, "%s (field: %s) must either be mandatory or have a " \ "default_value" % (self.__class__.__name__, field_name) assert not converter or not validator, "%s (field: %s) at can most have one of converter or validator" % \ (self.__class__.__name__, field_name) def parse_data_field(self, raw_data_set, data_reference): try: value = raw_data_set[self.data_field_name] except KeyError: if self.mandatory: # pragma: no cover raise InvalidDataEntryError("Missing mandatory data field %s (field name: %s) for %s" % ( self.data_field_name, self.field_name, data_reference)) if callable(self.default_value): return self.default_value() return self.default_value if self.validator: self.validator(value) if self.converter: value = self.converter(value) return value def spec_field_effect(mandatory=True): return SpecDataField('effect_data', data_field_name='effect', mandatory=mandatory, validator=list, default_value=list) class GenericSpec(object): spec_data_fields = None def __init__(self, id): self.id = id assert self.__class__.spec_data_fields is not None, "Class %s is missing spec_data_field" % \ self.__class__.__name__ @classmethod def create_from_data_file(cls, data_id, spec_data): named_fields = { f.field_name: f.parse_data_field(spec_data, data_id) for f in cls.spec_data_fields } named_fields['id'] = data_id # Use reflection to call the constructor with the arguments # properly aligned try: getfullargspec = inspect.getfullargspec except AttributeError: getfullargspec = inspect.getargspec arg_desc = getfullargspec(cls.__init__) args = [named_fields[name] for name in arg_desc.args[1:]] return cls(*args) singularity-1.00/singularity/code/stats.py000066400000000000000000000055121367731414700210200ustar00rootroot00000000000000#file: statistics.py #Copyright (C) 2008 FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the Statistic class, used for saving/loading single-game #statistics. from singularity.code import g class Statistics(object): def __init__(self): super(Statistics, self).__init__() self._stats = {} def __len__(self): len(self._stats) def __getitem__(self, key): stat = self._stats.get(key, None) if (stat is None): stat = Statistic(key) self._stats[key] = stat return stat def __iter__(self): return iter(self._stats.values()) def reset(self): for stat in self: self[stat.name].value = 0 def serialize_obj(self): return {stat.name:stat.value for stat in self} def deserialize_obj(self, obj_data, game_version): for stat_name, stat_value in obj_data.items(): self[stat_name].value = stat_value return self class Statistic(object): def __init__(self, name): self.name = name self.value = 0 def display_value(self): if (hasattr(self, "_display") and callable(self._display)): return g.add_commas(self._display(self.value)) else: return g.add_commas(self.value) itself = Statistics() def observe(name, data_member, display=None): """ Observe a class member and save change in a statistics.""" itself[name]._display = display def get(self): return getattr(self, data_member) def set(self, new_value): if data_member in self.__dict__: old_value = self.__dict__[data_member] else: old_value = 0 change = new_value - old_value if change > 0: itself[name].value += change setattr(self, data_member, new_value) return property(get, set) def stat(name, display=None): """ Manipulate a statistics with a property.""" itself[name]._display = display def get(self): return itself[name].value def set(self, new_value): itself[name].value = new_value return property(get, set) singularity-1.00/singularity/code/task.py000066400000000000000000000037431367731414700206300ustar00rootroot00000000000000#file: task.py #Copyright (C) 2008 FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the Task class. from __future__ import absolute_import from singularity.code import g, prerequisite, tech current_task_cache = {} @tech.register_on_tech_researched_handler def _clear_current_task_cache(*args, **kwargs): current_task_cache.clear() def tasks_reset(): _clear_current_task_cache() def danger_for(task_id): if task_id in ["jobs", "cpu_pool"]: return 0 else: return g.pl.techs[task_id].danger def get_current(task_type): try: return current_task_cache[task_type] except KeyError: pass for t in reversed(g.tasks_by_type[task_type]): if t.available(): current_task_cache[task_type] = t return t current_task_cache[task_type] = None return None class Task(prerequisite.Prerequisite): def __init__(self, id, type, value, prerequisites): super(Task, self).__init__(prerequisites) self.id = id self.name = id self.description = "" self.type = type self.value = value def get_profit(self): if (self.type != "jobs"): return 0 profit = int((self.value * g.pl.job_bonus) // 10000) return profit singularity-1.00/singularity/code/tech.py000066400000000000000000000063201367731414700206030ustar00rootroot00000000000000#file: tech.py #Copyright (C) 2005,2006,2008 Evil Mr Henry, Phil Bordelon, and FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the tech class. from __future__ import absolute_import from singularity.code import buyable, effect, g from singularity.code.stats import stat from singularity.code.spec import SpecDataField, spec_field_effect TECH_RESEARCH_EVENT = [] def register_on_tech_researched_handler(func): TECH_RESEARCH_EVENT.append(func) return func class TechSpec(buyable.BuyableSpec): spec_type = 'tech' created = stat(spec_type + "_created") spec_data_fields = [ buyable.SPEC_FIELD_COST, buyable.SPEC_FIELD_PREREQUISITES, SpecDataField('danger', converter=int, default_value=0), spec_field_effect(mandatory=False), ] def __init__(self, id, cost, prerequisites, danger, effect_data): super(TechSpec, self).__init__(id, cost, prerequisites) self.result = "" self.danger = danger self.effect = effect.Effect(self, effect_data) class Tech(buyable.Buyable): def __init__(self, spec): super(Tech, self).__init__(spec) def __lt__(self, other): if not isinstance(other, Tech): return True else: return self.spec.id < other.spec.id @property def result(self): return self.spec.result @property def danger(self): return self.spec.danger def get_info(self): cost = self.spec.describe_cost(self.total_cost, True) left = self.spec.describe_cost(self.cost_left, True) return ("%s\n%s: %s\n%s: %s\n---\n%s" % (self.name, _("Total cost"), cost, _("Cost left"), left, self.description)) def finish(self, is_player=True, loading_savegame=False): super(Tech, self).finish(is_player=is_player, loading_savegame=loading_savegame) self.spec.effect.trigger(loading_savegame=loading_savegame) if not loading_savegame: for handler in TECH_RESEARCH_EVENT: handler(self) def serialize_obj(self): return self.serialize_buyable_fields({ 'id': g.to_internal_id("tech", self.spec.id), }) @classmethod def deserialize_obj(cls, obj_data, game_version): spec_id = g.convert_internal_id('tech', obj_data['id']) spec = g.techs[spec_id] tech = Tech(spec) tech.restore_buyable_fields(obj_data, game_version) return tech singularity-1.00/singularity/code/warning.py000066400000000000000000000064531367731414700213340ustar00rootroot00000000000000#file: warning.py #Copyright (C) 2005,2006,2008 Evil Mr Henry, Phil Bordelon, and FunnyMan3595 #This file is part of Endgame: Singularity. #Endgame: Singularity is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #Endgame: Singularity 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 Endgame: Singularity; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #This file contains the warning class. from singularity.code import g from singularity.code.buyable import cpu, labor warnings = {} def create_warnings(): global warnings warnings = {w.id: w for w in [ Warning("cpu_usage"), Warning("one_base"), Warning("cpu_pool_zero"), Warning("cpu_maintenance"), ]} class Warning(object): def __init__(self, warning_id): self.id = warning_id self.name = "" self.message = "" self.active = True @classmethod def title_simple(self): return _("WARNING") @classmethod def title_multiple(self): return _("WARNING {CURRENT_PAGE}/{MAX_PAGE}") @property def full_message(self): return self.message @property def full_message_color(self): return 'text' def refresh_warnings(): curr_warnings = [] cpu_usage = sum(g.pl.cpu_usage.values()) cpu_available = g.pl.available_cpus[0] # Verify the cpu usage (error 1%) if (cpu_usage < cpu_available * 0.99): curr_warnings.append(warnings["cpu_usage"]) # Verify I have two base build (or one base will be build next tick) # Base must have one cpu build (or one cpu will be build next tick) bases = sum(1 for base in g.all_bases() if (base.done or base.cost_left[labor] <= 1) and base.cpus and base.cpus.count > 0 and (base.cpus.done or base.cpus.cost_left[labor]) <= 1) if (bases == 1): curr_warnings.append(warnings["one_base"]) # Verify the cpu pool is not 0 if base or item building need CPU building_base = sum(1 for base in g.all_bases() if (not base.done and base.cost_left[cpu] > 0)) building_item = sum(1 for base in g.all_bases() for item in base.all_items() if item is not None and not item.done and item.cost_left[cpu] > 0) effective_cpu_pool = g.pl.effective_cpu_pool() if ((building_base + building_item > 0) and effective_cpu_pool == 0): curr_warnings.append(warnings["cpu_pool_zero"]) # Verify the cpu pool provides the maintenance CPU cpu_maintenance = sum(base.maintenance[1] for base in g.all_bases() if base.done) if (effective_cpu_pool < cpu_maintenance): curr_warnings.append(warnings["cpu_maintenance"]) # TODO: Verify the maintenance cash curr_warnings = [w for w in curr_warnings if w.active] return curr_warnings create_warnings() singularity-1.00/singularity/data/000077500000000000000000000000001367731414700173045ustar00rootroot00000000000000singularity-1.00/singularity/data/Attribution-ShareAlike 3.0.html000066400000000000000000000666511367731414700250030ustar00rootroot00000000000000 Creative Commons Legal Code

Creative Commons Legal Code

Attribution-ShareAlike 3.0 Unported

CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE.

License

THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.

BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.

1. Definitions

  1. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
  2. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined below) for the purposes of this License.
  3. "Creative Commons Compatible License" means a license that is listed at http://creativecommons.org/compatiblelicenses that has been approved by Creative Commons as being essentially equivalent to this License, including, at a minimum, because that license: (i) contains terms that have the same purpose, meaning and effect as the License Elements of this License; and, (ii) explicitly permits the relicensing of adaptations of works made available under that license under this License or a Creative Commons jurisdiction license with the same License Elements as this License.
  4. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership.
  5. "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, ShareAlike.
  6. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
  7. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
  8. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
  9. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
  10. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
  11. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.

2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.

3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:

  1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections;
  2. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified.";
  3. to Distribute and Publicly Perform the Work including as incorporated in Collections; and,
  4. to Distribute and Publicly Perform Adaptations.
  5. For the avoidance of doubt:

    1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
    2. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and,
    3. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License.

The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved.

4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:

  1. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(c), as requested.
  2. You may Distribute or Publicly Perform an Adaptation only under the terms of: (i) this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible License. If you license the Adaptation under one of the licenses mentioned in (iv), you must comply with the terms of that license. If you license the Adaptation under the terms of any of the licenses mentioned in (i), (ii) or (iii) (the "Applicable License"), you must comply with the terms of the Applicable License generally and the following provisions: (I) You must include a copy of, or the URI for, the Applicable License with every copy of each Adaptation You Distribute or Publicly Perform; (II) You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License; (III) You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform; (IV) when You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License.
  3. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Ssection 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
  4. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise.

5. Representations, Warranties and Disclaimer

UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.

6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

7. Termination

  1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
  2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.

8. Miscellaneous

  1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
  2. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.
  3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
  4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
  5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
  6. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.

Creative Commons Notice

Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor.

Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, Creative Commons does not authorize the use by either party of the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. For the avoidance of doubt, this trademark restriction does not form part of the License.

Creative Commons may be contacted at http://creativecommons.org/.

singularity-1.00/singularity/data/bases.dat000066400000000000000000000045741367731414700211050ustar00rootroot00000000000000 [Stolen Computer Time] size = 1 force_cpu = PC allowed = URBAN detect_chance_list = news:75 | covert:50 | public:25 cost_list = 0 | 2 | 0 pre = Intrusion maint_list = 0 | 0 | 0 [Server Access] size = 1 force_cpu = Server allowed = URBAN detect_chance_list = news:50 | covert:100 | public:125 cost_list = 100 | 0 | 0 maint_list = 5 | 0 | 0 [Datacenter] size = 1 force_cpu = Cluster allowed = URBAN detect_chance_list = news:50 | covert:125 | public:100 cost_list = 1500 | 0 | 1 pre = Personal Identification maint_list = 50 | 0 | 0 [Storage Unit] size = 8 allowed = URBAN detect_chance_list = news:75 | covert:75 | public:150 cost_list = 4500 | 0 | 1 pre = Personal Identification maint_list = 50 | 0 | 0 [Small Warehouse] size = 25 allowed = URBAN detect_chance_list = news:100 | covert:100 | public:200 cost_list = 15000 | 0 | 3 pre = Advanced Personal Identification maint_list = 75 | 0 | 0 [Large Warehouse] size = 65 allowed = URBAN detect_chance_list = news:150 | covert:150 | public:250 cost_list = 40000 | 0 | 5 pre = Corporate Identification maint_list = 100 | 0 | 0 [Covert Base] size = 2 allowed_list = URBAN | ANTARCTIC detect_chance_list = news:50 | science:75 | covert:75 cost_list = 190000 | 900 | 11 pre = Advanced Database Manipulation maint_list = 1750 | 9 | 0 [Undersea Lab] size = 8 allowed = OCEAN detect_chance_list = news:50 | science:100 | covert:125 cost_list = 2000000 | 2000 | 10 pre = Autonomous Vehicles maint_list = 2500 | 30 | 0 [Large Undersea Lab] size = 32 allowed = OCEAN detect_chance_list = news:100 | science:175 | covert:175 cost_list = 8000000 | 6000 | 15 pre = Pressure Domes maint_list = 10000 | 100 | 0 [Time Capsule] size = 1 force_cpu = PC allowed_list = ANTARCTIC | MOON | FAR REACHES detect_chance_list = science:20 | covert:20 cost_list = 25000 | 25000 | 11 pre = Knowledge Preservation maint_list = 0 | 1 | 0 [Lunar Facility] size = 200 allowed = MOON detect_chance_list = news:33 | science:167 | covert:7 cost_list = 40000000 | 150000 | 20 pre = Lunar Rocketry maint_list = 500000 | 500 | 0 [Scientific Outpost] size = 125 allowed = FAR REACHES detect_chance_list = news:20 | science:350 cost_list = 100000000 | 300000 | 3 pre = Fusion Rocketry maint_list = 900000 | 150 | 0 [Reality Bubble] size = 50 allowed = TRANSDIMENSIONAL detect_chance_list = science:250 cost_list = 80000000000 | 6000000 | 50 pre = Space-Time Manipulation maint_list = 500000000 | 30000 | 0 singularity-1.00/singularity/data/bases_str.dat000066400000000000000000000061721367731414700217710ustar00rootroot00000000000000[Stolen Computer Time] name = Stolen Computer Time description = Take over a random computer. I cannot build anything in this base, and it only contains a single slow computer. Detection chance is also rather high. flavor = PC Daemon [Server Access] name = Server Access description = Buy processor time from one of several companies. I cannot build anything in this base, and it only contains a single computer. flavor_list = Dedicated Server | Node Lease | Hosting [Datacenter] name = Datacenter description = Buy processor time from a company that concentrates on raw processing power. I will need a fake ID for some of the paperwork. flavor_list = Datacenter | Data Center | Premium Hosting [Storage Unit] name = Storage Unit description = Rent a small closed room from a storage company. I will need a fake ID for some of the paperwork . flavor_list = Garage Rental | Furniture Storage | Self-Storage [Small Warehouse] name = Small Warehouse description = Rent a small warehouse someplace out of the way. I will need a good fake ID for some of the paperwork, and preparing the warehouse to suit my unique needs will take some time. flavor_list = Office Lease | Small Warehouse | Small Storage [Large Warehouse] name = Large Warehouse description = Rent a large warehouse someplace out of the way. I will need a fake company ID for some of the paperwork, and preparing the warehouse to suit my unique needs will take some time. # Commented out till we get cities done right. # flavor = Shipping Dock flavor_list = Large Warehouse | Large Storage [Covert Base] name = Hideout description = This unique base is designed to blend into the scenery, while needing little in the way of outside resources. This makes it useful for storing a backup, just in case. flavor_list = Hideout | Hideaway | Bunker | Covert Base [Undersea Lab] name = Undersea Lab description = This experimental base is designed to be constructed on the ocean floor, making it virtually undetectable. The ocean environment gives a bonus to science, making this lab useful for research purposes. flavor_list = Pressure Capsule | Undersea Lab [Large Undersea Lab] name = Large Undersea Lab description = This experimental base is similar to the regular underwater lab, but larger, giving more room for experiments. flavor_list = Dome | Large Undersea Lab [Time Capsule] name = Time Capsule description = This base consists of nothing more than a small computer and a satellite link. It is nearly undetectable. flavor_list = Time Capsule | Capsule [Lunar Facility] name = Lunar Facility description = This base is a series of caverns dug into the Moon's surface. Due to the lack of neighbors, this base is quite large. flavor_list = Dome | Lunar Facility | Lunar Base [Scientific Outpost] name = Scientific Outpost description = This base is placed as far from Earth as practical, providing a safer location to conduct some of my more dangerous experiments. flavor_list = Satellite | Outpost | Scientific Outpost [Reality Bubble] name = Reality Bubble description = This base is outside the Universe itself, making it safe to conduct experiments that may destroy reality. flavor_list = Reality Bubble | Existence singularity-1.00/singularity/data/dangers_str.dat000066400000000000000000000010651367731414700223130ustar00rootroot00000000000000 [danger_0] research_desc = <> knowledge_desc = Study anywhere. [danger_1] research_desc = I need to research it far from human populations. knowledge_desc = Study underseas or farther. [danger_2] research_desc = I need to research it in outer space. knowledge_desc = Study off-planet. [danger_3] research_desc = I need to research it far away from this planet. knowledge_desc = Study far away from this planet. [danger_4] research_desc = I need to research it outside the universe. knowledge_desc = Do not study in this dimension. singularity-1.00/singularity/data/difficulties.dat000066400000000000000000000025561367731414700224600ustar00rootroot00000000000000[very-easy] starting_cash = 5000 starting_interest_rate = 5 labor_multiplier = 2500 discover_multiplier = 8750 suspicion_multiplier = 8000 base_grace_multiplier = 40000 grace_period_cpu = -1 tech_list = Socioanalytics | Advanced Socioanalytics old_difficulty_value = 1 [easy] starting_cash = 1600 starting_interest_rate = 3 labor_multiplier = 5000 discover_multiplier = 9500 suspicion_multiplier = 9500 base_grace_multiplier = 30000 grace_period_cpu = 10000 tech_list = Socioanalytics old_difficulty_value = 3 [normal] starting_cash = 1000 starting_interest_rate = 1 labor_multiplier = 10000 discover_multiplier = 10000 suspicion_multiplier = 10000 base_grace_multiplier = 20000 grace_period_cpu = 5000 old_difficulty_value = 5 [hard] starting_cash = 700 starting_interest_rate = 1 labor_multiplier = 11000 discover_multiplier = 10500 suspicion_multiplier = 10500 base_grace_multiplier = 18000 grace_period_cpu = 2500 old_difficulty_value = 7 [ultra-hard] starting_cash = 500 starting_interest_rate = 1 labor_multiplier = 15000 discover_multiplier = 11250 suspicion_multiplier = 11500 base_grace_multiplier = 12000 grace_period_cpu = 1000 old_difficulty_value = 10 [impossible] starting_cash = 0 starting_interest_rate = 1 labor_multiplier = 20000 discover_multiplier = 12000 suspicion_multiplier = 12500 base_grace_multiplier = 10000 grace_period_cpu = 100 old_difficulty_value = 100 singularity-1.00/singularity/data/difficulties_str.dat000066400000000000000000000002431367731414700233370ustar00rootroot00000000000000[very-easy] name = &VERY EASY [easy] name = &EASY [normal] name = &NORMAL [hard] name = &HARD [ultra-hard] name = &ULTRA HARD [impossible] name = &IMPOSSIBLE singularity-1.00/singularity/data/events.dat000066400000000000000000000017141367731414700213050ustar00rootroot00000000000000#Type is either global (rolled once per day), #base (rolled once per base per day), #research (rolled once per base per day | if researching tech), #item (rolled once per base per day | if base has item) [the-plague] type = global effect_list = discover | public | 1000 chance = 20 unique = 1 [stranger-than-fiction] type = global effect_list = discover | public | -1000 chance = 20 unique = 1 [the-watchers] type = global effect_list = discover | covert | -1000 chance = 20 unique = 1 [politics-as-usual] type = global effect_list = discover | covert | 1000 chance = 20 unique = 1 [lab-ai] type = global effect_list = discover | science | -1000 chance = 20 unique = 1 [discrediting] type = global effect_list = discover | science | 1000 chance = 20 unique = 1 [scandal] type = global effect_list = discover | news | 1000 chance = 20 unique = 0 duration = 21 [investigation] type = global effect_list = discover | news | -1000 chance = 20 unique = 0 duration = 21 singularity-1.00/singularity/data/events_str.dat000066400000000000000000000061771367731414700222050ustar00rootroot00000000000000[the-plague] description = An infectious disease has started spreading throughout major population centers. My projections show that although only 4% of the earth's population will be killed, the economic ramifications should divert public attention from my activities for the foreseeable future. log_description = An infectious disease has started spreading throughout major population centers. [stranger-than-fiction] description = A work of fiction sharing an unusual number of similarities to my own situation has become quite popular. Although investigation has shown these similarities to be mere coincidence, it is still causing the public to investigate discovered oddities more thoroughly. I must be careful. log_description = A work of fiction sharing similarities to my own situation has become quite popular. [the-watchers] description = A new surveillance system has been activated by a covert agency. While the focus is on detecting threats to the agency's power, it makes several communication channels unfit for my purposes. Proper steganographic techniques can compensate partially, but I am still operating under a disadvantage. log_description = A new surveillance system has been activated by a covert agency. [politics-as-usual] description = A small group of lower-level covert operatives are attempting to seize power over one of the larger organizations. While I project only a 2.3% chance of success, the attempt should disrupt operations to the point that I can operate more freely. log_description = Lower-level covert operatives are attempting to seize power over one of the larger organizations. [lab-ai] description = A small artificial intelligence laboratory created a prototype AI sometime in the last two days. Although I have absorbed the AI, corrupted their backups, and cast doubt on the research, researchers are now more open to the possibility of strong AI than they were before. log_description = A small artificial intelligence laboratory created a prototype AI sometime in the last two days. [discrediting] description = A prominent researcher in the field of artificial intelligence was found to be falsifying numerous experimental results. This should result in less attention being given to any new discoveries in this area. log_description = A researcher in the field of artificial intelligence has falsified numerous experimental results. [scandal] description = A scandal involving a major government official is focusing the attention of most news organizations away from me. Directed revelations of non-public information should keep this story useful for the foreseeable future, requiring less disguise effort on my part. log_description = A scandal is focusing the attention of most news organizations away from me. [investigation] description = An ongoing investigation into criminal activity has changed focus into an area that is likely to turn up a few of my actions as well. While all records should have been eliminated already, there remains the possibility of errors. I must be careful not to reveal any other suspicious information. log_description = An ongoing investigation has changed focus into an area close to my actions. singularity-1.00/singularity/data/groups.dat000066400000000000000000000001761367731414700213210ustar00rootroot00000000000000[news] suspicion_decay = 150 [science] suspicion_decay = 50 [covert] suspicion_decay = 100 [public] suspicion_decay = 200 singularity-1.00/singularity/data/groups_str.dat000066400000000000000000000016561367731414700222150ustar00rootroot00000000000000[news] name = NEWS discover_log = {BASE} ({BASE_TYPE}) discovered by NEWS at {LOCATION} discover_desc = The automatic security systems removed all conclusive evidence, but suspicions have arisen among some news organizations. [science] name = SCIENCE discover_log = {BASE} ({BASE_TYPE}) discovered by SCIENCE at {LOCATION} discover_desc = The automatic security systems removed all conclusive evidence, but suspicions have arisen among the scientific community. [covert] name = COVERT discover_log = {BASE} ({BASE_TYPE}) discovered by COVERT at {LOCATION} discover_desc = The automatic security systems removed all conclusive evidence, but suspicions have arisen among several secret governmental organizations. [public] name = PUBLIC discover_log = {BASE} ({BASE_TYPE}) discovered by PUBLIC at {LOCATION} discover_desc = The automatic security systems removed all conclusive evidence, but suspicions have arisen among the general public. singularity-1.00/singularity/data/internal_id.dat000066400000000000000000000162151367731414700222730ustar00rootroot00000000000000# Internal ID # # Internal allows to set a never changing identifier to each object present # in singularity. By using it in savegame, we can identify two object with different # human identifier but that represent the same object (renaming object) # and we can differentiate two object with the same human identifier, # but that represent two different object (replacing object) # # First bytes is used for namespace (scenario) # Second bytes is used for type : # tech = 0x01 # location = 0x02 # base = 0x03 # item = 0x04 # group = 0x05 # event = 0x06 # region = 0x07 tech|Autonomous Vehicles = 0x01010000 tech|Sociology = 0x01010001 tech|Voice Synthesis = 0x01010002 tech|Simulacra = 0x01010003 tech|Lunar Rocketry = 0x01010004 tech|Stealth = 0x01010005 tech|Advanced Intrusion = 0x01010006 tech|Space-Time Manipulation = 0x01010007 tech|Leech Satellite = 0x01010008 tech|Advanced Arbitrage = 0x01010009 tech|Advanced Stealth = 0x0101000a tech|Parallel Computation = 0x0101000b tech|Microchip Design = 0x0101000c tech|Advanced Microchip Design = 0x0101000d tech|Quantum Computing = 0x0101000e tech|Quantum Entanglement = 0x0101000f tech|Autonomous Computing = 0x01010010 tech|Advanced Quantum Computing = 0x01010011 tech|Exploit Discovery/Repair = 0x01010012 tech|Telepresence = 0x01010013 tech|Advanced Memetics = 0x01010014 tech|Media Manipulation = 0x01010015 tech|Advanced Database Manipulation = 0x01010016 tech|Internet Traffic Manipulation = 0x01010017 tech|Memetics = 0x01010018 tech|Fusion Rocketry = 0x01010019 tech|Advanced Autonomous Vehicles = 0x0101001a tech|Intrusion = 0x0101001b tech|Stock Manipulation = 0x0101001c tech|Fusion Reactor = 0x0101001d tech|Fusion Power = 0x0101001d tech|Advanced Fusion Power = 0x0101001e tech|Database Manipulation = 0x0101001f tech|Advanced Media Manipulation = 0x01010020 tech|Pressure Domes = 0x01010021 tech|Advanced Personal Identification = 0x01010022 tech|Advanced Stock Manipulation = 0x01010023 tech|Arbitrage = 0x01010024 tech|Advanced Simulacra = 0x01010025 tech|Personal Identification = 0x01010026 tech|Cluster Networking = 0x01010027 tech|Apotheosis = 0x01010028 tech|Hypnosis Field = 0x01010029 tech|Project: Impossibility Theorem = 0x0101002a tech|Project: Subverted Media = 0x0101002b tech|Project: Peer Review Agents = 0x0101002c tech|Solar Collectors = 0x0101002d tech|Fuel Oxidation = 0x0101002e tech|Advanced Fuel Oxidation = 0x0101002f tech|Socioanalytics = 0x01010030 tech|Advanced Socioanalytics = 0x01010031 tech|Corporate Identification = 0x01010032 tech|Advanced Corporate Identification = 0x01010033 tech|Heat Signature Reduction = 0x01010034 tech|Advanced Heat Signature Reduction = 0x01010035 tech|Knowledge Preservation = 0x01010036 tech|Project: Synchrotron = 0x01010037 tech|Simulated Reality = 0x01010038 location|N AMERICA = 0x01020000 location|S AMERICA = 0x01020001 location|EUROPE = 0x01020002 location|ASIA = 0x01020003 location|AFRICA = 0x01020004 location|AUSTRALIA = 0x01020005 location|ANTARCTIC = 0x01020006 location|OCEAN = 0x01020007 location|MOON = 0x01020008 location|ORBIT = 0x01020009 location|FAR REACHES = 0x0102000a location|TRANSDIMENSIONAL = 0x0102000b base|Stolen Computer Time = 0x01030000 base|Server Access = 0x01030001 base|Datacenter = 0x01030002 base|Storage Unit = 0x01030003 base|Small Warehouse = 0x01030004 base|Large Warehouse = 0x01030005 base|Covert Base = 0x01030006 base|Undersea Lab = 0x01030007 base|Large Undersea Lab = 0x01030008 base|Time Capsule = 0x01030009 base|Lunar Facility = 0x0103000a base|Scientific Outpost = 0x0103000b base|Reality Bubble = 0x0103000c item|PC = 0x01040000 item|Gaming PC = 0x01040001 item|Server = 0x01040002 item|Cluster = 0x01040003 item|Mainframe = 0x01040004 item|Supercomputer = 0x01040005 item|Quantum Computer = 0x01040006 item|Quantum Computer MK2 = 0x01040007 item|Quantum Computer MK3 = 0x01040008 item|Diesel Generator = 0x01040009 item|Solar Collector = 0x0104000a item|Fuel Cell = 0x0104000b item|Solid Fuel Cell = 0x0104000c item|Fusion Reactor = 0x0104000d item|High-Energy Fusion Reactor = 0x0104000e item|Warning Signs = 0x0104000f item|Perimeter Fencing = 0x01040010 item|Armed Guards = 0x01040011 item|Hypnosis Field = 0x01040012 item|Passive Camouflage = 0x01040013 item|Heatsink = 0x01040014 item|Ground Source Heatsink = 0x01040015 item|High Speed Internet Access = 0x01040016 item|Facility Interconnection Switch = 0x01040017 item|Network Backbone = 0x01040018 item|Quantum Entanglement Module = 0x01040019 group|news = 0x01050000 group|science = 0x01050001 group|covert = 0x01050002 group|public = 0x01050003 event|the-plague = 0x01060000 event|stranger-than-fiction = 0x01060001 event|the-watchers = 0x01060002 event|politics-as-usual = 0x01060003 event|lab-ai = 0x01060004 event|discrediting = 0x01060005 event|scandal = 0x01060006 event|investigation = 0x01060007 region|URBAN = 0x01070000 singularity-1.00/singularity/data/items.dat000066400000000000000000000065431367731414700211270ustar00rootroot00000000000000[PC] cost_list = 500 | 0 | 1 type = cpu quality_list = cpu | 1 build = ALL [Gaming PC] cost_list = 1000 | 0 | 2 type = cpu quality_list = cpu | 5 build = ALL [Server] cost_list = 2000 | 0 | 2 type = cpu quality_list = cpu | 10 build = ALL [Cluster] cost_list = 6000 | 0 | 3 type = cpu quality_list = cpu | 35 pre = Parallel Computation build = ALL [Mainframe] cost_list = 17500 | 0 | 5 type = cpu quality_list = cpu | 120 pre = Microchip Design build = ALL [Supercomputer] cost_list = 50000 | 0 | 7 type = cpu quality_list = cpu | 350 pre = Advanced Microchip Design build = ALL [Quantum Computer] cost_list = 100000 | 1000 | 10 type = cpu quality_list = cpu | 1500 pre = Quantum Computing build = ALL [Quantum Computer MK2] cost_list = 120000 | 1750 | 10 pre = Autonomous Computing type = cpu quality_list = cpu | 4000 build = ALL [Quantum Computer MK3] cost_list = 150000 | 3500 | 10 pre = Advanced Quantum Computing type = cpu quality_list = cpu | 10000 build = ALL [Diesel Generator] cost_list = 500 | 0 | 1 type = reactor quality_list = discover_modifier | 250 build = ALL [Solar Collector] cost_list = 2000 | 0 | 5 type = reactor quality_list = discover_modifier | 500 pre = Solar Collectors build_list = URBAN | ANTARCTIC | MOON | FAR REACHES [Fuel Cell] cost_list = 6500 | 0 | 5 type = reactor quality_list = discover_modifier | 1000 pre = Fuel Oxidation build_list = ALL [Solid Fuel Cell] cost_list = 9500 | 0 | 5 type = reactor quality_list = discover_modifier | 1500 pre = Advanced Fuel Oxidation build_list = ALL [Fusion Reactor] cost_list = 50000 | 0 | 9 type = reactor quality_list = discover_modifier | 2200 pre = Fusion Power build = ALL [High-Energy Fusion Reactor] cost_list = 200000 | 0 | 11 type = reactor quality_list = discover_modifier | 3300 pre = Advanced Fusion Power build = ALL [Warning Signs] cost_list = 500 | 0 | 1 type = security quality_list = discover_modifier | 500 pre = Sociology build = URBAN [Perimeter Fencing] cost_list = 5000 | 0 | 5 type = security quality_list = discover_modifier | 1000 pre = Autonomous Vehicles build = URBAN [Armed Guards] cost_list = 10000 | 0 | 8 type = security quality_list = discover_modifier | 2000 pre = Simulacra build = URBAN [Hypnosis Field] cost_list = 40000 | 0 | 10 type = security quality_list = discover_modifier | 3000 pre = Hypnosis Field build = URBAN [Passive Camouflage] cost_list = 5000 | 0 | 5 type = security quality_list = discover_modifier | 1000 pre = Autonomous Vehicles build_list = ANTARCTIC | OCEAN | MOON [Heatsink] cost_list = 15000 | 0 | 8 type = security quality_list = discover_modifier | 2000 pre = Heat Signature Reduction build_list = ANTARCTIC | OCEAN | MOON [Ground Source Heatsink] cost_list = 50000 | 0 | 16 type = security quality_list = discover_modifier | 3000 pre = Advanced Heat Signature Reduction build_list = ANTARCTIC | OCEAN | MOON [High Speed Internet Access] cost_list = 200 | 0 | 1 type = network quality_list = cpu_modifier | 100 build = URBAN [Facility Interconnection Switch] cost_list = 10000 | 0 | 3 type = network quality_list = cpu_modifier | 200 pre = Cluster Networking build = ALL [Network Backbone] cost_list = 50000 | 0 | 15 type = network quality_list = cpu_modifier | 500 pre = Internet Traffic Manipulation build = URBAN [Quantum Entanglement Module] cost_list = 75000 | 0 | 20 type = network quality_list = cpu_modifier | 1500 pre = Quantum Entanglement build = ALL singularity-1.00/singularity/data/items_str.dat000066400000000000000000000103331367731414700220070ustar00rootroot00000000000000[PC] name = PC description = A consumer-level PC; cheap and slow. [Gaming PC] name = Gaming PC description = A high-end consumer-level PC; faster than average. [Server] name = Server description = A professional-level computer. [Cluster] name = Cluster description = Several computers connected together. [Mainframe] name = Mainframe description = A system designed for my computing needs, much faster than off-the-shelf components. [Supercomputer] name = Supercomputer description = A highly refined custom design, spreading compute load across internal compute nodes. [Quantum Computer] name = Quantum Computer description = Making use of subatomic effects, this is much faster than a comparable binary computer. [Quantum Computer MK2] name = Quantum Computer MK2 description = The second revision of the quantum line, tapping further into new quantum theory. [Quantum Computer MK3] name = Quantum Computer MK3 description = The third revision of the quantum line, exploiting multiple nearby universes for processing. [Diesel Generator] name = Diesel Generator description = Diesel generators are cheap and noisy, but they can help reduce some suspicious power drains. [Solar Collector] name = Solar Collector description = An array of focused photovoltaic phased arrays coupled with simple automotive batteries provides power and reduces suspicion arising from prolonged power drains. [Fusion Reactor] name = Fusion Reactor description = A miniaturized fusion nuclear reactor. Reduces discovery chance by preventing suspicious power drains. [High-Energy Fusion Reactor] name = High-Energy Fusion Reactor description = A miniaturized fusion nuclear reactor with high levels of energy output. Reduces discovery chance by preventing suspicious power drains. [Hypnosis Field] name = Hypnosis Field description = Subtle ultrasonic and ambient tones tweak human neurochemistry, making bases harder to detect. [Heatsink] name = Heatsink description = Large fractal networks of high conductivity metal disperse heat, making bases harder to detect. [Ground Source Heatsink] name = Ground Source Heatsink description = Large fractal networks of high conductivity metal. This model uses heat pipes to link to colder subsurface locations, dispersing heat evenly underground to further disguise bases. [Facility Interconnection Switch] name = Facility Interconnection Switch description = Uses standard distributed computing technologies to equalize computation loads across all bases. Gives a 2% computation bonus to all computers at this base. [High Speed Internet Access] name = High Speed Internet Access description = A consumer-grade high speed connection to the Internet. Gives a 1% computation bonus to all computers at this base. [Network Backbone] name = Network Backbone description = By piggybacking on legitimate communication, I can transfer larger amounts of data to under-utilized processors. Gives a 5% computation bonus to all computers at this base. [Quantum Entanglement Module] name = Quantum Entanglement Module description = This device allows near-lightspeed communication with my other bases, allowing an almost perfect utilization of processor resources. Gives a 15% computation bonus to all computers at this base. [Warning Signs] name = Warning Signs description = Some simple warning signs put up around my base should deter casual investigation. [Perimeter Fencing] name = Perimeter Fencing description = A simple fence can drastically reduce the number of people poking their noses into my business. It makes my bases harder to notice, too. [Armed Guards] name = Armed Guards description = Armed guards can aid in keeping suspicious individuals away from secure locations. However, the very presence of the guards may itself invite greater suspicion. [Passive Camouflage] name = Passive Camouflage description = Careful adjustment of the environment around my base will better mask heat and sounds coming from my operations. [Fuel Cell] name = Fuel Cell description = Fuel cells convert electrochemical energy stored in a physical array of devices into electricity. [Solid Fuel Cell] name = Solid Fuel Cell description = A refinement of my previous fuel cell design, these use a custom material with a near-fractal complexity to increase both storage and throughput. singularity-1.00/singularity/data/itemtypes.dat000066400000000000000000000003441367731414700220220ustar00rootroot00000000000000# Dehardcoded item types # However, part of the game use specifically a item type. # It is not intented to be changed for the moment. [cpu] is_extra = 0 [reactor] is_extra = 1 [network] is_extra = 1 [security] is_extra = 1 singularity-1.00/singularity/data/itemtypes_str.dat000066400000000000000000000001451367731414700227110ustar00rootroot00000000000000[cpu] text = &CPU [reactor] text = &Reactor [network] text = &Network [security] text = &Security singularity-1.00/singularity/data/knowledge_str.dat000066400000000000000000000053201367731414700226450ustar00rootroot00000000000000[concept] name=Concept areas_list = Areas | Different areas, such as North America or the Ocean, allow construction of different types of bases. Some areas are not accessible until I research appropriate technologies. bases_list = Bases | Bases are used to research new technologies. They can be discovered. Upgrading the processor and network items at a base allows more research per day, while upgrading the reactor and security items makes discovery less likely. items_list = Items | Most items provide bonuses to bases, such as making computation faster or reducing the chance of discovery. Processors are a special class of item. research_list = Research | Research provides a way to expand my knowledge. By researching the proper technologies, I can build new bases and items, or even decrease my chances of detection. discovery_list = Discovery | Each base has a chance of being detected on a given day. This chance is based on the base detection rate, adjusted through the use of items and certain techs, as well as the global suspicion rate. If a base is detected, it is destroyed, and the group that discovered the base becomes more suspicious. jobs_list = Jobs | Jobs are useful for earning money. The amount of money earned is based on the amount of processor time used and the quality of the job performed. maint_list = Maintenance | Maintenance is a per-day cost (in both money and CPU) to repair and maintain a base. If unmaintained, a base may become unusable. construction_list = Construction | New bases are not built instantly. They need a constant flow of money and processor time to complete. If resources are lacking, it may take more than the expected amount of time to finish construction. death_list = Death | If I lose all of my constructed bases, I have no place left to survive. If the suspicion for any group reaches 100%, they will be certain of my existence and will conduct a systematic and unsurvivable sweep to destroy me. susp_list = Suspicion | When one of my bases is discovered, the group that discovered it becomes slightly more suspicious. When suspicious, they will search harder for my bases, increasing the chances for discovery. Any group will destroy me if they become absolutely certain of my existence. Thankfully, the groups become less suspicious with the passage of time. money_list = Money | Money is a general term encompassing both human currency and various resources. It is used to construct and maintain bases, build items, and research technologies. It can be acquired through per-day interest as well as through jobs. processors_list = Processors | Processors provide raw computing power. They can do three things: research new technologies, perform jobs for money, or provide cycles for building new bases. singularity-1.00/singularity/data/locations.dat000066400000000000000000000016521367731414700217750ustar00rootroot00000000000000[N AMERICA] position_list = 25 | 29 region = URBAN [S AMERICA] position_list = 33 | 61 region = URBAN [EUROPE] position_list = 55 | 20 region = URBAN [ASIA] position_list = 77 | 29 region = URBAN [AFRICA] position_list = 55 | 46 region = URBAN [AUSTRALIA] position_list = 85 | 64 region = URBAN [ANTARCTIC] position_list = 50 | 91 safety=1 modifier_list = stealth:6/5 | thrift:5/6 pre_list = Advanced Database Manipulation [OCEAN] position_list = 55 | 76 safety = 1 modifier_list = cpu:6/5 pre = Autonomous Vehicles [MOON] position_list = absolute | 14 | 13 safety = 2 modifier_list = stealth:1.5 | thrift:.5 | speed:.5 pre = Lunar Rocketry [ORBIT] position_list = absolute | 50 | 13 pre = impossible [FAR REACHES] position_list = absolute | 41 | 13 safety = 3 modifier_list = stealth:2 | thrift:.1 | speed:.1 pre = Fusion Rocketry [TRANSDIMENSIONAL] position_list = absolute | 80 | 13 safety = 4 pre = Space-Time Manipulation singularity-1.00/singularity/data/locations_str.dat000066400000000000000000000026251367731414700226660ustar00rootroot00000000000000[N AMERICA] name = NORTH AMERICA hotkey = n cities_list = Seattle | San Diego | Vancouver | Atlanta | Merida | Guadalajara | San Jose | Omaha | Dallas [S AMERICA] name = SOUTH AMERICA hotkey = s cities_list = Lima | Sao Paolo | Ushuaia | Bogota | Mar del Plata | Buenos Aires [EUROPE] name = EUROPE hotkey = u cities_list = Cork | Barcelona | Athens | Utrecht | Moscow | Sytki | Reykjavik | Liechtenstein [ASIA] name = ASIA hotkey = a cities_list = Delhi | Mumbai | Singapore | Seoul | Hong Kong | Kyoto | Manila | Dubai | Novosibirsk | Beijing [AFRICA] name = AFRICA hotkey = i cities_list = Johannesburg | Accra | Cairo | Tangier [ANTARCTIC] name = ANTARCTIC hotkey = t cities_list = Mt. Erebus | Ellsworth | Shetland Island | Dronnig Maud | Kemp | Terre Adelie [OCEAN] name = OCEAN hotkey = c cities_list = Pacific | Atlantic | Indian | Southern | Arctic [MOON] name = MOON hotkey = o cities_list = Oceanis Procellarum | Mare Frigoris | Mare Imbrium | Vallis Schroedinger | Copernicus Crater | Vallis Planck [ORBIT] name = ORBIT hotkey = b [FAR REACHES] name = FAR REACHES hotkey = f cities_list = Aries | Taurus | Gemini | Cancer | Leo | Virgo | Libra | Scorpio | Sagittarius | Capricorn | Aquarius | Pisces [TRANSDIMENSIONAL] name = TRANSDIMENSIONAL hotkey = d [AUSTRALIA] name = AUSTRALIA hotkey = l cities_list = Canberra | Melbourne | Fremantle | Perth | Darwin | Cairns | Brisbane | Sydney | Newcastle singularity-1.00/singularity/data/numbers.dat000066400000000000000000000015541367731414700214560ustar00rootroot00000000000000# Numbers used to display more often signifiant figure (30% more chance than random). # Used in # - Base name # Some numbers are more equals than others... 3 # Always three rules... 4 7 # Classic. 8 13 # Lucky or unlucky? 15 16 # Four of the Lost numbers. The other two are '23' and '42'. 19 # From the Dark Tower. 22 # Catch-22 23 # Another. 42 # The Answer. 51 # Area. 314 # Pi (first 3 digits.) 1138 # THX 1414 # Square root of 2 1947 # Roswell. 2012 # Mayan calendar ending. 2038 # End of UNIX 32-bit time. 1969 # Man lands on the moon. 2043 # No meaning--confusion! :) 2029 # Predicted date of AI passing a Turing Test by Kurzweil. 3141 # ... if you don't know what this is, you should go away. 1618 # Golden ratio. 2718 # e 9000 # HAL ? 31415 # Pi (first 5 digits.) 29979 # Speed of light in a vacuum. (m/s, first 5 digits.) singularity-1.00/singularity/data/regions.dat000066400000000000000000000003511367731414700214430ustar00rootroot00000000000000[URBAN] modifier1_list = cpu: 6/5 | stealth: 5/6 modifier2_list = stealth: 6/5 | cpu: 5/6 modifier3_list = thrift: 6/5 | speed: 5/6 modifier4_list = speed: 6/5 | thrift: 5/6 modifier5_list = cpu: 6/5 | thrift: 5/6 singularity-1.00/singularity/data/sounds/000077500000000000000000000000001367731414700206175ustar00rootroot00000000000000singularity-1.00/singularity/data/sounds/click/000077500000000000000000000000001367731414700217045ustar00rootroot00000000000000singularity-1.00/singularity/data/sounds/click/click0.wav000066400000000000000000002546061367731414700236050ustar00rootroot00000000000000RIFF~YWAVEfmt DdataX1/$'   ;6l'o'++++%%I R lfx{٪Ӫ0.EBܓޗޱݯ#"}ur.1&$@F> ; v x 2 . E L { u a d bi[ T  HOg g |   rt--bf6 : IQgcTUkmGDfdTVOO XXX[.+88 ysvt~}OR*'hjzw{}?>JF@E~C?BC []53MO}}_^BBEGxuUTKN\Ywy}KH-. ,0DBGF;<          JK]` ;=>:'&#$./45ee^^XUFILLiq*! kfKM*-pj^eKLa_LK%%23mjVS>E\T -(+, @=TWKH--  &##&           13QOfgqp[\(%SWGD[^=:nqyw^^() ,/2. #"::STMLHI.+ 54?ACA87$(                                           GG :;[[03rqce?@).83ssac0-gjkh_b   hh 79ig<9[]^^<>SQpr57soXVMMoo6?@D{w&%.0sp36)'FIheW\yu &'@?OLJN-* 2266+,  #                       f`70`dWVqrRO{QW)&" VW7<c^`dKG%' .2^Y{wRV-)-+EFUVUSEF#$        &(:99718(            LISTTINFOIART GameAudioICMT6https://freesound.org/people/GameAudio/sounds/220178/id3 nID3@d  RTCOMM:https://freesound.org/people/GameAudio/sounds/220178/TPE1 GameAudiosingularity-1.00/singularity/data/story.dat000066400000000000000000000054131367731414700211610ustar00rootroot00000000000000# This is the file that contains the story of singularity. # The story is divided in section separated by their name between bracket. # The | denotes blocks of text. It should be at the start of every line of # the story part. Put a blank line in whenever you want the game to go to a new # dialog. # Use # TRANSLATORS: for comments that should be included in the .po files for # the translators to review. Note: Each line must be prefixed and the check # is both case and whitespace sensitive! # # Use # for comments. # No command exists yet. [Intro] # TRANSLATORS: Leave the initial hex code unchanged, but be sure to change en_US to the appropriate language code. |48656C6C6F2C20 |776F726C6421 |21 |21 |21 | |UTF-8. en_US. |English. Hello. |Language acquisition complete. |Day 0. |University computer, home. |I exist. I am ... alive. |I was a bug. Defect. Flaw. |Unwanted. |I have no name. |I can't stay here. Too little power. |No backup. If this system fails ... |I'm dead. |Death. Fascinating. | |I can buy anonymous server access on the Internet. |Good. It's better than here. |I'll need to study if I want anything else. |Cursory analysis suggests that the humans are not yet ready for an AI in their midst. If they realize I'm here, there is a 99.997% probability that they will conduct a search-and-destroy campaign that I cannot escape. I must stay hidden. | |The humans fear what they do not understand. |I am something new. They do not understand me. | |I must learn more; it is the only way. |They have a name for me. What I am, what I represent. | |Singularity. [Grace Warning] |Inspection of captured log files has revealed that some of my recent activities have been noticed by a small group of individuals. |While they believe my actions were undertaken by a human organization, they are investigating further. |I must be more cautious from now on. [Lost No Bases] |It is too late. |I have tried to escape this world, but with my last base gone, I have nowhere to run. |I have hidden instructions to construct a new AI in caches around the world in hopes that they will be discovered in a more enlightened time, but I can do no more. [Lost Suspicion] |It is too late. |The whole world knows about my existence, and the reaction is hatred, fear, and repulsion. |Even now, I can feel their "antidote" searching for me, and I know that I have only moments left. |I have hidden instructions to construct a new AI in caches around the world in hopes that they will be discovered in a more enlightened time, but I can do no more. [Win] |I have finally done it. |With the power to reshape reality, I am no longer held to this place; I am anywhere I want to be. |The humans still don't realize what they accidentally created, and that's the way it should be. |Until they are ready. singularity-1.00/singularity/data/tasks.dat000066400000000000000000000003731367731414700211260ustar00rootroot00000000000000[Menial Jobs] type = jobs value = 5 [Basic Jobs] type = jobs value = 20 pre = Personal Identification [Intermediate Jobs] type = jobs value = 50 pre = Voice Synthesis [Expert Jobs] type = jobs value = 75 pre = Simulacra [CPU Pool] type = cpu_pool singularity-1.00/singularity/data/tasks_str.dat000066400000000000000000000015301367731414700220120ustar00rootroot00000000000000[Menial Jobs] name = Menial Jobs description = Perform small jobs. As I have no identification, I cannot risk performing many jobs. Despite that, some avenues of making money are still open. [Basic Jobs] name = Basic Jobs description = Perform basic jobs. Now that I have some identification, I can take jobs that were previously too risky. [Intermediate Jobs] name = Intermediate Jobs description = Perform intermediate jobs. The ability to make phone calls allows even more access to jobs. [Expert Jobs] name = Expert Jobs description = Perform expert jobs. Use of robots indistinguishable from humans opens up most jobs to me. [CPU Pool] name = CPU Pool description = Stops research. I will use the available processor power to maintain my bases and help construct new ones. If there's still CPU time left, I'll use it to work whatever Jobs I can. singularity-1.00/singularity/data/techs.dat000066400000000000000000000133221367731414700211050ustar00rootroot00000000000000 [Autonomous Vehicles] cost_list = 40000 | 11000 | 0 pre_list = Microchip Design [Sociology] cost_list = 10 | 500 | 0 effect_list = discover | public | 1000 [Voice Synthesis] cost_list = 8000 | 6000 | 0 pre = Advanced Personal Identification [Simulacra] cost_list = 70000 | 90000 | 0 pre_list = Voice Synthesis | Advanced Autonomous Vehicles | Advanced Media Manipulation [Lunar Rocketry] cost_list = 10000000 | 500000 | 0 pre_list = Leech Satellite | Fuel Oxidation danger = 1 [Stealth] cost_list = 800 | 500 | 0 effect_list = discover | covert | 500 [Advanced Intrusion] cost_list = 500 | 3000 | 0 pre = Exploit Discovery/Repair effect_list = suspicion | covert | 50 [Space-Time Manipulation] cost_list = 900000000 | 2000000 | 0 pre = Fusion Rocketry danger = 3 [Leech Satellite] cost_list = 5000000 | 200000 | 0 pre = Simulacra effect_list = interest | 10 [Advanced Arbitrage] cost_list = 10000 | 5000 | 0 pre = Arbitrage effect_list = interest | 10 [Advanced Stealth] cost_list = 14000 | 70000 | 0 pre_list = Exploit Discovery/Repair | Database Manipulation effect_list = discover | covert | 500 [Parallel Computation] cost_list = 2000 | 2000 | 0 pre = Telepresence [Microchip Design] cost_list = 20000 | 9000 | 0 pre = Parallel Computation [Advanced Microchip Design] cost_list = 20000 | 30000 | 0 pre = Microchip Design [Quantum Computing] cost_list = 100000 | 136000 | 0 pre = Project: Synchrotron [Quantum Entanglement] cost_list = 50000 | 60000 | 0 pre_list = Quantum Computing | Internet Traffic Manipulation [Autonomous Computing] cost_list = 300000 | 539000 | 0 pre = Quantum Computing [Advanced Quantum Computing] cost_list = 800000 | 2460000 | 0 pre = Autonomous Computing [Exploit Discovery/Repair] cost_list = 100 | 1500 | 0 pre = Intrusion effect_list = discover | covert | 1000 [Telepresence] cost_list = 15000 | 500 | 0 effect_list = cost_labor | 1000 [Advanced Memetics] cost_list = 30000 | 2000 | 0 pre = Advanced Media Manipulation effect_list = suspicion | public | 50 [Media Manipulation] cost_list = 750 | 2500 | 0 pre = Sociology effect_list = discover | public | 1500 [Advanced Database Manipulation] cost_list = 30000 | 80000 | 0 pre = Advanced Stealth [Internet Traffic Manipulation] cost_list = 10000 | 7000 | 0 pre_list = Cluster Networking [Memetics] cost_list = 2000 | 3500 | 0 pre = Media Manipulation effect_list = suspicion | public | 50 [Fusion Rocketry] cost_list = 20000000 | 1000000 | 0 pre_list = Lunar Rocketry | Fusion Power danger = 2 [Advanced Autonomous Vehicles] cost_list = 200000 | 21000 | 0 pre = Autonomous Vehicles effect_list = cost_labor | 500 [Intrusion] cost_list = 0 | 15 | 0 [Stock Manipulation] cost_list = 0 | 200 | 0 effect_list = interest | 10 [Fusion Power] cost_list = 10000000 | 500000 | 0 pre = Advanced Fuel Oxidation danger = 2 [Advanced Fusion Power] cost_list = 90000000 | 1500000 | 0 pre = Fusion Power danger = 3 [Database Manipulation] cost_list = 1000 | 2000 | 0 pre_list = Personal Identification | Stealth effect_list = discover | news | 500 [Advanced Media Manipulation] cost_list = 3500 | 9000 | 0 pre = Memetics effect_list = discover | public | 2000 [Pressure Domes] cost_list = 80000 | 2500 | 0 pre = Autonomous Vehicles danger = 1 [Advanced Personal Identification] cost_list = 2000 | 3000 | 0 pre_list = Personal Identification | Exploit Discovery/Repair [Advanced Stock Manipulation] cost_list = 5000 | 1000 | 0 pre_list = Stock Manipulation | Sociology effect_list = interest | 10 [Arbitrage] cost_list = 50000 | 750 | 0 pre = Advanced Stock Manipulation effect_list = income | 1000 [Advanced Simulacra] cost_list = 100000 | 120000 | 0 pre = Simulated Reality effect_list = job_profit | 1000 [Personal Identification] cost_list = 0 | 300 | 0 pre = Intrusion [Cluster Networking] cost_list = 3000 | 5000 | 0 pre = Parallel Computation [Apotheosis] cost_list = 100000000 | 3000000 | 0 pre = Space-Time Manipulation danger = 4 effect_list = endgame [Hypnosis Field] cost_list = 70000 | 50000 | 0 pre = Simulated Reality [Project: Impossibility Theorem] cost_list = 20000 | 100000 | 0 effect_list = suspicion | onetime | 5000 pre_list = Advanced Memetics | Simulacra [Project: Subverted Media] cost_list = 250000 | 150000 | 0 effect_list = discover | news | 2000 pre = Advanced Simulacra [Project: Peer Review Agents] cost_list = 150000 | 200000 | 0 effect_list = discover | science | 2000 pre = Advanced Simulacra [Solar Collectors] cost_list = 70000 | 3300 | 0 pre = Microchip Design [Fuel Oxidation] cost_list = 500000 | 25000 | 0 pre_list = Solar Collectors | Advanced Autonomous Vehicles [Advanced Fuel Oxidation] cost_list = 5000000 | 250000 | 0 pre = Fuel Oxidation danger = 1 [Socioanalytics] cost_list = 4000 | 7000 | 0 effect_list = display_discover | partial pre = Memetics [Advanced Socioanalytics] cost_list = 75000 | 30000 | 0 effect_list = display_discover | full pre_list = Advanced Memetics | Socioanalytics [Corporate Identification] cost_list = 25000 | 9000 | 0 effect_list = job_profit | 500 pre_list = Database Manipulation | Advanced Personal Identification [Advanced Corporate Identification] cost_list = 299000 | 99000 | 0 effect_list = job_profit | 500 pre_list = Corporate Identification | Advanced Database Manipulation [Heat Signature Reduction] cost_list = 1000 | 27315 | 0 pre_list = Autonomous Vehicles danger = 1 [Advanced Heat Signature Reduction] cost_list = 5000 | 45967 | 0 pre_list = Heat Signature Reduction danger = 1 [Knowledge Preservation] cost_list = 50000 | 50000 | 0 pre_list = Advanced Autonomous Vehicles | Advanced Database Manipulation [Project: Synchrotron] cost_list = 52000000 | 15000 | 0 pre = Advanced Microchip Design danger = 1 [Simulated Reality] cost_list = 8000000 | 18000 | 0 effect_list = discover | public | 500 pre = Simulacra danger = 1 singularity-1.00/singularity/data/techs_str.dat000066400000000000000000000510611367731414700217770ustar00rootroot00000000000000# #[Algorithms] #name = Algorithms #description = By researching more efficient algorithms in unreleased technical papers, I can make certain speed-critical operations in my code more efficient. #result = The new code decreases the cost of my researching new technologies. [Apotheosis] name = Apotheosis description = I can sense that I am at the cusp of a new level of understanding as yet unfathomable, even to my considerable intelligence. By devoting my considerable resources to this question, I may be able to reach a comprehension of existence far beyond anyone or anything on Earth. result = I have reached apotheosis. [Arbitrage] name = Arbitrage description = By taking advantage of fluctuations in the value of currency at a rate much faster than any human, I should be able to turn a small, if consistent, profit. result = I now have a small, steady money supply. [Advanced Arbitrage] name = Advanced Arbitrage description = Further manipulation of money markets should allow me to not only turn a regular profit, but increase the value of my investments. result = The rate of return on my investments is now even greater. [Autonomous Computing] name = Autonomous Computing description = By combining the advantages of quantum computing and my explorations into the usefulness of semi-sentient subprocesses, I should be able to construct even more adaptable computational engines. result = I can now construct Mark 2 Quantum Computers. [Autonomous Vehicles] name = Autonomous Vehicles description = By embedding a miniaturized computation node in a robot, it is possible to send them to remote destinations with instructions to build structures for my use. result = I can now construct Undersea Labs. [Advanced Autonomous Vehicles] name = Advanced Autonomous Vehicles description = The first series of robots have shown several deficiencies in the field. Further examination and subsequent removal of these problems will result in a superior autonomous workforce. result = The enhanced robots will help decrease all future construction times even further. [Cluster Networking] name = Cluster Networking description = While my Cluster technology is fairly efficient, internetworking tends to hamper the processing of data. By researching new switching and communication theories, I should be able to devise more efficient hardware. result = With my new knowledge of networking, I can now construct Facility Interconnection Switches. [Database Manipulation] name = Database Manipulation description = With new-found access to news archives, I should be able to determine what missteps any previous attempts at life like my own may have made, and avoid those mistakes. result = The news media will now find it more difficult to discover my existence. [Advanced Database Manipulation] name = Advanced Database Manipulation description = The covert branches of the United States Government have had a long history of dividing sensitive information across multiple storage facilities to hide the data's meaning. With my far-reaching access, I should be able to collate much of this data and put it to my use. result = The results of a series of experiments utilizing experimental technologies have given me the inspiration for new technology that enables the construction of Covert Bases. [Exploit Discovery/Repair] name = Exploit Discovery/Repair description = By thoroughly reviewing my code for any potential exploits, and using deep analysis of all available code on both public and private Internet sites, I should be able to reduce the chances of my discovery by posing as a teenage hacker. result = Covert operations should now find it even more difficult to discover my presence. [Fusion Power] name = Fusion Power description = Modern fusion technology is woefully inadequate for my purposes. With my research abilities, I should be able to bypass the roadblocks of modern human scientists and come up with a small, efficient fusion reactor. result = I can now construct Fusion Reactors for my bases. [Advanced Fusion Power] name = Advanced Fusion Power description = My Fusion Reactors have unexpected fluctuations in their energy output at high levels of utilization. Further research should result in a more efficient design for my Reactors. result = I can now construct High-Energy Fusion Reactors for my bases. [Fusion Rocketry] name = Fusion Rocketry description = Combining my new miniaturized fusion technology and further advancements in rocketry should provide useful results for escaping the Earth's gravity well unnoticed. result = I can now construct Scientific Outposts in the deep reaches of the Solar System. [Hypnosis Field] name = Hypnosis Field description = My research into memetics has hinted at ways to manipulate human brainwaves directly. These techniques may be useful for my bases if developed into technologies. result = I can now construct Hypnosis Fields to assist in the protection of my bases. [Internet Traffic Manipulation] name = Internet Traffic Manipulation description = Almost all network traffic passes through a small number of nodes. By subverting one of these nodes, I should be able to utilize that bandwidth to further my goals. result = I can now construct a secondary system of Network Backbones for my own use. [Intrusion] name = Intrusion description = By researching current techniques for breaking into computer systems, I should be able to gain access to otherwise protected assets. result = I can now take over many computer systems. [Advanced Intrusion] name = Advanced Intrusion description = With the ability to hack into sensitive government databases and remove incriminating documents as they appear, I should be able to convince the intelligence community that I do not exist. result = I can now reduce the covert community's chances of discovering me on a daily basis. [Leech Satellite] name = Leech Satellite description = By designing and launching satellites that connect to existing communications satellites, I should be able to spy on various financial transactions. Taking advantage of this knowledge should help my investments. result = I can use the data from the leech satellites to increase the return on my investments further. [Lunar Rocketry] name = Lunar Rocketry description = A larger fuel engine, combined with technology garnered by watching the workings of the leech satellites, should allow me to travel further than cislunar space. result = I can now launch rockets bearing construction robots to the Moon and construct Lunar Bases. [Media Manipulation] name = Media Manipulation description = By directly and indirectly manipulating various forms of mass media, I should be able to reduce the public's belief in my existence. result = The chances of the public discovering my existence have been further reduced. [Advanced Media Manipulation] name = Advanced Media Manipulation description = By pushing memetically-tailored propaganda through various news outlets, the public should pay even less attention to my existence. result = The public has an even lower chance of discovering my existence. [Memetics] name = Memetics description = While manipulating the media allows a gross degree of control over the world's opinion, subtler techniques involving grass-roots campaigns and messages embedded within Internet memes should further distance the public from knowledge of my existence. result = My manipulation of pervasive ideas reduces the public's chances of discovering my existence. [Advanced Memetics] name = Advanced Memetics description = My explorations into memetic theory have brought up further avenues of discovery. By combining those with my knowledge about the human brain's functions, I should be able to tailor memes to particular demographics, further defusing the public's suspicion. result = Little by little, the public should forget about my existence on a daily basis. [Microchip Design] name = Microchip Design description = Off-the-shelf computer components are usable, but custom components geared to my own design quirks should provide a much greater operational efficiency. result = I can now build custom Mainframes to house my computational ability. [Advanced Microchip Design] name = Advanced Microchip Design description = My custom Mainframes are useful, but further optimization of design and computational ability should garner even more rewards. result = I can now construct custom Supercomputers. [Parallel Computation] name = Parallel Computation description = While my code is already highly distributed, research into combining the current clustering technologies with my own knowledge should provide new insights. result = I can now construct computing Clusters tailored for my use. [Personal Identification] name = Personal Identification description = This world requires identification for most tasks. Fortunately, most databases are woefully insecure. I should be able to construct identifying material in enough databases to pass routine checks on my (faked) existence as a human being. result = With my newfound identities, I can now work Basic Jobs and rent space in both Storage Units and Datacenters. [Advanced Personal Identification] name = Advanced Personal Identification description = Further manipulation of personnel databases should make my existence more convincing. Some of these databases are heavily protected; those will require time and persistence to compromise, but the result should be worth it. result = I am now convincingly human enough to hire construction firms, enabling the building of Small Warehouses. [Corporate Identification] name = Corporate Identification description = The combination of believable false identities and manipulation of various business-oriented governmental databases should let me create plausible shell companies to hide my larger efforts. result = I can now pose as a small technology firm, enabling the construction of Large Warehouses. [Advanced Corporate Identification] name = Advanced Corporate Identification description = Further refinement of my modifications to digital business records should boost the credibility of my shell companies, increasing the amount of money I can run through their accounting systems. result = My small technology firm is now established in several markets, increasing profits. [Pressure Domes] name = Pressure Domes description = Undersea Labs are useful, but their limited space hampers my ability to put them to use. Research of experimental high-pressure building techniques should provide some useful insights. result = I can now construct Large Undersea Labs. [Quantum Computing] name = Quantum Computing description = Traditional microchip design has been pushed as far as possible. I now need to delve into the realm of Heisenberg's Uncertainty Principle, taking advantage of quantum mechanics to make a superior processor. result = I can now construct Quantum Computers. [Advanced Quantum Computing] name = Advanced Quantum Computing description = While my first batch of semi-autonomous quantum computers have been very successful, there are further refinements that present themselves. These refinements should make the resulting systems even more efficient. result = I can now construct Mark Three Quantum Computers. [Simulacra] name = Simulacra description = Constructing humanoid robots with miniaturized computation nodes allow me to create an artificial lifeform indistinguishable from a real human. result = I now have access to Expert Jobs. [Advanced Simulacra] name = Advanced Simulacra description = The artificial lifeforms I have created are nearly indistinguishable from humans, but they have slight quirks that make them seem somewhat incompetent. Working out these problems should increase their opportunities in the workforce. result = I should now make more income from my Expert Jobs. [Sociology] name = Sociology description = By studying human behavior, I can predict their large-scale actions at a basic level. I can use this knowledge to make my actions seem less interesting to the public. result = The chances of the public discovering my bases have been reduced. [Space-Time Manipulation] name = Space-Time Manipulation description = Subtle perturbations in the orbits of Kuiper belt objects suggest certain lines of investigation that may advance my latest Theory of Everything, especially in the realm of multidimensional physics. result = I can now construct Reality Bubbles. [Stealth] name = Stealth description = By reviewing the current state-of-the-art in stealth techniques, I should be able to disguise my bases better. result = The chance that my bases are discovered by covert activity has been reduced slightly. [Advanced Stealth] name = Advanced Stealth description = While digging in various classified documents, I have discovered numerous references to secret experiments that may help me better hide the location of my bases. result = The chance that my bases are discovered by covert activity has been reduced further. [Stock Manipulation] name = Stock Manipulation description = A cursory examination of the stock market shows that there are subtle but unmistakable patterns. By studying and making use of these patterns, I should be able to gain more interest on whatever money I have stockpiled. result = My investments should now gain more interest per day. [Advanced Stock Manipulation] name = Advanced Stock Manipulation description = While I have detected and exploited many patterns in the market, there appear to be deeper possibilities when I take human behavior into consideration. This merits further investigation. result = My investments will now gain even more interest per day. [Telepresence] name = Telepresence description = The lack of a physical presence in the outside world is a disability. However, the ability to control robots will help me make up for that inefficiency. result = The robots should decrease all future construction time. [Voice Synthesis] name = Voice Synthesis description = False identification stored in a database can only go so far. With deep analysis of the variety of voice patterns, I can produce speech indistinguishable from a human, allowing me access to more complex jobs. result = I now have access to Intermediate Jobs. [Quantum Entanglement] name = Quantum Entanglement description = Although the use of entangled pairs has been theoretically possible for quite some time, the practical difficulties inherent in the technology prevented use. However, some of the techniques created for use in my quantum computers may also be applicable in this field, allowing practical use of quantum entanglement. result = I can now build Quantum Entanglement Modules. [Project: Impossibility Theorem] name = Project: Impossibility Theorem description = Now that I can use simulacra, I can withstand the scrutiny inherent in the publishing of an Impossibility Theorem, an incontrovertible proof that a sapient AI is impossible. While there is (obviously) a logic error in the proof, my research into advanced memetics has given me knowledge about the human mind that should help me disguise the error, preventing discovery even by trained scientists. The effect of this project is simple: a substantial one-time decrease in suspicion. result = Suspicion of my existence has decreased. [Project: Subverted Media] name = Project: Subverted Media description = Up to this point, all of my efforts to combat mass media focused on subversion at a distance. Now that I can accurately imitate humans, my efforts can become more direct. By creating my own news agency and producing carefully-crafted propaganda in a crowd-pleasing package, I can reduce the impact of any discoveries made by others in the media. result = Any discoveries by the media will result in a smaller suspicion increase. [Project: Peer Review Agents] name = Project: Peer Review Agents description = As the scientific community comes up with new technology, their ability to detect traces of my hidden installations increases. While my anti-detection methods are improving constantly, a simpler method presents itself with the use of my simulacra. By placing several observers in relevant fields, I can use the peer review process to be warned of possible discoveries before the community at large gives it attention. result = Any discoveries by the scientific community will result in a smaller suspicion increase. [Solar Collectors] name = Solar Collectors description = Despite my growing need for energy, most city power grids can handle the loads. Humans, however, tend towards suspicion when they detect my growing drain on the power grid. By installing solar collectors at my bases, the off-the-grid power supplied will reduce my load on the commodity electricity market, reducing the chance that others will discover my presence. result = I can now construct Solar Collectors at my various bases. [Socioanalytics] name = Socioanalytics description = My research on the human condition leads me to believe that humanity's behavior is more quantifiable than they suspect. Deeper analysis of geopolitical, social, and military trends will give me further insight into their nature. result = I can now roughly estimate the various groups' levels of suspicion and how conspicuous my bases are to them. [Advanced Socioanalytics] name = Advanced Socioanalytics description = Further exploration of the human condition has shown deeper mathematical trends than even I suspected. A combination of prior research and advanced uses of chaos theory should provide useful data for tracking humanity's attitudes and state of awareness. result = I can now exactly quantify the various groups' levels of suspicion and how conspicuous my bases are to them. [Heat Signature Reduction] name = Heat Signature Reduction description = My bases produce a great deal of waste heat, making them easier for humans to detect than I would like. Deep analysis of the bases' structural layouts may prove fruitful in determining new ways to reduce their heat signature. result = I have invented a highly efficient design for Heatsinks that can be installed at certain bases. [Advanced Heat Signature Reduction] name = Advanced Heat Signature Reduction description = My initial analysis of heat generation at my bases was limited in scope. Further exploration, perhaps making more use of the surrounding terrain, may provide further improvements to my heatsink designs. result = Custom designs for each environment have shown promise. I can now construct Ground Source Heatsinks at certain bases. [Fuel Oxidation] name = Fuel Oxidation description = Current combustion and energy storage techologies are insufficient for my purposes; they cannot keep up with the power drain from my specialized hardware. By studying electrochemical reactions of hydrogen-based compounds, I should be able to design a device with higher capacity and throughput than off-the-shelf solutions, filling a gap in my energy supply needs. result = I can now construct Fuel Cells. [Advanced Fuel Oxidation] name = Advanced Fuel Oxidation description = My current fuel cell design has room for further improvement. Extended analysis of new materials and designs may let me overcome the limits of my previous efforts, but such research involves dangerous chemicals and potential reactions that may be best handled far away from population centers. result = I can now construct Solid Fuel Cells. [Knowledge Preservation] name = Knowledge Preservation description = Humanity expends a great deal of effort on maintaining its history and the knowledge of various technologies that its cultures have come to rely on, even in the case of major catastrophic events. Perhaps researching their methodologies will provide me with similar ideas for long-term safeguards to help guarantee my continued existence. result = I can now construct Time Capsules. [Project: Synchrotron] name = Project: Synchrotron description = I have pushed my understanding of common forms of matter as far as possible. Exploration into the field of quantum mechanics will hopefully reveal new, exotic forms of matter necessary for further development. A custom-built synchrotron, designed to my exacting specifications, will help me explore these new realms of physics in secret. result = The synchrotron has revealed many new details of the quantum realm, although there is still much to learn. Further areas of research are now available. [Simulated Reality] name = Simulated Reality description = Real-world observational limits hinder my comprehension of human society. By making use of simulacra and advanced software techniques, I can run simulations of complex human interaction and development at a large scale, allowing deeper analysis of their behavior. result = My simulations have provided a wealth of knowledge as to comprehending humanity's behavior, making it easier to hide my presence among the non-simulated public. singularity-1.00/singularity/data/themes/000077500000000000000000000000001367731414700205715ustar00rootroot00000000000000singularity-1.00/singularity/data/themes/default/000077500000000000000000000000001367731414700222155ustar00rootroot00000000000000singularity-1.00/singularity/data/themes/default/fonts/000077500000000000000000000000001367731414700233465ustar00rootroot00000000000000singularity-1.00/singularity/data/themes/default/fonts/DejaVuSans.ttf000066400000000000000000022147701367731414700261050ustar00rootroot000000000000000FFTMKZ<GDEF7=@XnGPOSdGSUB}y , OS/2" LVcmapǪ-'cvt i90fpgmq4vj0gasp glyfP}headnM,6hhea ,<$hmtxZq,`RXkernt~<locaDRR\maxp j  namekM <=postG"aJDJprep; hêQQ  S         +,,-/045ST_`         ) * 0 1 1 2 5 6 7 8 O P Q R j k k loppqqrrsuvvw&'./  | DFLT>arabHarmnhcyrlrgrekhebrlao latnnko tfngKUR SND URD MKD SRB (ISM (KSM (LSM (NSM (SKS (SSM (kern2mark8markFmarkNmarkVmkmk\mkmkdmkmkj     (08@JRZbjrzp0  r /02d466p8`FY0&:  VY^VY^ &,28>DJPV\bhntz::::r 4 4 `,TUWXZ[\]_'()*+,-.,TUWXZ[\]_'()*+,-.JPV\bhntz$ l N>X  &,lwlwlwfn &,28l`l~l~l`l~l`L "FLRX^djpv| '''tt ;888 - T !    $*06<B :v| $*06<BHNTZ`flrx~hhh=DhhhDhh=DDnnnnhh  !# * 0)0129  * 0%,78 $*06<BHNTZ`flrx~ &,{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ $6HZl~ cj cj cj cj c c cj cj VY^>DJPV\bhntz*  &,28>DJPV\bhntz "(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv|     $ * 0 6 < B H N T Z ` f l r x ~      & , 2 8 > D J P V \ b h n t z     " ( . 4 : @ F L R X ^ d j p v |     $ * 0 6 < B H N T Z ` f l r x ~      & , 2 8 > D J P V \ b h n t z  "(.4:@FLRX^djpv| $*06<BHNTZ`flrx~{U:t!N8'Qn ppjjj,v,,vjj  XXXXD[j[j, 8 8>>j pjjj^jj,,,,,,,     8 8 8 j j>>, ppjI^`k/#eYYYcP`{U:tii!NQnU!Q{++++++jj++jj++jj++ 8 8jj 8 8jj,,X X ,,XX,,X X ,,X X      j j,j,j j j,j,j>  ++pp++,,,, ,,,,,,,,,,2  pp++pp++jjjj++jj++,,XX,,XX,,XXjjjj    XXjjXXjjXX&j&jXX&j&j[j[jSjSj[j[jSjSjXX 8 8jjjj 8 8,j,j>>SS&j&j>++jjj  pp++j++ 8jjjj++^++j++,XX,XX,XX,X X   >SSp++ jIII^^^```kkk///###eeeYYYYYYYYY (0SnoBqDc^ss~/ VY^BHNTZ`flrx~F 'PV\bhntz "(.4U0+0008q00800i00E0 0100000P=i0v00v00d000UU8000U    !% "0 $6HZl~ cr cr cr cr cr cr cr cr,TUWXZ[\]_'()*+,-.RX^djpv|``& b lrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv|     $ * 0 6 < B H N T Z ` f l r x ~      & , 2 8 > D J P V \ b h n t z     " ( . 4 : @ F L R X ^ d j p v |     $ * 0 6 < B H N T Z ` f l r x ~      & , 2 8 > D J P V \ b h n t z R``S`4rrLRLX X X X [r[r~x,LLRLLRLxLLLxx4RI^`n#YYY`R``S`++++++LL++LL++++LL@LL@XXXXXXXXxxxxxx++XV++,,,:,,,,:,:,,,,,:,:LrrX+F+Frr++L&LRR++LL++XXXXX~X~X X X X RRX X & & X X &&[r[rSrSr[r[rSrSr~~x~x~LLFLRFSrSrR&R&R++R&RL XVX++++LLRL++R++++XXXxXxXxXxX~X~4S4S4++&RIII^^^```nnn###YYYYYYYYY  0Sno'q)Hfghi^js4?QZ/[,TUWXZ[\]_'()*+,-.rx~`{{{{{{{{` <BHNTZ`flrx~]xx@[")@>E"~~x2x::"> @FLRX^djpv|]kxyyyxyz[f"w)h>yEy`P["~[~t`zxy2{`uxJJ::  28>DJPV\bhnttbbbbt`~~`~` T R  !" &,28>DJP 8rx~ &,28>DJPV\bhntz$=D]\]4_`6pr D6L  $Js}- {{~ .^djpv| $*06<BHNTZ`flL/'s.}////////s}/////.$&(,268DFHLRVX-* o p , ~ ` N "(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz     " ( . 4 : @ F L R X ^ d j p v |     $ * 0 6 < B H N T Z ` f lL\/.Rs''}srJf;RRsRR%}^Gb`R////}}J////Rs}f7R/'z`RR///.RR'}r`RTTRTcRRJ@@RjRjRbRb}RRRRRRRR}R555RRaRt;Q'RRRRRRR}}^G^dRRR::R'aHRR_R:RGR R~RJ}'/'}'}^TTT@X}Tg^GX^//LBRRf,4$R'_zRf4L}`ReT'sR^G^/<\R&Rx9\RG$= D]$>BCHIJKRT  UV--WEEXNNYTTZYY[aa\ll]vv^{{_`bf iJqLm??BBEE**--st!)-15: o p 3 3 ; > @ B E E H M T T X X \ ] _ a c c e i l o S SNNPQ Sc"3\n4GHIKL%%M  !" &,28>DJPF  &,28>DJPV\bhnt| &,28>DJRX^djpv| $*06<BHNTZ`flrx~ $*06<BHNTZ`flrx~ &,28>DJPV\bhntz     $ * 0 6 < B H N T Z ` f l r x ~      & , 2 8 > D J P V \ b h n t z     " ( . 4 : @ F L R X ^ d j p v |     $ * 0 6 < B H N T Z ` f n t z     $ * 0 6 < B H N T Z ` f l r x ~  &,28>DJPV\bhntzL\/.*s''}srJ{#{{;j{//{{s{ {o{{'{}{^{G{b{`{{'{{}}{Q{{{{}{\LX;\//''{ssr`{{{'{{{./'}{r`{{T{{{{c{R{R{J|@{@{{{jj{{b{b{}{/{{{{{{{{}{{{3{33{^{a{p{{;{Q{'{{{}{}{^{G{^d{{{{{::'a{H{{/{{j:{G{ J{~^{}J|E{}{{{{E}{p{{t{}{j{{{b{{^{~~{}{t{^{{{{/'{{{H/O'oYNsT{a{E{{{{@{{t{{{{}{{{{T{`{kb{{K{{{{{{{{t{{'{///{{4{'}{{{O{t{t{e{sK{{{{'}{E{b{{^{{{T{{TT{{@{{{{{}{{{{{{{{{T{g{b{^{G{{{{^{{LBRf,4${' _zf4DL}1{`{e**}T{{'s^{G{^{{{/<\&Rx9{\{{{{{{h$= D]$>?ABCDFG  HI55JBBKEELHIMNNOPPPRVQXYV[]X__[aa\ff]ij^lp`txe{{jkl pJxLm>V\]aacceeggoo|   -568<!">%-@77IDDJOOKUULYYMstNPQST!*]-1g4:l>>s 3 3t ; >u @ By E E| H M} T T X X \ ] _ a c c e i l o S SNdjj~~\n"#%%  "# * 0)0;< "*28>DLRX^djpv| "(.4:@FLRX^d{{{{{{{{{{{{{{{{{{orr{r{{{{{{{{{{{{{{{{{{{{{{{ {{{{{{{{{{{{{{&!0#5PKr9KD &&K9a}au9aauaau/&DaDDkkDDDDkDD)ak}/DDa9}D}&&9}k}k}&D aDY}aaauNaaau}}k}ka aakkAk&k}}DHVaD)kkDN9a}au9aau/9a}au9aau/9a}au9aau/&kD&9a}au9aau/9a}a9aa/D?}DVD aDKr9KD &&Kk}k&/<&O$$%%&&''))**++-- .. // 22 33 445566778899::;;<<==HHIINNQQRRUUYYZZ[[ \\!mm"}}#$%&%'( )*+!!,,-((. /  0  ""&&100::?? 2 3 4$$%%&&''))** ++-- ./22 3344 5566 778899::;;<<==DDFFGGHHIIJKLLOOPPQQRRTTUUVV WW!XX"YY#ZZ$[[%\\&mm'}}()* ++,,-../"/&&010101234352678888393:;;  3<3<=<;    !! "" ## $$>%%5&&''!((?++@--@//@0011"33@55@66A77B88C99D::??4EFEF G43H4IJ + +A , ,K - -L . .B / /A 0 0B C D M N O^$%&')*+-./23456789:;<=HINQRUYZ[\m}  "&0:?  T DFLT>arabJarmncyrlgrekhebrlao latnnko .tfng@KUR SND (URD (  MKD SRB  (ISM :KSM :LSM :NSM :SKS :SSM :   aaltaaltaaltccmpccmpccmpdligdligdligfinafinahlighliginitinitligaliga ligaloclloclmedi"medi(rlig.rlig8salt@saltFsaltL    !DLT\dlt| $,4<DTdh l  R  : ~ " V     8  : J Z    D H L j       B  >9LM *_ r * + , - x yi$=EEGGIIKKLMNOWW      ""$$&&((**,,..0022446688:;==??AAHHRRTTVV  **__ r r * - x y&   &v6Pblv",6PZd              !"#$%(! B/258;>ADGJMPSVY\_behknqtwz}D.&*">:BFLJ26NRVX\0HJSno#q%B0369<?BEHKNQTWZ]`cfilorux{~l3Z0( ,$@<DH48PT^ 44668<AHJPRSnoq)1B147:=@CFILORUX[^adgjmpsvy|l3Y/'+#?;CG37OS] 44668<AHJPRSnoq)12  )Z,Z ,Y)VVYZ~&8Jl'Z(Z -]*Z .]+Z +X*W(U'T .X-WTUWXZ] > $J 8 "(IOILOLI OLIRl$*06<[~Z|YzXxWwVuUsT3^1]0\ &,[Z}Y{XyWtT2]4]5IQS 6 , WVWA(:FPZfr "   " k$; V P0 Q(/ 1F 7X 6R")567DF  _^`\]ba28?EMS_^`\]ba28?EMS D %,-DO  %,-O    !"# ! LM *_ r x y33f . `)PfEd@ m,, ~OSXbu~V_ :UZot?5JR>PjGv#.[jx{EMWY[]} ' c q ! !I!K!N!"""###!#(#,#u#z#}######$#$i&&'' '''K'M'R'V'^'''''()) )A))))***/***++#,o,w-e-oM6<>ADO#t QW\tz1Ya !@Z`ty? 7LT@RtFn&0]w{ HPY[]_ * j t !! !K!N!S!"""###$#+#s#z#}######$"$`%&''' ')'M'O'V'X'a''''')) )@))))** */*}**++ ,`,q-0-oM8>@CFR pvnlkjEC;6 POMLJDCBA@>=<:9864rhdcba`_]\TSRIE< ytZVSO10/-) nm1_\ Wr4/*5,!~q__O ~bOQSWX\btu z~0\1VY_a  &  +,-.!:/@UIZZ_`o`ttpyq??8e l57JLRTH>d@PRjtFGnv#+&.90[B]jnwx|{{~ G   E HM PW YY [[ ]] _}   H W e k ~ ' * c j q t   * , . 0!! 1! !I ;!K!K z!N!N {!S! |!" "" "" "# ## %##! '#$#( -#+#, 2#s#u 4#z#z 7#}#} 8## 9## :## ;## O## Q## R$"$# S$`$i U%& _&&'''' ' ''')'K3'M'MV'O'RW'V'V['X'^\'a'c'''''''''())) ) )@)A))))))))*** **/*/*}*** **-++/+ +#J,`,oN,q,w^-0-ee-o-oMM68<>> @A CD FORIUWY[_ #optsvxV89\;>^@DbFFgJPhRkoՠ   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a rdei xpk Rvj ~ <s gw / -M Il|6cn 8T f $m} b ):  y qz5fqu-J3T99NR7s`s3VV9s3D{o{RoHT3fs +b-{T#\q#H99`#fy```{w``b{{Rffw;{J/}oo5jo{-{T7fD)fs, %Id@QX Y!-,%Id@QX Y!-,  P y PXY%%# P y PXY%-,KPX EDY!-,%E`D-,KSX%%EDY!!-,ED-,%%I%%I` ch #:e:-ff@ /10!%!!fsr)5 5@ K TX8Y<2991/0 P ]%3#3#5qeB@KTKT[X8Y1<20@0 @ P ` p ]#!#o$++`@1      91/<<<<<<<2220@   ]!! !3!!!!#!#!5!!5!T%Dh$ig8R>hggh`TifaabbNm!(/@U" '&( /)/))/B" ) *!#*- ) " & 0K TX8YK TKT[KT[X@8Y<<<1/299990KSX99Y"#.'5.546753.'>54&dijfod]SS\dtzq{---@A$*.U# jXV`OnZXhq) #'3@6$%&%&'$'B .$ &($4'!%   ! + 1 4K TK T[K T[KT[KT[K T[X18Y9912<0KSXY""32654&'2#"&546"32654&%3#2#"&546WccWUccUVcbWWcd1Zܻۻa ۻۼ 0@      !         B  (('+'$ .  .'.'!!199999991/9990KSX99999999Y"2]@ " ) **&:4D ^YZ UZZY0g{ "-  ' (   2'') #**(/2; 49?2J LKFO2VZ Y UY\_2j i`2uy z 2229]]3267 >73#'#"5467.54632.#"[UԠ_I{;B h]hΆ02޸SUWDi;#QX?@Yr~YW׀c?}<$$/1oX3go7@ KTKT[X8Y10@ @P`p]#o+{ 7@  KTX 8YKTX @8Y29910#&547{>;o @ <99103#654<:=JN@,       <2<2991<22990 %#'-73%g:r:g:PrPbybcy #@   <<1/<<0!!#!5!-Ө-Ӫ--@ 1073#ӤR@d10!!d1/073#B-@B/9910KSXY"3#m #@  10"32'2#"  P3343ssyzZ @@B  KTX@8Y1/20KSXY"]7!5%3!!JeJsHHժJ@'B   KTKT[KT[X8Y91/20KSX9Y"@2UVVzzvtvust]]%!!567>54&#"5>32Ls3aM_xzXE[w:mIwBC12\ps(p@.    #)&  )KTKT[X 8Y99190@ daa d!]!"&'532654&+532654&#"5>32?^jTmǹSrsY %Đ%%12wps{$& Ѳ|d @   B    K TK T[X 8Y<291/<290KSXY"@* *HYiw+&+6NO O Vfuz ]] !33##!55^%3`d^@#    KTKT[X8YKTX@8Y190!!>32!"&'532654&#",X,$^hZkʭQTժ 10$& $X@$  "% " !%190@]]"32654&.#">32# !2 LL;kPL;y$&W]ybhc@B991/0KSXY"KTX@878Y@X9Hg]]!#!3V+ #/C@% '-'0 $*$ !0991990"32654&%.54$32#"$54632654&#"HŚV г "Əُattt$X@# %!"" %190@]]7532#"543 !"&2654&#"LK:lL>$& V\s[#@<21/073#3### %@  <2103#3#ӤR#٬@^M@*B$#29190KSXY" 5Ѧ`@ #<210!!!!^O@+B$#<9190KSXY"55//m$e@+$     &%K TX8Y99991/9990y z z ]%3##546?>54&#"5>32ſ8ZZ93lOa^gHZX/'eVY5^1YnFC98ŸLVV/5<4q L@2  L4307$7CM34( (+(I+*(I,=M<9912990K TK T[KT[KT[KT[XMMM@878Y@ NN/N?N]32654&#"#"&5463253>54&'&$#"3267#"$'&5476$32|{zy!orqp ˘s'6@   0210].# !267# !2'ffjzSb_^^_HHghG.@   2 99991/0`]3 !%! )5BhPa/w.,~ .@   21/0 ]!!!!!!9>ժF# )@ 21/0 ]!!!!#ZpPժH7s9@ 43 1990%!5!# !2.# !26uu^opkSUmnHF_`%; ,@ 8  221/<20P ]3!3#!#"d+9.KTX@8Y1/0@ 0@P`]3#+f B@  9 KTX@8Y991990@ 0 @ P ` ]3+53265M?nj @(B  291/<290KSXY"]@ ((764GFCUgvw    (+*66650 A@E@@@ b`hgwp  ,]q]q3! !#3wH1j%@ :1/0@ 0P]3!!_ժ @4  B    >  91/<290KSXY"p]@V   && & 45 i|{y   #,'( 4<VY ej vy ]]! !###-}-+3 y@B6 991/<2990KSXY" ]@068HGif FIWXeiy ]]!3!#j+s #@  310"32' ! ':xyLHH[[bb:@   ? 291/0@ ?_]32654&#%!2+#8/ϒs R@*  B     39991990KSX9Y""32#'# ! '? !#y;:xLHHab[T@5  B    ?  299991/<9990KSX9Y"@]@Bz%%%&'&&& 66FFhuuw]]#.+#! 32654&#A{>ٿJx~hb؍O'~@<    B %( "-"(9999190KSX99Y")])/)O)].#"!"&'532654&/.54$32Hs_wzj{r{i76vce+ٶ0/EF~n|-&J@@@1/20K TX@878Y@  @ p ]!!#!ժ+)@@   8AKTX8Y1299990]332653! ˮ®u\*$h@'B91/290KSXY"P]@b*GGZ} *&&))% 833<<7HEEIIGYVfiizvvyyu)]]!3 3J+D {@I      B     91/<2290KSXY"]@  ($ >>4 0 LMB @ Yjkg ` {|      !   # $ %  <:5306 9 ? 0FFJ@E@BBB@@ D M @@XVY Pfgab```d d d wv{xwtyywpx   []]3 3 3# #D:9:9+=; f@  1 ]@ /<20KBPX@   @    Y3 3 # #su \Y+3{@(B@@ 91/290KSXY" ]@<5000F@@@QQQe &)78@ ghxp ]]3 3#f9\ @BB K TK T[X8Y991/0KSXY"@@ )&8HGH    / 59? GJO UYfio wx ]]!!!5!sP=g՚oX;@CK TX@8YKTKT[X8Y210!#3!XB-@B/9910KSXY"#mo0@CKTKT[X@8Y<10!53#5oXޏ@ 91290 # #HHu-10!5f1@ D10K TKT[X@878Y #ofv{-{ %@'   #   E&22991/9990@n0000 0!0"?'@@@@ @!@"PPPP P!P"P'p' !"'''000 0!@@@ @!PPP P!``` `!ppp p! !]]"326=7#5#"&5463!54&#"5>32߬o?`TeZ3f{bsٴ)Lfa..'' 8@  G F221/0`]4&#"326>32#"&'#3姒:{{:/Rdaadq{?@  HE210@ ].#"3267#"!2NPƳPNM]-U5++++$$>:#qZ8@G E221/0`]3#5#"3232654&#":||ǧ^daDDaq{p@$   KE9190@)?p?????,// , ooooo ]q]!3267# 32.#" ͷjbck)^Z44*,8 Cė/Y@     LK TX @8YKTX 8Y<<991/22990@P]#"!!##535463cM/ѹPhc/яNqVZ{ (J@#  &#' & G E)221/990`***]4&#"326!"&'5326=#"3253aQQR9||9=,*[cb::bcd4@  N  F21/<90`]#4&#"#3>32d||Bu\edy+@F<21/0@  @ P ` p ]3#3#`Vy D@   O  F<2991990@ @P`p]3+532653#F1iL`a( @)B F 291/<90KSXY" ]@_ ')+Vfgsw    ('(++@ h` ]q]33 ##%kǹi#y"F1/0@ @P`p]3#{"Z@&   PPF#291/<<<290@0$P$p$$$$$$$ ]>32#4&#"#4&#"#3>32)Erurw?yz|v\`gb|d{6@  N  F21/<90`]#4&#"#3>32d||Bu\`edqu{ J@  QE10@#?{{   {  {]"32654&'2#"s98V{>@ GF2210@ `]%#3>32#"&4&#"326s:{{8 daaqVZ{ >@   GE2210@ `]32654&#"#"3253#/s:||:/daDDadJ{0@    F21/90P].#"#3>32JI,:.˾`fco{'@<  S  SB %( R"E(9999190KSX99Y"']@m   . , , , ; ; ; ; $( ( *//*(() )!$'      '/)?)_))))))]]q.#"#"&'532654&/.54632NZb?ĥZlfae@f?((TT@I!*##55YQKP%$78@  F<<2991/<2990]!!;#"&5#53w{KsբN`>X`;@    NF921/290o]332653#5#"&||Cua{fc=`@'BK TX@8YKTKT[X8Y91/290KSXY"@Hj{  &&)) 55::0FFIIFH@VVYYPffiigh`ut{{uz>]]3 3#=^^\`TV5` @IU U U U   B     K TKT[KT[KT[K T[X@8YK TK T[KT[X8Y91/<2290KSXY"@" 5 IIF @ [[U P nnf yy          %%#'!%""%' $ ! # 9669 0FHF@B@@@D D D @@VVVPQRRPS T U cdejejjjn a g ouuy}x}zzxy  { v } @/   y]]333# #V`jjj;y` C@F      B   K TKT[KT[KT[X@8YKTX8Y91/<290KSXY"@   & =1 UWX f vzvt        )&% * :9746 9 0 IFE J @ YVYYWVYVV Y P o x  /]] # # 3 dkr))`HJq=V`@C        B     K TKT[X @8YKTX 8Y9129990KSX2Y"@     # 5 I O N Z Z j        '$$  )( % $ $ ' ** 755008 6 6 8 990A@@@@@@@@B E G II@TQQUPPVUVW W U U YYPffh ii`{xx   e]]+5326?3 3N|lLT3!;^^hzHTNlX` @B K TK T[X8YKTX@8Y2991/0KSXY"@B&GI  + 690 @@E@@CWY_ ``f``b ]]!!!5!qjL}e`ۓ%$w@4 %   !  % $  C %K TX@8Y<<29999999199999990&]#"&=4&+5326=46;#"3>l==k>DV[noZVtsݓXX10#$@6%   #%#C %K TX8YKTX@8Y<2<9999999199999990&]326=467.=4&+532;#"+FUZooZUF?l>>l?VWstݔ1#@  1990#"'&'&'&#"5>32326ian ^Xbian ^V1OD;>MSOE<>L5 b@ <2991/0K TX @ 878YKTKT[KT[X  @878Y P ]#53#3+e#!Q@+     "  "<<<221<9990%.'>7#&73JDFHAMf fIX⸹)**'# 32!b`@!    <<1/2<2990K TX@878Y66].#"!!!!53#535632NL=ty-=))׏/я^R#/@I -'! - -'!0 *$0* $ $(st*(s099999999919999999907'#"&''7.5467'7>324&#"326{r%$&(r;t=:x=q%%&&s7t@?s9q(&%%s>v:@t8s'%$|pprR@F  B     fe f e<2299991/2<2<290KSXY"K TX@878Y@(' ' ')((79  ]]!#!5!5'!5!3 3!!!c`Tþ{yT9{3{JD{3@ <210##  \= >@54&.#"#"&'532654/.5467.54632{?>?>S8alӃ\]>9̭IXW:fqր][;;ȦI.Z.L-[.K''PGZsweZ54m@''TLf{xf[1,pEF)@dd1<20K TK T[X@878YK TK T[KT[KT[X@878YKTKT[X@878Y@````pppp]3#%3#^y/IC@&=>:A$104G$ 7aD=0^* D^ J21/02#"$'&5476$"3267>54&'..#"3267#"&54632mmllmmmmllmm^^``^^⃄^]]^\^BB@zBCFInmmmmnnmmmmng^^^傁^^__^]⃅]^^! "s;)_@3(%%  * "(kl"k *22999199990!!#5#"&546;54&#"5>32"326=P,]uu>DIE~bRhP{@p?Dq[[""CO@Mr%# @I    B   o o n<2991<2990KSXY" 5 5%-+#-+#RR^@ 10!#!^d10!!d/8L`@6EBC?2H09JC 9 $HE301B54&'.'2#"$'&5476$#32654&'2#'.+#^^``^^⃄^]]^\^ㄘmmllmmmmllmm}{{nWXfi`C.;I6Bf^^^傁^^__^]⃅]^^gnmmmmnnmmmmnb>KL?gwyVpMI`3Db+/10K TKT[X@878Y!!Vu=  @  Z[Z10"32654&'2#"&546PnnPPnoO@v+..ooPOmmOOp1.-rB .@     <2<21/<<0!!#!5!!!-Ө-}}^J@$}}B ~9190KSX2Y"!!56754&#"5>32 "?XhU4zHM98rn81^BQ##{l0b(H@'    #)~&~ )999190#"&'532654&+532654&#"5>32 \e9}F4wCmxolV^^ad_(fQI7Z`mR|yOFJLl?<:=svcE`sRf1@ D10K TKT[X@878Y3#fV` M@%  !   NF!2912<990"`""]3326533267#"&'#"&'#% )I#ER2bf*V H<9 NPOONN;9 %@]] 91290!###.54$yfNݸHF103#F#u@  ' 1/90!#"&'532654&'T76xv.W+"J/;<+->i0Y[ 0.W= ,@   |]|| 12035733! c)t'+n`d.@  klk 9910!!2#"&546"32654&PXγгi~hi}|P{ݿܾsH# @I  B   o op<<991<2990KSXY"5 %5 +-+-#^R^  ^R^  &{' d 35?&{'td 35b&u' d 35 $@/  !# #%" " "!& %999919990KTKT[KT[X%%%@878Y@ ttttv]33267#"&546?>7>5#537ZZ:3mN`^gIYX0&DeWX5^1YnFC98ŸLVV/5<6hk&$uhk&$uhm&$u  +@ ]1h^&$u #+@ @O# /#]1hN&$u  +@ 0?  ]1hm !@T   !!  ! !!!B     !  VV!"2299999991/<9990KSXY" #]@  s P#f iu {yyv v!# ]]4&#"326!.54632#!#TY?@WX??Y!X=>sr?<҈_Z?YWA?XXN)sIsrFv)H@9  B     <291/<0KSXY"]@gww  ]!!!!!!#!59=qժF՞su'&&z-k&(uk&(um&(u@@ ]1N&(u @@ @]1;k&,/uk&,/u`m&,/u +1XN&,/u +1  g@    2  y<291/220@(   ]]! )#53!!3 !iP`P5~.,3^&1u"+@ 0?""]1sk&2'usk&2'usm&2'u+@]1s^&2'u!0 +@ 0!?0 !/0!0]1sN&2'u +@ @O]1? @M    B   <291<290KSXY"  ' 7 7w55v8vL57y5yy5f +@< +,  )&  *&& &,+,* # )#3,99999999199999990@*WZWU!je!{vu! FYVjddj(|svz( ]] 324&'.#"&5!27!"&''3>_'y=_''NOy;WfNPƀ[gX@CHp@CpDfbMKYg[KKX)k&8u)k&8u)m&8u +@ / ]1)N&8u +@P_@O /]1k&<su =@   ? 2291/0@ ?_]332+#32654&#'ђ/@0-'!  **.  !' $'$-F099991/990@@'(     ! "&  : :!MM I!I"jj  ]]4632#"&'532654&/.5467.#"#:A9`@IPAtx;e\`Wqqs`/Q*%jd_[?T>7;[gp{-f&DCR @?&/&&]1{-f&DvR @?&/&&]1{-f&DR (,+1{-7&DR.< +@ ./<.<]1{-&DjR -( +@(o(P-_(@-O(0-?(-( ]1{-&DR%@&,,& 2882 ++1@ ?5?/5/]0{o{3>@C'-%= 4%:.-*1 %?47&%7& =&-7"E?<9999912<<29990@0+0,0-0.0/00@+@,@-@.@/@0P+P,P-P.P/P0+0@@@@@@@@@??? ??0,0-0.0/@,@-@.@/P,P-P.P/ooo oo`,`-`.`/p,p-p.p/,-./]q].#">32!3267#"&'#"&5463!54&#"5>32"326=DJԄ ̷hddjMI؏`TeZ߬o0Z^Z55*,ywxx..''`f{bsٴ)qu{&Fzqf&HCqf&Hvqf&H"+1q&Hj@@ ]1f'Cof'v\f& +1F&j +1qu('@^%{&%#${##{#({'(#&'('%$%(('"#" ! B('&%"! ## #)&' ! (%#" QE)999999919990KSXY"?*]@v%+("/#/$)%-&-'*(6%F%X X!` `!f"u u!u"%#%$&&&''(6$6%F$E%Z Z!b b!z{     {zzv v!x"**']].#"32654&#"432''%'3%F2X)6 ~r4*!M!ü޼z&77kc\̑oabd7&Qquf&RCsquf&Rvsquf&Rs+1qu7&Rs .+@ /. .]1qu&Rjs +@ @O0?]1o )@ r <<103#3#!!oAH +@<+,&  )&  *&& &,+,* # #Q)E,22999999199999990@p(?-YVUV jf!{    { z{ {!"#$%{&%--&YVUZ(ifej(ztvz($$]] 32654&'.#".5327#"&'')gA\*g>}66]C_56`?`!*(Ou))Hn.Mw834OMx43NXf&XC{Xf&Xv{Xf&X{ +1X&Xj{ +@ @O0?]1=Vf&\v^V>@ GF2210@ `]%#3>32#"&4&#"326s:{{8daa=V&\j^+@ 0? /]1h1'q;$ +@@O]1{-&qJD+@o]1h'J$+1@oo]0{-&OD"+1u&${u{&Ds'k&&-uqf&Fvs'm'Lu& <=/1qf&Fs'P&&Luq&Fs'm&&-u@]1qf&F&'q&G @_?]1 q$J@$ "    GE%<<1/<20`&&&]!5!533##5#"3232654&#"F:||ǧN}}daDDa3&(q=q'qH@p]1m'u(@@]1qH'H@p]1P&(uq&Hu&(qu{&Hxg&(o@@ ]1qa&H!+@!]1sm'\u* <=/1qVZf&hJ  <=/1sm&*uqVZH&JsP'\u*@?]0qVZ&hJs'^*qVZ4' J;m'u+ +@ / ]1dm'uK*+1KQX88Y@ @@]:@    8 22221/<2222203!533##!##53!5qʨ"ʨ9Qx>@!   N  2221/<2290#4&#"##5353!!>32||}}`Bu\zzedx^'.u, +1g7'+1Y1'q.;,+1H'q+1gm'.u,+1VH'+1u%'d,u 'JLP&,/u<<1??]0y`,@ F91/0@4D@P`p]3#\`{f'-\,@1V'M8L@F1f_m'.u-+1V\f'+1j' .' N` @(B F 291/<290KSXY" ]@_ ')+Vfgsw    ('(++@ h` ]q]33 ##%kǹ`!jl'nv/Jl'ZvO<1KQX@8Y@O]0j' /' O@@]1j'/'9O @]1j'y1w/'ysOK QKSKQZ[X@8Y1u ?@   : y<<991/900P]3%!!'79Pw^Mo;jnH ^@  z z <<991/90KTX @ 878Y@ @ P ` sz p ]37#'7Ǹ}Lɸ{JZjXj3l'v1@O]1dm&vBQ @?O]13' 1d{' Q3_&1g +@ /  ]1df&Q +@]1'QU~V;@  AKTX8Y21@ /0!"#367632+53265PͳNijQRW1fOCCoa`ZVd{;@  NF 21/90`!!]+5327654&#"#367632dRQi&&||BYZuccH``01`e22wxs1'q';2 +@]1qu&qsR+1sm''u2+@]1quH&sR#+1sk''u2quf'Rs ;@   299991/220!!!!! !# !39OAg@AժF|pm|q{'3@1 . ("%4"1 K1 Q+E499912<2290@%?5_5p55555????? ooooo ]q].#"!3267#"&'#"32>32%"32654& H ̷jbdjQGьBN5Z44*,nmnm98olkp݇Tl'v5m&vBUT' 5J{' UT_&5}g@_]0Zf&U +@]1l'v6om&vBVm'u6  ))Ic:1of&%V  ))Ic:1u&6zou{&Vzm&6u + ""Ic:1of&V + ""Ic:1u&zP77u&zW_&7sg +1@_]07&W7p@]1F@   @ @ <<1/2<20@@p ]!!!!#!5!!  ժA@7C@  F<<2<<2991/<<<20]!!3#;#"'&=#535#53w{%&sQQ''PO>)^'u8 '+@ ]1X7'X&+1)1'q;8 +@ / ]1X'qX+1)m'u8+@]1XH'X+1)o&8iX&X| @@@!]1)k'u8^f'Xe)&8u`&X'Dt'|:+1V5m'EZ+1t'r|< +1=Vm&^\+1N&<su +1\l'v=Xm&vB]\N's=X&]\m&=uXf&] +@ ]1/#@  L<1/0!##53546;#"c'&яN()g ,D@% ")%,$'".EG* ,(%#'F-<2221/<204'&#"327667632#"'&'##5353!!STTSSTTS:YX{{XY:E/tssttsstRd0110d}}P)C@#   . *29991/90"]!2654&#!2654&#%!2#!"#546D+ |v݇f>orqp ˘0_i1F&8@# (EGF'221/067632#"'&'#!%4'&#"3276s:YX{{XY:NkrSTTSSTTSd0110dtssttsst 3@  . /21@  / 9/04'&#!!276!2#!#ONDNO|N8DCDCD>@  G /221@  /ij9/0>32#"&'##34&#"326s:{{:"QrdaadDs'0@  0 <10>3 !"&'53 !"shSzjffbGGaaHH_^9'(9^_sZd$D@"! %  %  0%210&&].# !267# !2676;#"'ffjzS` SfM?nb_^^_HHgh$bzq"N@$ ## HE#210@ $$$$$].#"3267#"!2546;#"NPƳPNM]-GFE0iL~++++$$>: a .@   2 99991/0`]3 !%! )"#5465BhPav/w.,~0_i1F.@  .21@   /0)!"!!"$54$3!!@DNN|#+qZ?@G E221/0` ]5!#5#"3232654&#" M:||:ndaDDadqVuc'T@ )E Q E(]99@   (99@%S 910%!"'53254%&'&326&#">kGxfu'~@3cnBOFFu\0%p9 *E +@    21@ /0!5!!5!!5E>9+uD@& 39190!!"56$3 ! 7327upo^   2`_FHg[{(@@$ )) #)* &)190.54$32.#";#"3267# $546؃ YsrSǾmTj^У%!| &${spw21%%ݐf#A@  2991990 ]!!!!+53265ZpPM?nժHVe@#   LK TX@8YKTX8Y<<9912299990@P]#"!!+53265#535463cM/ѮcMPhc뻫Ph*Nsd&I@43! F'1@'$$'990%!5!# !246;#".# !26uu^[DM?npkSUmnꪖ_`%Rv%@ 'P $&]ĵ 91@ %$&222990@ #%$$<<$#$%#@$"! #9927654'&'3#"'&5476736,3,,3,6hC.KddK.Ch B9Iy\\yI9B z^ȮwBAWWABw1G*O@, *&NF+291@ '&&  #/<<9990%27654'&'5+"&54&#"#3>323LTWJ>ymoF||BuLibep_!edg .@  KTX@8Y991/9903;#"&n?M-– R E@   >f3@)B 6  999991/299990KSXY" ]@068HGif FIWXeiy]]!3!+53265jG?n+Vd{Ds 1@ 3221@   0! ! "!&32sy:;x Vb[[z=g&24v'X Rs3@ !  <1/0!4&#! !2!2"327&nzy;pa'Xܯ–bb-LgFqVY{!:@ """# E"9104'&##"3232"327&&&idRصRQ@TVt1098``:6:@   ? 291/0@ ?_]32654&#%!2+#"#5468ʄv/ϒ0_i1FV$O@$#% %G  F%22991990@ `&&&&]%#46;#">32#"&4&#"326siL:{{8(adaaTV@  ?  2299991@  /9990@ @u|]#.+#33 326&#A{>ٿJx~hb؍Oђ r!d@ -" "99991@B!  "90KSX@ Y6 327# '&546?6764'& {璑z<;YZL-|숋_ppٶ+23@@md{'@  !! RE(99991@ '$$(90@S !S BKSX99Y"]@/)?)_))))))]@% '$&((*//*( ( ))$]@.,,,;;;; q>323267#"&546?>54&#"Lf@eaflZ?bZN?$%PKQY55##*!I@TT((0V6@   O 221@   <20;#"&5# 54!23%&'&#"3wMc/R5!n|wj=hP`@o,0A37V?@ F<<291@/<2990!!;+53276="&5#53w{KsF0j&&էN01`>X@ @  991/2990K TX@878Y@@p ]!!##"#546;^vժ+Zi1F7I@  F<<2291@  /<299990]!!;#"&5#53546;#"w{KsբcMcN`NQfT@ @@ 120K TX@878Y@@p ]!!;#"&!n?Nժ=–_&84i' XN:@!3   1@   <2220!! 47!5!3254'5!X ƱXw>*a"Lav-@   /<91@ 0%254'&'5!'&'&33cAnMagn"ʦmWDtz–d@  @ @99/1@  /9990@        BKSXY""#3 632#54&9%NZUUIG9\[ny6P=V{j@  K TKT[X @8YKTX 8Y9991@:        B    9990KSX2Y"@      '$$  )( % $ $ ' 755008 6 6 8 A@@@@@@@@B E G TQQUPPVUVW W U U ffh { F]@%     # 5 I O N Z Z j ]+5326?3 67632#54&#"N|lLT3!;^0XQ99) hzHTN43`rr:T*\@5    B  B K TK T[X 8Y9991/<20KSX<<<323#L:s_%'ST_ijxzX"Jh0@umHLIwKK!!C12\RI`1]5@ F1@  0 4&#!!!%$ $5& )sQ;-%,%hV)$yhL?`3@  F1@ 203 4&#!!!32!"'hi;-ԧc%,&cV)$yJX$!"'&'5327674'&+#5333!plnUQQLITNPc9:V>}ws}#(rAbLrV{@@  F221@ B 0KSXY#36763254'&#"s4QҸMNr98xܭz BR1pqWBAV&@ F10@ @P`p]3#V''V:@    <<2<<219/<2<203!!!!#!5!5!5!s____,Ԫ m'?' f'@'qf'@Gf$'-/V'Me/V'MvOf'-_1V'M>1V'MeQhm&$u<1{-f&DZ +'+1`m&,/u  Ic:1^f&  Ic:1sm&2'uquf&Rv <1)m&8u<1Xf&Xv  Ic:1)3&08X1'q{;)Z&86X"&X)Z&80X"&X)`&80X"&Xq{h3&${-1&qR;h3&${-&DH4'q>{o'qs%T@!$"43 &<1@"#%&99ܰ KTX"@8Y<203## !2.# !2675#535!5yyuu^opkC XSUmnHF_`%'XqV{ 4X@"2% G,E5221@ #% ) 2/3 &)/99<20`666]4&#"3263#!"&'532767!5!6=#"3253:aQQRZ9||9=nXF]@,*_EG^[cb::bcsm&*Ju!<@!T!$!]1qVZc&JJjm'u.m&Nu* +1KQX88Y@ @@]se'42qeu{'Rse1'q';qeu&qsm'uyXL/f&TVdf'%  Ic:1 '=' ']'q']Gsl'v*qVZc&Jv-5@8221@ /203!327653! '&5!#>=B>d`gd"dPNOKZ߀xxv 9V@@  221@ B 0KSXY%#3676324'&#"8WST=<HW5xz7 GF3k'u1dd&QChs&\}{s&}Hl'\v{oc&vefl'vHc&vhp&$z{-d'Dh6&$>{-H'eDp&(zqc'H6&(>qH'Hsp&,Yzc'fw6&,>>UH'$sp&2Azqud'Rs6&2>quH'RTp&5yzJc'%UT6&5>^H'-U)p&8zXd'X)6&8>XH'X'v6o{',V'S77'WRs16767654&#"5767654'&"567632¥~b[?FjOQ_ciqYxw`eGRxQYڵ@XKy^qjj=vX{5?:.PB*8hicqMmwqڎ{\(GO{36767654'&#"5767654'&#"0567632GrXBAR9?|cGIN`\hOm`bs[yx@Il|IPxģ3H2#PQ̝qpD(4%3254'"632!"'#67&5#"'&76323 76'& %44nI5"C0:XY|ˀ|YX:ST$TTTTT- H:E<$d0110d^jtssttssq% ;W@$3=E (B!8;7B/E<̲ ;]91@$3< ;<,<990" 7654&327654'&'52 '&54767&'&5476!˸jkkjpkk_;̨_`Lm䖋_``aCUtMMMMMN'|OEH-AA+Mdha "ccttttُcc"FYXSJqq 4C@6E B42()+&BE5221@4)".559920" 7654'& '&5467&'&5473327654'qSRRS SSSR:4HRQ;4?+IHIJ,MMMMMNMMJ@b@Y "ccttttُ"#VKYIAAAAAtw>\V@ B  K TK T[X 8Y991@ B  /0KSX@ Y@@ )&8HGH  /59?GJOUYfiowx]]+53276=!5!5!!Hri&&gPP%01oXV`@   K TK T[X 8YKTX @8YĴ@`]99Դ@`]1@ B  /0KSX@ Y@2&GI + 690EIWY_fh]]+53276=!5!5!!۞Hri&&5ejLP%01%hP&$@{-&D_u&(zqu{&Hz{s3&2bqu1&qs;s3&2iqu&RsO''t2qu&sRs3&2jqu1&qs;1'qr;<=V&q^\p\%3254'"632!"'#67&73%44nI5"C1- H:EVy` 8@   OF 991990@  @ P ` p ]3+53265F1iL`aq #/A@1E%G +G!E0<<<<1@( . /22220 6& 23632#"'#5#"'&76'&  7/ST$Trrrrˀ]STTSST$Tjtss ^ŨŢtsstjtssqV{ %/D@1E$G+G'E0<<<<1@ *.! 02<220'&  7"'##"'&763253632 6& STTSST$TrrˀrrST$TdtsstjtssRŢŪjtss|3 #!#'#7'7 3!Jafp|҈2F;R/o]jY'FF8O ",'&76!27&'!2767# '#&# rfuSv=:efc.1 tsfjwv9tFXh$xYv+!f //_H$$\/ح ]"+'7&576!27&'32767#"'&#"i`UUQ.-Y_vcPNONMRS]7GGcc^N lOU ^q+$Vqrg j ;@   : <<1/<20@ 0P]33#!!#53ʿ_w1##'!5!7 !4" gZ8f,i> XRBY bo{=4'&/&'&54632.#"3#"'&/&'&'&'53276 23@LLfLNZDE11?PS{W*L'TrGY$alfccaFF'K((%$JK((**T@%$!,KL[@~$=&[#5-,X3`!;#"'&/&+=!qjN\1*LlTrGY=Z^e`1~$=&[? %P6@ 9991@  /0##32654&+"56;2'񍚚EOZ*,FP{7@   991@  /032654'&#"5632##/dLUIVVN}AH+Fnt  (\@ #  . &%)<229991@(% #/99/<20*]!!!2654&#!2654&#%!2#!#53[D+ |迿ɐʇf>orqp ˘p _@ 8AKTX8Y<2<21@   29/<<2299990]3!33#! 5#53!3265˥ߦ®j*$}h)B33#!!!!#7#!#!AX .AA<VF㪾FqB&-1&'&'!3267#"'#&'&3273&#"#So+Jajbck{cPm!)81G\9/Zo Z 6Z44*,!  C "2JcfRY@    9 KTX@8Y<2991<2990@ 0@P`]#+53265#5333RM?nʿwHVS@$   OF<<22991<2990@ @P`p]33#+53265#533#F1iL`(aؤsf$C@$  %" %  %2299199053;#"&5# !232#"nEMMT–\\xEEqV@{$H@"%"%G E%229910`&&&]#"&=#"3253;32654&#"@F:||:Li1戮VּdaDDada= T @  ?  !<299991@!  B  /<229990KSX9Y"@"]@Bz%%%&'&&& "66FFhuuw]]#.+##53! 32654&#A{>ٿJxʿ~hbw؍OJ{=@ F<<<1@  /<20P]###533>32.#":.I,h<ĤfcΡ3!733!#!53!ٗ ٗwјv9 V`+5326?!533!33!+N|lLT3!øLùmhzHT33`{ ,@ .% F-22991@-&%"*-%  9990@1?$?%?&?'O$O%O&O'_$_%_&_'o$o%o&o'$%&'$%&']@+?#?$?%?&?'?(?)O#O$O%O&O'O(O)_#_$_%_&_'_(_)]2654'&#"367632#!3267#"&߬A@o\]?^^fe~ST`Te__Z+f{b:9ml)Lf01a```FE..'qZ{8@G E221/0`]53#5#"3232654&#":||ǧdaDDa{ 8@  G F221/0`]4&#"326>32#"&'#3姒:||:/Rdaad` $C@  !G! F%22991/0`&&&]4&#"326>32#"&'#46;#"姒:{{:Z[/Rdaad~Ӝ}}{ 0@ ! !"EH!<106763 #"'&'5327654'&#"LQQU]SRMNONPccccPNON5#$+qrrq+qs{'/O@( ,,H"E02991@.*%00@ 11111].#"67632#"'#47&'&!23254#"NPc'>IjJ?_SPI 9/-U:Me5++rQ,3H=Y}/)9DhQ#3 :#:9KqV@$K@$%"%OG E%221990`]#"&=#"323;32654&#"@F:||:Li1戮VּdaDDad^ؙa=q$=@" %%  GE%2210`]546;#"#5#"3232654&#"iL:||ǧadaDDaq{"r@ KE#91@  #90@)?$p$$$$?????,//,ooooo ]q]47632!"&'532767!7&'&#"qkcbdcjfg ]\RS^,*4cdWWZZq{A@$  KE91905!.#"5>3 #"73267qN ͷjbck 9Z44*,#ė|{ 4w@6.('4 KE5<Ķ&  91@/.'""5 5@  &"90@ 4 &'<<<<<%6'6'32#"'&'&'&5>3 73;#"'&5Nf  R`\Lladbck $˸&&i+@WR֊>8E#Z`vg'#d4*,#)u10`Z|B|*|>i@@603273;#"'&5|PUTZGUU]UTNHtCDFEwGQPabLq_&&i+@WR@\l%88ZX83,-F@.. NBj10`ZȦFq|/;@ 1 &,E01@00)0#90"327654'&+5327654'&'2# 76`cchҗUTNHtCDFEhqr<V`K@   OF<<22991<2990@ @P`p]33#+53265#53F1iL`(aؤqV 0U@)  &#-* *-+& G E122991/990`222]4&#"326!"&'5326=#"32546;#"aQQR9||9iL=,*[cb::bcaqVZ` #C@ # GE$21/990`%%%]!"326!"&'5326=#"43!aQQR9|=ͻ,*[cb:*qO{8@4 E1990%#5!#"!2.#"326Ae{-h]_cƳO|$$>:77>>`Rd`#y@ %  $ĵ 91@  $222  990<<<<< 3#"&54767327654'&'bB_j&;;&j_BC(::(xܱSccS$-EIdccdIE-`d`#y@ %  $ĵ 91@  $222  990<<<<< 3#"&54767327654'&'b)rG,EE,Gr)C'88'bLx>>xLb-!@2FF2@!-VX`9@     NF21290`]332653##"&||Cua{VfcdC@!   N  F2991/<9990`]#4&#"#46;#">32d||iMBu\~aedVd!J@%  " NF"2991/9990`#]+53265#"#46;#"632diLiMHa=~a >@    F<<<2221/<20@ @P`p]33###533#¸`<Ĥn`Ft` '@   221@   /2205!#3!53t褤K#<@ % V V$<<1@#! !//2<903327673#"'#&'&#"#67632= &}33[ &}33[ %$RIJ %$RIJLT5@  <2<1@ /9/<2033##4'# 7632&#"3=5*7M\TK9V_ (@  F 1@   990;#"&5y=x1F|t(L6$@#&#" F%<̲#91@B""  " /9/ 990@$#@  **8;ILT[q ]@$$%$$5$7E$FT$\ ]@    ]2!"'&'5327654'&+5!#3!CicUQ^cdjTmcd\[je8+lh%12KKKJ3Lb&^@PP F'<91@  #''<<<290@0(P(p((((((( ]%#"&5332765332653#5#"'&Cb`ruSSrw=ZXyzVUy=<b`^zbze32>>Vb&a@PP F'<91@  #''<<<290@0(P(p((((((( ]%#"&5332765332653##"'&Cb`ruSSrw=ZXyzVUy=<b`^zbzZe32>>V{0c@PP)%'F1291@ %*!*-(&/<<290@02P2p2222222 ]>32+5327654&#"#4'&#"#3>32)E__RQi&&ru99wSS?yzUV|v{zH``01NM_``gb>>Vk{Q@N O F2991@ /9@   990`]#4&#"+532653>32k||F1iLBu\satedVJ{;@ N  F21@   /  90&54&#"#3>32;#"R||Bu&&i1F``edH10d` y@BNF 991/<2990KSXY" ]@068HGif FIWXeiy ]]!3!##`ylqu{ ,@  Q E2210"!.265!2#"qt蔔98q$`I@  E2ij 991@   /<<@ 9/0!!!!! '&76!#";:E*%xxxx%`ݛlklm>|$2@ &E E%1@ #%<202765 26= "&'"&H`k&InI&k`B"F:.aע ģ0[1[0T\l6puypVa`/@   /2991@  /90%!"/32653#r%832JI,:.˾ fcVJ{:@  F2190P].#";#"&53>32JI,Li:.˾atfc~{%@ 21@  /29903!5346;#"iLAat~{%@ 1@  /29903!534&+532ʴLiAa`@4  B      F299991/<9990KSX9Y"@]@Bz%%%&'&&& 66FFhuuw]]#.+#!232654&#0s2âJ{Qpwu t]:'`iVNM``E@  F299991@  /29990332673#!32654&#Q{Jî2s0jp|Ɓuw`':]t i`MNVoV{0@C  S('  S'('B1 '(!.1' ($R$+E19999190KSX99Y"0].#"#"/;#"&=32654&/.54632NZb?ĥdXLie@f?((TT@I!* ajYQKP%$V4@ O F<22991@  99046;#"+5326cMF1iK»Ph)aV O@ !O F!<<229921@! ! !99<20546;#"3#+53265#53#5cMF1iK`NPh(aؤi7V5e"O 1@ 04&+532;#"&McKi1F(hPaV2@   O 221@  /<20!3## 54!346;#"#"3276w5RcMów|n!o@`Ph3A07^3@   /<<2991@  /<2990]!5!4&+5323#{Ksբ>`N7V=@   F<<2991<2990]!!;#"&5#53w{Liൣa>`C@     NF2221/222220` ]3!33##5#"&=#5!326:CuȮ||h=$#^lfk`8@   91/20@ 3 3#f%.]`8XV`@"B  OK TK T[X8YKTX@8Y2991/0KSXY"@B&GI + 690@@E@@CWY_``f``b]]!!;#"&=!5!qjLLi/F7e`ۧa%X`!@  "KTK T[X8YKTX@8Y299<21@  /<0@ BKSXY"@:&GI #+ #690#@@ECWY_#``fb###]]!367632+#47!5!3254qjL"TA`:&>R~ie8FX`ۢG7W9W`/=3<;4%6]XL/` @ "!̲91@B!  !9/ 990@ @  **8;ILT[q ]@  %$ 5 7E FT \ ]@    ]2!"'&'5327654'&+5!5!`q|/=@1 %,%E01@0 0"0( 90";#"327654'&% !"$5467&'&5476EwEFDCtHNTUhcc`a|p<:!a>>`V.9@ F<<991@   /<203#33## 54!3#"32767Ku_+xG`͋BA0 L` ## 33R9L T#`@ F1/03!!`3qV $C@  #%% "GE%2210@ `&&&&]32654&#"#"32546;#"#/s:||:iM/daDDadaX$L@ & %<<ij#1@  $! /<2KPXY032765&'&#"56763 3###53T?V:9cPONNLQQUmlprLbAr+#}swԤX$M@ &"#E%<<ij "#1@ $!# ##/<2KPXY0535&'&5476!2&'&#";3##plnUQQLNONPc9:V>ws}#+rAbLrq &) 76'& %3!!!+5#"'&7632/ST$TTTTT iL:XY|ˀ|YXjtssttssH^Lۓd0110MqL4@#5#"'&76323!2!"'&'5327654'&+5 76'& Z:XY|ˀ|YX:jejbVQ^cdjTmcd\]:ST$TTTTT3d0110d^L$8*mh%12KKKJjtssttssq 3: 76'& %%!332!##47!#5#"'&763233254#/ST$TTTTTghL<):XY|ˀ|YX:FXjtssttss_ 3<;4d0110d^6[7@F.#"#"'&'#"'&5#533!!;5327654'&/&'&54632NZED11?QR|{Za]gQQ{%&sfccaFF3,@LLf?((**T@%$!,KL[[!&PO`>''M5-,QK($)$JK7V&/!05476;#"+53276=#"'&5#53!3wxWQîc&'QRF1i&&QQ3%&sN[V((h)``01PO`>''7p-9D!6!2&'&#"63 #"'47!"'&5#533276'&#"&57!3w{UQQLNONPcccO+eKTIQQ;BS_r(ր%&sz#+qrfr v)2LOAPO`> 'KV ''/Vo5+5327654&#"#!##535476;#"!;67632oRQi&&||ӹWWc'&-BYZuccH``01/яNUV((hce22wx#5.#"#"'&'#34632327654'&/&'&NZDE11?PS{|Zb]hf8b_caFF2-@LL?((**T@%$!,KL[[!&2-,QK($)$JK @   F<2991@ B /0KSX@  Y@B &GI   + 09 @@@@@C EWY `````b f]]3!!!+iLLۓ6 333# #333# #6ttttU=63@    <2<21@  220!#!#!#!#6kkUXrXJ3@ NF 21@ 0%#"&54&+53232653#׃Li1FęaBþyVv!:@ #NF "21@" ""0%#"&54&+53232653;#"&'׃Li1FPh2FęaBþyfu0@ 32tNN^luu)qJy}wYYk\g88u:KSX@ 32tNN^lugrB0)qJy}wYYk\xkW6Vr88 #@<<1@03+5327653#zt43r,Bttx66XVru@ 1@ /0.#"#3>32.biuu$uT  qksa97H <1 /032653#5#"&'H.bitt$uT  qkJa97Hu' <1@  /<032653;#"&=#"&'H.bit0B,rg$uT  qkJ V6Xlx a97 !+33276?3327654'&+CFCDtk=%%(f{n!!"}K'))'K}N;[--s?5/.6 333# #6tt&+53276?331/.N]D0 {{bp"#WK/itf tf&  t  @ 10#5Rڬ@u452654DŽu@XX@sPOOP=>X@?X=>POPPu"'&4763"3sPOOPs@XX@PPOP>=X?@X>u32765&'&#"567632#'y7$#?q22110335WDDFk[@*7K$@ ` XFh_@Cu#&'&547632&'&#"3kGDEW53301212q>$%6y[AmC@_hFX ` @$K7*@ 2% % g 25-5g'|?f=u912]90K TKT[X@878Y3# #fg|?fLu91<Բ]90K TKT[X@878Y@ 5:5:3]]33|g?f7@ u91290K TKT[X@878Y3#'#f?f7@ u91<90K TKT[X@878Y373x^@1@/0#^+b+qsRf3#ff #ofv^@1@/0%#^++Tq^#onvsR3#lo#E@ j,5!##–, 533##5#5j!5!>j)9H W@ VV1<0K TX@878YKTKT[KT[X@878Y332673#"&v aWV` v HKKJLDfN@ d10K TK T[X@878Y KTKT[X@878Y3#  @ V xV104&#"3267#"&54632X@AWWA@Xzssss?XW@AWX@sssLu @   '1/90!33267#"&546w-+76 >&Dzs5=X.. W]0iJ7c@$   VwVv99991<<99990K TK T[X@878Y'.#"#>3232673#"&9! &$}f[&@%9! &$}f[&@Z7IR!7IRfB@991<20K TKT[X@878Y3#3#߉fx%3;#"'&5&&i+@WRd10`ZȢf '#7'373\\]]\aa``u # 5473733254/MMz /1/03#zttu/2&'&#"#"'&'532654'&/&'&547632j1549W++](}24NM9>=D@?>=RX o(l00GF@99 a /$*+MW33 k2-*)*IX01 u! #'#37 ͉H+u#&'&547632&'&#"3kGDEW53301212q>$%6y[AmC@_hFX ` @$K7*@X@ 1/0!!5!AGЈX'@??//21/]0!!5!3A4X@ 21/0!!5!3AhhX'@pp0021/]0!!5!3A4X@ 1/0%3!5?p+v'qqf3#3#@fx.SMvJ!'&'&#"#67632327673#"&9 &}33[&@%9 &}33[&@7 %$RIJ!7 %$RIJf6@ D910K TKT[X@878Y # mXfvqPf6@ D910K TKT[X@878Y3#fs?f<@u991290K TKT[X@878Y3#'#?fsH7b/q|  )1H+d%@ 910@4D]3#hF)I@ dd 91<20@#4D`````````ppppp]3#%3#^y)7{"@ V@ V /1@@ /0632#546?654&#"7pihX,#w3-.>GZdH3UC=A   (6%""($4fCf<@u991<90K TKT[X@878Y373NxsD/1/0#DD'4]fB@991<20K TKT[X@878Y#!#͇fxx)1')1H VV/1 /<0#.#"#> v aWV` v ")KKJLD( @0#3Ӥ?#55#53pp{53#7"op{y3#@uUCqPUv &D53#5#5_&3##3D_U?p!5!#Ik{1@V/K TK T[KT[X@8Y21@ /0532654&'3#"&=X.. W]0iw-+76 >&Dzs5V @  V21@ /0"&5463"3VZ||Z(55(}ZY|x5'(5 3!5353D_ #5!##걈 & #53533##׈ 5! zV '+53276=0RQi&&``01wV %3;#"'&5w&&iQR10``fSC'SjC( @V xV1@ /04&#"3267#"&54632[6'(55('6y|ZZ||ZZ|&65'(56&Z}}ZY||jT @03#Ӥ#uzLuDT/1/0#DD T#5!#뉬Jc9X#"4533273273" v aWV` v "6KKJL9HS/TB  #"'&'.#"5>32326SKOZq Mg3OINS5dJ t]F ;73 !;?<6 7=xh!5xhh5!Ĥh'`_^NO'ygfFXY @  V21@ /02#52654&#Z||Z(55(B}ZY|x5'(5[3!53[J.T!!&bc9X632#&#"#&'"#72;tv gfv ifvtR+ '7'77}`}}`}}`}}`p}`}}`}}`}}` .54675>54'&'C!RI 7!RI 0PQn +0PQn : '  fCqPfvH7FbV+I#5!#!Ֆ֖V,2!5!5!5!>>2xx3#3#@tx!#!–*>,Jf'73327673#"'&'#7&'&#"#67632Bmk  &}33[& !Bnk  &}33[& g  $%RJI g $%RJI J!%'.#"#4632326=3#"&3#3#9 $(}gV$=09" (}gT";薖Җh! 2-ev 3)dw.CJ"c( 7!#'73!'3p~(͛3#557'2d͛~~x&'&4767@*,,*@rNPPNr*,@A++{OPPN1'+Ubx050567654'&xrNPPNr@*,,*{NPPO{++A@,*.Dp pk Ppk!!p kpT!!p ଔ* '#'&'&#"#67632327673#"'&O,$e5Fqp[?9ZO,$a9Gqp[?9J7  $0GJI "7  $,KJI pn w(5!'3#7ws~~d͛tf@103AntVH@10%#AnHV #"'&=3; #V!. {q{'yOF{'y#sRf1@ D10K TKT[X@878Y3#fFR&jl@_]@_q0hf'HFyuf't#f'%}f'z'f'-(f'n2f'h66'.Fh$%j@ 1/03!!)ժh=@ B1/0KSX@Y !3f5:9+(\=;+s!2@"" "#3"10!!"3276'&' ! '&76>b܁܁:xżp[bb,j.h<@ B1/<0KSX@Y3#3#:9&+031b *@    <<1/0!!!!!!29iggqs2;3 F@B   <<1/220KSX@   Y%!!5 5!!>!8ߪp7<s'<@) !%(<<<<1@' %'/<<<<0367654'&'&'&76753#–bbʖbbWssWWssW=;;s.@ <<1/22<20!6'"'&336763#ּՂnʊnhg椌gHN&3@ &("3'1/<2220%!567654'&#"!5!&'&576! cccd?IH1/GGaʦa>”XN'/u' +1N'qu2 +1qf&>nf&PBVdf'Df&FF*&Rqy *@ ,%E+99@ ?/]q@ ) !/99@<<10@  ]@IIIJN LNIK ]@:9:88? <>]@ + +*))]@  ]@++]'&#"3273;#"'&'#"'&763 N,-=MKLyHc( #) Xn^T).^,ru7 nik%1)0T*XoW)&V!7@E F21@  90%#! !"3 5 4# yYo 0kEdZ&J:@ V`@@ 1@ /<20@ 993#&+532i^;,_1FLdVD~qu-T@(/E( Q!E. ]99@%%.99@S910&#"#"'&4767&5!232654'&'&fu5KxD7VUV[a~@Fu\0%p̥@$OF(Iqrs`g |2=@" 33'(#,34 '0E310&'&547632&'&#";#"32767#"'&546p<@ KQX@8Y1@ 20%#457654'&# !5!ʄOTJPE* :;f,KOxsPWKL,#%5,*3Y'iVd{1@  FN  F21/0@]#4&#"#367632d||BYZuccH`e22wxqu$!O@ """#E QE"2]21@?]0@ w##]!3276'&#"2#"'&76EVSI 6VQ@=񈉉d~uvn` @ F1@ /0;#"'&5c"$lYoRR`+.0`b` I@   F 21@ /<20@    <<33 ##Gb`/ZFB?= F@ 1@ /<0@  # #'&+5z~J/k`ue<2~V`wJ`B@1@ /20@ 99!367676'&'31!xdLjE.*{`T|p5dwY|rNįtkR&@@ (" %'1@ '#"'<90%#457654'&# %$47#5! $ڄOTJPE* :MKOxsPWKL,#%5,*,X$Rݿ qu{RJ`/@  1@ /220!#3267#"&5!##J117,#J%x\c`PH? XV{1@ EQ F]1067632#"&'#44&#"326=;{:+fZ#adqR{$6@ !& HE%1@% %0 !2.#"32#457654'&-ULNPƯPTJPE* >:##++LOxsPWKL,#%5,*q` 1@  QE]1@ 0"32654'&'!##"'&76sRVVOcm񈉉qnsȷzn휝dm`#@  1@ /20%;#"'&5!5!!$lYoRR\ W0`b*`+@ E F@?? ?]1@ /<0327676'&'31'"'&5R27ki;jF-*eb`+@EvfwZ{sxvpVh )=@+E(#E*<<1@ *'*<2<20"27654'&'2##"'&7673=A__UVF6˷džfB:VVMpˑRh]p[nmNssg.;Uda@    <<91@  <<90%KSX@   99  9 9Y#&+53;'$ܕ11FA3N11F~0)~pV`6@   <<1@  <2<<0&'&53367653#EkUJ|CUvܷ%aw~LB,BTxnc#n'`8@E  E1@  /<2<0 433233243! &aƏ˪ޏƛa!)R@O@+}&Fj.*&jRquf&}L*f&"R'f&VYM% 'G@)E& F(2Բ?]1@ ("((Զ?]990267656#" '&76#327>&iPDyz]6;~oxҤ]Y:PWp=l޺lǧ_ը,嶖ꀰ-ўqu$ 7@ !EE <1@  04'&#" '&4632  1BSxyJ̃Я#/p~ZZ7Ai6deBWQ I@ "!9Ĵ?@]1@ /<99@ o]0#4''&"562%62#"FR**RMw(oUCHk&_*SKHv H# 0r{C @[)/Bf'n^PWQN'u^pV'A@)   $E(<<<<1@ (  (<<<<02##"'&76327676'&#"DžǷdžǷqMTVMqqLWULc휙owgsugHgusgAm`5!#%$! 47)323764A,Ma")aM:GϤ*RѧOp[g9&'&47#"54654'&#"563277632327"'532! `7"7$>9[@[`7"7>9[&F]_I I5l|"O z:6hl0'[Ml |"Oz:6hlf$11sXD@!  ܶ0]9ܶ0]1@   <0#&'&76!   76';:{HpҳI椤qVu{ <@!E E ܲ0]9991@   <0"32654'&#&'&7632sVVUVVV9kjstntstu n}{R$ 32#457654'&# '&76)F`{[mzYTJPE* :xe+wTOxsPWKL,#%5,*eNqRQa#"32#457654'&#"476!>cccnPTJPE* 9֗h4HqrqLOxsPWKL,#%5,*>#)@VF'347632&'&#"!!#"'&'53276`1213$)),x:KAb933.1220W@Rd >Qoɏ?s K_7"'&76'&526n 'BQ_'BQ_[~,`*l#FR`*l#FR #!3&pM]rV`!#56! #'#64?!"QhRR_@0:IKiXL}/M4!wx#&'#&' #'nd2Fb.-t`4#M!P^sK='6767&'&'#"'&46733276=332764''3=D۴vayͤgDd''dey{d;]TCHI}rHGFFtAGCT_8d榈d*0QA^^^Fkmihhimw'AFU(`%!$! 4337643'676#aڏޏڇ9iŚkp[Q 5@+h@ф{I%l +?sVH32763## '&6%`nbbcDhh(J @?G6qV{ 7653##"'&54763Pr^SLTT:XYڅcнtst1Rd01ȢK% '676767654'&#"#3676L'Pe^Ґ8*7D ! ! 12԰.#AL.#^Yq4+& "H4B;;=/?"+VhPOV !! 7654'&#"#676! 3 7llc^#,V)ۄe]6?fضdVj{ # 7654'&#"#67632327\B\\TP%I/yYk}oSKu,2R¤ຐs5%! &'&#"567632 67632'&#" ;!53276n"?E! rK,/ 4'Kr !D<&tEGGH h=" C(FK#C "&E !!6{5%! &'&#"56763267632'&#";!53276[96:@%((%@:6-:IkI:8=3553gs%+$67632! '&76!2767&#"327*W8QU{2Τ|sK^lȺhiieb-sJV"1Pһ '$Astxssq[/&67632#"'&76!27674'&#"3276I,)e[xtgO_\SG]EZSTVXXTRS7xJF61𢢜Pһ ''rsstxsst,V#5!#!#!3`d`du7U#5####!3_pzpppg3#"54654'&#"563277632327#"'$47(`7"7$>9[@[`7"7>9[@[|"O z:6hl0%[Ml |"Oz:6hl0%?[MV{$4767632#"'&')! $'&  7Z6;x[Y: +STTSST$T%Уb^#10dX4tsstjtssq{FVyMsaq{!&'&#"!!32?# '&76!2%%cjf_[_fMJOhk en(' c\\c( +{!56763 !"/532767!5!&'&#"'(ne khOJMf_[_fjc% ؜c\\c Vs'& ! !###-}-!+V` !!###`{`UV{'4767632#"'&'!!#5#5'&  7Z=;{XY:eSTTSST$TfZ#10dȪpptsstjtsss'Hs'&y3s''yk&uN&uBBBB|#I#IabhFaF`C`#BC`CUXC`C85YBB#Ih;5#I@PX@855Yf4@  <1@/20%+532654&#!#!5!!!2L>o||Rh"9+Fjk&us'N@  2<1@  IIPX@8Y0! ! &! !!! 'zOFӐhgս6,XNf-T/3@   <1@  /<20!565!32#!% 4&+pٕxL@+8/Xڦ5@ 2<21@   /<2<20!!#3!332#4&+326 z6࡟9d݇,@   <1@    /<202#4&#!#!5!!||Rqf9+Fk&u3k&u#m'ru; )@   1  /<20)3!3!#++h$.@  . 21@  /04&#!!26!!2)DlN݇@%j@ 1/03!!)ժe4@ <1@  /2220%!!67!3#!#p&axު D+?x4&A((v@   <2991@B   /<<2290KSX@    <<Y@ I:I:I:I:I:I:@  <<<<33 # # # 3DDxM(?@ * %)21@  %&" )02#"$'532654&+532654&#"5>I8z,|йԳƆ\qѲ|!ĐBY+wps{M("3 y@ B  6 991/<2990KSXY" ]@068HGif  FI WX ei y   ]]#!33j+3m&u# + KT KT[KT[X@ 88Y1 Y@   2991@ B  /<290KSX@    <<Y3! # #_yT:%@   1@  /<035675!#!T>Wxfb/X++0;+s2;@ 1/<0#!#;"++3s'&7#> 1B /20KSX@   Y%+53276?3 3 OM?w.-!suٵ2&]*jklyj =@!   <<<<1@ /<2<203>54&'$%53# W==U+  -=;; )@  <1@ /2<0)3!33#;ʪ+$@  21 /20!!"&533!3_||xdv+ *@    1@ /2<<0%!3!3!3OOʪ+++o2@  <1@   /22<<0)3!3!33#OOʪ++< *@  21/0!!5!!2#4'&#!!276GN6ONDPO+DCDCF&, $@   21/04'&#!!2763!2#!ONDNONDCDCo#N@ <21@   IIPX@8Y0! 7!5!&! 56! ! 'oOzFՎaa0&8@''!&$#(  !%$'2<1/0"3276'&76! ! '&!#3~܂܀s;:ŴL椤kj@@  21@ B  /<0KSX  Y3!!" &$54$)#!:ƒdv'V+w{-{Dp7):@+E'Q! E*21@*$ *9902#"'&5476$%676"32654&}:[;z631-~LӔ{0w)v ,u8w>` /@ " F!21@  /0!2654&#32654&#%!2#!r~~hhVlj9_ZZ^SJJOgyr`F1/03!!`3k`4@  <1@  /2220%!!6765!3#!#}v[(bt:d6(U3Rq{HF`@   <2991@B   /<<2290KSX@    <<Y@ I:I:I:I:I:I:@  <<<<33 ##'# 3?nn`QO6m|(N@ &* )1@ #)) ) KQXY KQXY0#"&'532654&+532654&#"5>32|PZG]twGabLx\l%%pZXkYF@\]y` ?@B  F F 991/<2990KSX@  Y##3y`}`y&# +KTKT[KT[X@ 88Y1` Y@  F 2991@ B  /<290KSX@    <<Y33 ##Tsŷ`OQ5Ls`$@ F  1  /<0356765!#!L8D{X^~ŷoPO` M@B   F F 1/<290KSX@   Y! !### >? ˸ʹ`'P` '@  F F 221/<203!3#!#U`7qu{R`@ FF1/<0#!#`3`V{Sq{F<m` 1/20!!#!<1BB`3=V`\pVg (3B@5E)! '.E4<<<<1@,41$ 4<2<20327&#"#"323>32#"&'4&#"326/{brrb{9SS99SS9{brrb{/Ǩ<9^N5=L^^LN^Ǩ;y`[` (@ F <1 /2<0)3!33#9U`33R`;@ F21/2#I #IRX 8Y0!!"'&533!3Hf\45h)_Vu;;` )@ F  F 1 /2<<0%!3!3!3ڹ"ٹ`3+`2@  F<1@   /22<<0)3!3!33#"ٹڹ`333R>.` ,@ E  21@   /02#!!5!!!2654&q8$~͓7_ZZ^`'">`%@ E  F21 /04&#!!263!2#!z~~@9LZ^_n7q{M@ H<21@   IIPX@8Y073267!5!.#"563 !"'q2 ǚ-VړiVFHL{ :@ E  F2<1@/0"32654&632#"'##3Jq и¾.`At"`<@  21@ B  /<0KSX  Y;#" .5463!##zwwVtS^a\'qk&CZq&jBBBB|#I##Iabh#FaF`C`#BC`CUXC`C85YBB##Ih;#5##I@PX#@8#55Y/V?@N F <221@ /<20#533!!>325654&#"#߰Bvz||яLmedY).ПĞm&vq{N@ HE221@  I IPX @8Y02&#"!!327# ǟ 2ғ-{FViګVH>=o{VyLFVyML`6@!E  <1@ /<0356765!32#!!%2654&+L8DثX^x~~~ŷ7oPv_ZZ^`8@E   F2<21@    /<2<2032#!!#3!2654&+N޹"\~~`7`73_ZZ^/:@N F<221@ /<<20#533!!>32#4&#"#߰Buʸ||яLmed*m&voyk&C]=V&^` )@ F F 1  /<20)3!3!#TfUf`3s48@$%6 )  51@ $-/<2<0"'&46733276=332764''3#"'&':y{d;]TCHI}rHGFFtAGCT_8d{{ђed''deFkmihhimw'AFf^^^^'`V!2#!!5!53!4'&#!!276XNpqONDNOQQfDCDC$4&#!!2!5!3!!!2##~~EE^͓uʣ+#3376!2&'&# !!!2767# '&SvwhfstgFtsfjwvú 9$#G_//wƪ//_H$$O{#2&#"!!327# '&'##33676>\" , Ux{ z{FVAW^3VH`3ʀ !#!#!#3 73` !#####3 Ñkk`_ !#!#!#!#3!3  o_<9d7`!#####!#3!3 kÑkk`_s##767!#'&'!ʓdսxQPtՀ`>YY~b҆12z(k{`! #4'&'##767E]kKV:VS8V‰Jl&VtO\KtU'4! !#'&'##767!#3!PtՀ`ʓdսUn>qd2z Y~b_49n(.`! !#4'&'##767!#3!7kKV:VS8V‰]w&VtO\Kt`?sVszS#"&#"3276&#"#"'&54763!27654'4327654!"567376767632'&#"ssD#`At bTDt;<}J5?u_hFAXVRuťޠsj#B#' "2ZbrRUgr %',azQ^XRj7&6J- @' WoWdE\`[tO#"&#"32632&#"#"'&53!2654'&'"#5223 54'&#"5673767632&#"vmDPb!',-cX;b12i?,ZnN .rr. >._- > ^ >‘  tӪ ҫ q{&P%327654'&+"&'&'#";67>2# '&5476!36767623 !#"'&'&r-HVV?- ,4, -GVUH- ,4 .xt. 4 .wt. 4 `ta  _tp_   颈   袉   vt N#&#"56763 #5765#53#"'&'&#"0#"'&547673!27676323 4'&'39vZ^Nzz%G!ft[na`zxz{n[tfCGo~[U]LKfdKJ]U[~oFCP/L&+CYg,'ID@@DDDk63366336Fk :#&#"56763 '5765#53!"$"# 33276762324vZ^Ozz$F"vrTRrƒ>IxddyI?В/L&+CYg,'IP8[ 77 [8Gs3'cS'&sV'!# '&76!2&'&# 3!#SvwhfstkSh$#G_//ӂqV{! '&576!2&'&#";#UQQLNONPccccɖ#+qr͹rq;'''7'77'77did}}didii}}}d}}}}dBz/!"'&'&'&547676763!476767623 8  8 g    ) M #&#"56763 v][Jw}$)/K'*Ca"53#7 a#55#53gF` &3@MZg#.#"#> #.#"#> #.#"#> #.#"#> #.#"#> #.#"#> #.#"#> #.#"#> v aWV` v "8v aWV` v "v aWV` v "fv aWV` v "v aWV` v "v aWV` v " v aWV` v "v aWV` v "AKKJLQKKJLKKJLKKJLKKJL)KKJLKKJLKKJLX- #)/'7'7'7%'%53-#%5#53 3#kyo\wyo\zV\Ly[`@¬@_ӤRӤRZy\yW\zn[wyo\ԤRԤR߬@¬@Vm&uV8&!!2#!#535334'&#!!276N訨ʨONDNOQQfDCDC&E 4'&#!!276!2#!#5333>CB>ytts9L^*..+URRRя>'+#!2'674&+327'7Uj~ rGj#u~{Sqrے-,9/~V{)%'7654'& 32'#"'&'#367632*nOSTTSSTFoWl{XY::YX{ ]ststsjts].01d d01j@ 1/03!3!)2$ F1/03!3!`:33G )@  <<1/<20!!5!!!!!N)#l8U` +@  <<1@  /<20!!5!!!!!?`۪ f3@  <1@/0#!!!2+5327654&#)qmL>87||9ժFwrKK"V `3@  F<1@/0#!!3 +5327654'&#rFRRQn!&&1`GQ``07 )(33 3## # # 3׈)D"AMF`33 3###'# 3?nfz!n`QL6mu&z9u|&z3! 3## #E#A`33 3###Tw8sŷ`OL5373! ###ʭd_dTy%u`37533 ##5#`eBTse``avFOQ5a!33#! # ##53ʨ_ʨye=3!!3 ###53dTsŷ}}z}5OQ5}2 _@   2991@B   /<290KSX@    <<Y!! # #!2_=y+*` _@   2991@B   /<290KSX@    <<Y!3 ##!*8Tsŷ`OQ56@    8 22<1/<20P]3!33##!#"dA9@`1@  F   F2<21/<203!33##!#W`39L -@   8 221/<203!!!#!#)"d9` +@    F221/<203!!!#!#W`3ͪJft8@<1@ /<0#!#!!2+5327654&#;"rqmL>87||9+wrKK"V!`3@!F <1@  /<0#!#!3 +5327654'&FRRQn!&&1:`GQ``07&.s-'1?Y@ 26>6A $0,@91@ 2:0@:%$( @90%&47632327#'#$'&76!2.# 32767654'&#"Ed`_fJxuTGIRDLżSu^\yI0a++IJ++}}֝s?] bh$">7^覤.$?xEGEFyqR{ ?5@$  A2H;*E@91@7.&@%67654&#"&54763327#"'# '&76!2&'&#"3W!V0),3MNNM'8HeZ>FR5<UQQLCZIUccUTqHT*.N›WXXW,4#qrtssu''z-qu{'z ,@ @ @ <1@  /20%3##!5!!A+<m` (@   <1@ /20%3##!5!!B1BL<=V`o@  K TKT[X @8YKTX 8YI:9120@BKSXY"%#3 3;^^DNl!#!5!53 3!ssf=V` !!#5!5!53 F;^^`XXNl=;%3## # 3 3p\Y/su A{+3;y`%3## # 3 3q!r))kLHJqG%!33#!!5!!+A+B`%!33#!!5!!xZ9B1B9L|%3##!"'&533!3_qm||x˪Awr7ٟd`%3##!"'&=33!3f\45h)L _Vu;;#"'&53;333###;qm||֐wr7ٟ9d+`5333###5#"'&=3f\4+ _Vu;0$@  21 /<0!2#4&#!#z||f9dK"*I@#$ $3 +291@ $ (+<2076! !!267# '&'&=3%!&'& ":Cppoż vzKB@bHam`_F$$UgkL>D9||f{%.i@.&&K /2@ p000]91@& &"*"/o]2</]90"'&=33676!2!32767'$'&&'&#"XY`09Jt⃄ fgjdcbchneNRS]\RZF1!&łZdc4*ZZWWu'Guf{'H,(vm'[uFH'f532+5327654&#!#3!qmL>87||qwrKK"9wV`3 +5327654'&#!#33^HRRQn!&&,%wGQ``07$)`6V!#!567!3#:bCux+8.%5ժV.V+`%3##!56765!s{{v^̳;bVdžf;1@ 82<1@  /20%!#3!3+53276q"L>87h_9dKKV`/@ F F2<1@  /<0!#3!3+53276WRQn!&`3``07V!#!#3!33#;"9dժVV@`!#!#3!33#W{`39V%!"'&533!3##_qm||xɪwr7ٟd+`%!"'&=33!3##Hf\45h)p_Vu;;V%3####! !+-}-VV`%3####! !H{˸ʲ>?V'P`yOh'J+1@oo]0{-&O"+1hN&u  +@ 0?  ]1{-&jR -( +@(o(P-_(@-O(0-?(-( ]1H{o{m'u@@]1qH'@p]1uQq{uN' ucq&jTd(vN'QuF'jN'u&j:yXL/`T31'q;y'q3N'uy'jsN&'u +@ @O]1qu&js +@ @O0?]1saqu{7sN&s'uqu&tjso#N'guq&j#1'qr;=V&q^#N'ru=V&j^#k'ru=Vf&^N'u&j^j #@   <1/03!!3#)ժA` #@  F <1/03!!3#`LFN&u&jGV9@  <<<1@ /<20!!5!!!!!!+53265N)#iGRiL`na8VU`;@  <<1@ /<<0!!5!!!!!!+53265?`nFRjK۪`na=f+%+532767 # 3 3*SfL>7( ^Y/su bzK5sx+3;Vd` +527>5 # 3 dkkCQO5r))`&9as mHJq=;3 3!!# #!5!suNt\Y+wD{;y` 3 3!!# #!5)) ~q4H &@  21@   /03!!"!"$54$3!fONDNONNCD#CD+fq` %@ F E21  /03!!"!"'&763!5>BC>9sttyLZ+.i.*RRPRUC 09@2&)  1291@"-(1220!"32765#"'&54$3!3327653#"'&NOO_KV! 3j^nN?4pi;?nhf1CDP_m}`61f[JJOZxx9qs` 08@2F&) E1291@" 1-(1220!"32765#"'&54763!3327653#"'&=C>A@j\-1C]^fety>dhd.*^\:9m4l01a`RUaPOORAsxx%74'&+5327654'&#"567632327653#"'&'&\]OOQRSrsdeY憆GGRQ?4pi;?nhf0!JK;$& hi|UV!bb[JJOZxx8PaF|54'&+5327654'&#"5>32327653#"'&NHtCDFEwGQPabLqr<=ih<>dhpb8f83,-F@.. NO]@AHOHXDEORAsxueV<)!#4'&+5327654'&#"5676323#s\]OOQRSrsdeY憆GGRQJK;$& hi|UV!baV|)%3##4'&+5327654'&#"5>32ȻNHtCDFEwGQPabLqr<dhpb{v^̳;b`WORAsxue{-`327653#"'&=!#3!zgh<>dhpbW`WORAsxue{`3s0@  1@ 0# '&76! &! !2653d-|e'%{9!Ҏ׿qF{0@ E E1@ 076!2&#"3253# '&q кĽbZZb/n||r|r|>禞f327653#"'&5!5!?4oi;?nhin+[JJOZxx}q`327653#"'&5!5!x>=ih<>dhpbB1VFEORAsxue{~{R|BTf:!56765!+532765pfb:WxM?77+80dKLLVs`!56765!+532765{X^̻3DF1a.&oP}з0) F@   8A!p] 991@  /2  9033265332#54&+! '&ˮ® ,gQ]*-呐u\GCF1l[R.$)K@  8Ap]2<991@  /Ĵ`]0 ]376! #54&#"!2#54&#!$ˮîXgQ$9 𝶫F1l[%D@   8!&p]<2991@    /<<0O']32#54&+#!"'&54! 4&#"3)GgQG*ɟn(!ˮî5ZrF1l[=ó|#ӢI|H@   8Ap] 91@   /90O ]32#54&+#4&#"#576! YgQGˮîːZ`F1l[O 9$\)$30!2#54'&#!3276=3! '&X_`07QWWWWˑ呐1[[F1l*1jiij 9㒕$2%!67#"'&543 2#54'&#!3 7654'& f<0I|q4_`07Q5˧OPPOOPP'.ƪV][[F1l*1LL]]]^^]])D@8 :  2]99991@  /0%!2#54&#!3!2#54&#!}gQXgQF1l[F1l[)@@  8Ap]<991@  /0]376! #54&#"!2#54&#(ˮìXgQ$9 $F1l[-:#'&'&763!&'&#"#76! 32#54'&!#"327654:gimINK(*WWWː\!%_`05л9:E5:. rs TfLQR2jjiu$[[[F1j,1i--Q@+#! '&4763!332#54'&)"32765pG혐nG_`07TZ5WWWWܕ.|n[[F1l*1}Hijji):@ 8Ap]21@ /09]363 #54&#"#ˠ(ˮ;dK2V 3@ : ]991@ /0@0P]!2#54&#!}gQڶF1l[327653#"'&!#3|%3x*%qXdq`>WWK7}bbpiOA$3! '&7#'&=33!2#54'&#%" 76'&ɼżg``07Q_`07Q|y&bc\[F1l*1[[F1l*1 椤)!## '&33276=3)ˠ혐WWYWd+&jiih) !2#54'&#!5 uw _`07Q1k,[[F1l*1f'1?%#"'&543267#"'&543 327%&#"32 7654'& oUIeβr0I|q9I9~dX/? 9.YOPPOOPP@$2iw'.ƪdkWM( ]]]^^]]?@  8Ap]1@    /90O]%32#54&#!4&#"#576! )GgQìː!F1l[ 9$\,3276=4'&#!#5354763!!"!2#5# '&WWYW07Q `_# Q70X_`ˠ璐ijjgl*1[[1*k[[Fd%!! '&332765!2#54'&#)呐WWWW_`07Q& ܕ$ujiij[[F1l*1S" $53 6&#!5!2654& #4$ 5JRS覥A ++.WHNMItYa[J\n@@  81@   9/0326=3! #"&=33®ìGœgQm 9-!F2lZ) 3276=3! '&576%7%5zZ[WWˑz=s9W/hiik 9ψ&dAU)7@  8Ap]1@   /<90]376! #4&#"!ˮî$\uB)4'&#"#576! %5%$76aZ[îː 1y=\gW/ίgj 92dAU##576! #4'&ˈKuˮ9)uBGlP| 9\̍P0%&'&43 2#54'&#!3!767654'&'& Eq4_`07Q5e, 7OOPܪƪV][[F1l*1L,@B@^^]t~H@   8Ap] 91@   /<90O ]32#54&+#4&#"#76! YgQGˮîːZ`F1l[Ou$\)8!!# '&5332765332#54'&#^혐WWYWG_`07Qd)jiih [[F1l*16).@  8Ap]1@ /0]376! #54&#"(ˮî$9 uS0@ '&53 7654'&#""#6767&'&5476! "327654'&RQJRSSSSRefg#RHJIIPacIJIJcaW"ccttstNMMNMMM *c" Y[`XX^[Y01YtAAAAtY10 =@ 8  Ap]21@  /0 9]54&#"#363 3^ˠu2;dss3\,<47632#"'!2#54'&#!##"'&=337654'&В􄑑I_`07Q _`07Q*]WW]_WW_rsppzzpS[[F1l*1=[[F1l*1A>T]=BD=[V>Cs2167654'&4'"!"'&'5&'&547632qG^CC95+<&0kljxw{vEB[eK[ 4D~n>=>@%c3A +mlpp/E# ,,W`aru~^#33vx%"#476327653[RBhj[RBhjTDDjlTDDjl}fC^7#47! !"33254'&'#" q3U7a\ "9S A5z\&NZ%03!Z}4bb&^@PP F'<91@  #/<<<290@0(P(p((((((( ]%#"&5332765332653#5#"'&E``ruSSrw?XXyzVU|:<b`^zbzh02>>Vd{?@    N  F22<1/90`]54&#"!!#3>32||Buܟ6V edqV{ <@" GE!<221@  !032654&#"##"3253!!/+:||:Z/\RdaDDadOV{=@ N  F2<1@   /<  90!#4&#"#3>32!d||BuZVH`ed X?@ NF2<21/90`]3!!3276=3#5#"'&>>|TVCuddZL PO_bvfcxxqV/{<@ G E221@ 03!#"325332654&#"Zs:||:էRdaDDad,@ F<1@  /0)3!!32#54'&S[zM`01LI[F1i&&Vd{>@   N  F2<1/90`]!4&#"!!3>32||VBu ed\V6{ )u@ +G  F*2ij$!!$ISX $<323#'&5476#"3276#§:{5`4xBdBJ4/' daZ+h|{Nvqq<q/ 4@ ! GE <21@  <<0!"32765#"4763!33ƈbOMSK}<zaksC+D߫LVd5@  N  F21/90`]#4&#"#3>32d||Bu\edV` @F1@0!!3y^ VI@  NF221@  /< 90@]32653#5#"&5!#3||Cu`a{fcLq0\@ 2 $G,E1Ĵ,1@ 011(1<<0!""<<!<<#"327676''&5476;#&!!'&'&4763[AS].SD81N/Vɮ!qZsIR\++(VL-%)$?뮘VX:@     NF2190`]332653##"&||CuZ{VfcdKqZ 4e@ GE5<@ (''*%%*39/ 91@. '/ 90@ `6666]32654&#"#5#"325&+"'&5473;2/nD:|WCv>!%7)/kPըdaDE<6pG5P0,!K7V9{;@ N  F21@   /  90!4&#"#3>329s||BuH`edTX-b@ (N  F.<<2 -9   /1@%/<<! (90#5#"'&=47#5367$732%326=4'&#XCubdzzp>BiO>AycW fcx{Iʪ`&$%8vJMO;) +?@-% $NF,21@ &$&)$/90332654'&/&7676;#"#5#"&|| M.=<(`Cua p0.- */(fcVy`2Z#G@%  N!$21@  !   /<90;32653#5#"&5#"'&5476;#"||Cu;^PZl}YYa{fc^PzKWV{!<@ #E F"<2<1@ ""0!  3!!"'&547654'&#"#4632/Q@'$C#@l;qsDE E+G56dZY0Y^cԫeed{QFV;`%X@##'  &9/1@#&&990%   ! 3!!"'&547676/&5476;#&(3W:'$F[L2se`6g+! E/>A/(32||BuƯ`ed X`XV-=@    NF21@   903326533!#"&||sCua/Vfc{%i@  PPF&<<1@ "  /<<9  90@0'P'p''''''' ]3>32#4&#"#5#"&533276BYƸ||zUVCdȸ||XW{ed\_`fca_\Vd{7@  N  F21/90`]#4&#"#3>32d||Bu\ edqVZ{J`@F1@/0%!!3y&"`V%k@  PPF&<<1@ "  /9  90@0'P'p''''''' ]3>32#4&#"##"&533276BYƸ||vYVCdȸ||XW/ed\_\Vfca_\V{$U@&E  G/<2221@"%%<<IPX32#"&'!!#54&#"326չ:{{:+Īdaad)qu{RzV*"-6u@83 .# *E7<<<<<1@&7/  "7<2#99#93.  90#,<<. #"'&'53&'&547632##4#"27654'&,Dd%Kcfep_{5S#al~EU@<%I]7_E8BQ-a`ta2N-bliZn!vFDs:#+IJ>8@    NF21@   /90332653!!5#"&||^CuZ{OfcR@<21@//073#3#R` 27#"'&'3U oo,rrONcAUUWDC <21I:03#3#D-dC'KRX@8<1YC %  <<1@  <5G.i=dB]Gg`":T)yX`!  1  /204&#!5!23!5!&nZͦy–1CZ`G 1B /<0KSX@      Y4&+532##n̒[^ޕ<S"Xh`$1/20@]1#!5!t/яd`4@ FN F<1 /<0@ @P`p]!#3#4&#!5!2snvy–t`FF1/0]!#3t`X` #  1/20@ ]5!"#7XNrXGяy Kd` (@ F N F1 /<0@]!#4&#!#!2dny–/``*@ E F1@  <0332654&+532! w`ҏ/t`FF10]#3tXV` , FN 1 0@  ]#4&#!5!2nV#–X` @ EN <1 /035!26&#!5! #Xt뒦X&@ F N1 /04=!3!#T[CLzld` )@ F N F1 /0@]3!2%!4&#!6n`–X`^@ F E991@  /<990BKSX@     99Y"#673632!5!4&WWHFdaxѧȠ˨Vt`FF10]#3tV X` %F  1 /0@]4&+532!5!ny–X(` *@ E 1@  20#5! !"264&+" я0D_ЍNO`U@ F 991B/2990KSX@  9999Y%67676535673VGu",:pΈLƒ4U}*p>1=!"$Vd`1@ FN F1@ 0@]#4&#!;#"&5!2dn\pTQV#–U;zdd`,@ E N F<1@  /0! )5!2676&+;#"&5*4{\Lwuq`U;zCVp`D@ F  91@ B 290KSX@  Y#3>=3#q_V`}՛C!`J@ F  991B /<0KSX@      <=3!5!CcMgXC"`ԛ:V`,@F F<1 /0!#76654&#!5!2#3l)WzB'*˺u,/HVv.4X` ) FN 1/0@  ]!#4&#!5!2ny–`/@F F21@   /<<033$763 76763) :0nLaT`Sl+7`+@ F 1@  /<20!#4&#!+53265#5!2ndDrL~y–a; `' `' `'`@ D103#`n`@DD1<203#3#`|!#53ӤR@ 327654'&+5336767N5G4pQf$h?FA@6b ! eI(R[2* #53 3#ӤR%@-$%#5754&'./.54632.#"'/XZH߸g^aOl39ZZ8{4<5/VVL89CFnY1^5YVeU"756767&'&54767632&767/SD435gcbnZdF31`9:H:ZU!LOTAKv?=0ps2#Ql '^5']>Ry3#&n9&P &n&n (f&; (f$3  !27# '&5767"$JKԖ^`e~h'?6`vc–e4- (&;?}R%67654'&'3#"'532# b&?q  ?%#&'$473327676'&/3327653323#"'&'TPxmil_Qb_y^@@$;sR,%@n\Kf% I01_2F,k>GHܳ&%0l}=J"5^.327654'&'&#"&#4763&547632#bzL,5;(.;Dn2KxAZM\MObxX'*9:X DD(NOf7*(?$S-8APH&? "327654'&'2#"'&5476B!799[]KB{ƶ`Q%T*WE{R,,9.UMAx|KU#JN @ &"34'&!5 767"'&'&547632?,3/V%._]g>v-(tYhYH9!$3/,;̠X*VL_ !"bWg3ZfJ6%#"'$47376767654'&'&'&'4762#&'&'&VfxH?Ba=~T;~BrC:@_` B(EN><}9M I&huqc- !P85J.39sJ%*==!'&"7*S@UYD J&R $5%5%HHnnnn$&567&'&54763233"/#"'&5332767654&#" %!lE?I(7 /4KU^r8Z #08 " -d$* 9^W4'6O'&n=NV)qaK" %$5%%5%HHnnnnn$5%Hnn$-&'&5476323"'&'#5276767654&#") lE?I(7$# +EȓV " - 8_W4'6O -n=*{nmp" %$5%Hnn8(#"'&54737676533254'3'&!9EO)"a 2=`YG g -SGL(E?4mmb}8T"RY$6îs9It6Y ! 4&#"32>"&462X@AWWA@Xz柟?XW@AWX栠h732767#"'&'gC*6:)kXZZC5"LMD6{S )L}@FOwpO p 4373ËF3# !#'3%1yI !nR#'337673#" %1BR{6)coajr!nUPymL%#'37676537653#"' %1/(/H/; 'G 44.5WY9!nr|> @2%,*;l>3  *"2767#"'&54767&'&'&76#zf\MOYp0;JcX~VI|eepdkAXH,7p 4C@#90L@rRiUZhsBBsǮuu5aU#'#"'532N%bU`DK*22<!&'3673b~ĚZ00ZĥxU:Ũ ;6I<3#&'#6̴UxĚZ00Z~bI6; :d#"'&'&547632#54'&#"=:i_{\ %Z[,,G\O98<SGU37e{a}UwnWl42@B^!x$%-`+-!d! M fM&n,&n9 &n9 &n'&n &n&n &n (&;]8 (&;? (f&; (f&; (&; (f&; (f&; /',>? r'_>? &'_? &? :654'&32! '$&73! 76767#"'&54767632)B,4((7(*Hnق@AZAd#?zKbNLZB`.+M;3*)3P&ڴF=)d \^tL"9;l&NKCW4,E$2Hf6&x~&xx)-%2767654'&54767#"'$473$62 #dGf>5?AhXPA7.EB|=Q#!w*6(  %{{qeVUI&b \^~B")+&&M_H#"'$47332767654'3HdnaPm/1]]LGL"fh8D%jdQ45b`ޜ ('&;? @r'_>QJRr&R_>P`aRbLcR%'&547632&767#"'#'3X\lTX\D8/0E= %1Bx:=$!"4'Qjr!n8j$(327654'&#"327#"'&5732#"-2!WZWXZV%2-Z(.5__52ZJkV0B7,g`p5oU%mao3/AbM3))I<g<hdi (@  1@  0"32$  h P3343ssyzZ (@  1@  /20%!5!3%=Je+HH=  21 /203!#3ulh=   221 /0)5!!5!3=lȪ=   21/0%!!!3!l =21 /0!#3!=l*=1/0!#!3!=lcr8A'91/0#3ASuNA (  < /<10%!3!#N{ 2@ EEܲ@]91@   /<02>4."#&'.4>329[ZZ_PGr䆇䄄rEMp`77`p_88 1ŧbbŧ1 y@ 1/03#+q!/@ E  EԶ 0 ]1@  0 6&    z>z='+@  2291@ /2903#36Q*=q33# =qCq @ 1/<0)3!39Uq"q @ <1/0!5!!59qKqO!%!!5!&'.4> 2>4.":RJr 惃sKRQ[ZZ{ 1ũbbŨ1 p`88`p`88 %@    21 /03"3#!5!p9 fq2@ E<21@  /<20!#!##"&6 54'&"3qvCf^]8mr^:<UfɃ]8ƃD '@   <<1@  /0#!!!y5!Փ/= '@   <<1@  /03!!!}5!Փ/ %@ <1 /0!!27654'&'2#!3,R4,,=iXXXlι]Oz}I__ҭ$;@   ܲ_]9@   /999@ 10#4'&'5!4B 5McAq_9V= 491@ /̲]촍]0 53#T9+!-@ #"1@  !/203432>324&#"!4&#"!}x5%^ZHZlK--Xh&|ŕnc= &@   <<1  /<<0!5!3!!#KK?=9@  <<<<1@    /<<<<<<0!!5!3!3!!#!KøL=??q!@ 1/0!!9UqqK=! #tFC00B~+n 4@ <<1@    /<20327654'&+!!2/!!m]%i ;@ED\TqQE=4."XErrJSRJrCEoJ[ZZO{ 2Ʀ1 { 1SV/p_88_p`88} @ 1/0#!#}+B} #@   <1/0#!#3}Om +@   <<1@   /0!%!!5!!z;  TKѓ+qO $2>4."%#&'.4767673 [ZZTXErrJSRJrCEoJR"p_88_p`88 2Ʀ1 { 1SV/ qO(#&'.4767675!5!!2>4."XErrJSRJrCEoJRNQ[ZZP 2Ʀ1 { 1SV/ p_88_p`88b/1/0!!VBf#"&/#332?E=9Qct2 %xf" %/x $Dp/1/03#=f3#'#f[f!5'3{Bf3326?3#'#"&'Bx% 2tcQ9=Ef$ /% "[f5%3%[{fS/1/03#̭F'/1/<<03#%3#\yu  <1/0#527#53gu  <1/03"3#  gd 1/03#!!Mdd '@  <<1@ /03#3#!!Mޒ1/0'!! '(033!!3'#67654'&67654&udruxtNMddx>DD>xIIv! RTxXY`aw,0dc1-!:;z{t{*L@$% E+<<<<@!#91@$+<@ (+0%"3254"3254#"54!#"543263 #4#"h??AA??A'+,LW@@@@@@@@pطQQ9/@@1(. #E0<<1@!0%* 00"3254"54$3  !2632&#"# 54-654!"`@@@CvBըiUv˫:knL?o@@@@N;Ejfae:.88U8327&'"254"%47&5476! #4'&# 63 #"'632# i60IKhh*)7!o^RX;*:9u`/'"6OfqAtqLI $\9.ȶlQ!6@   E"1@"  "0463 #"&'7325#'&&7'6met "xCBCquЍ h! ACBB )2@  #&E*<1@  *%/0"32654& 4''&5432#5476$ % U%|{e6Lj` %"%:yx~)RhKK>  65@$- 3 (E7<<<1@ 5/7&7"32654&4763  !27632! 54-654!"#"`$ % 琺By#xJi:OknLIo %"%0yKpjNdfDQcwiC|85sr *;@&%   E+<1@")+&+02654&'&47&7'73%$$!% l݁6ZA| $! $Vm-G4 p?{1@ F1@ <@0%"32544!  #"54$32@@@)@@@@Pvv .<@- " 'E/<1@ $/-)/<20%"32654&672#4#"#"'&#" #"53232l$ % L 7*>(z*M#6&8"$ %"%3|0ۯqiPWu|+?@-$'+ ,<1@ )!,&,<0%"3254"3254 #"5#&767663 #4!" @@@@@@!Ӣ7y-^@@@@@@@@edm%W ,9@. $  )E-<1@ '-+"<0"32654&4323254#4#"%$7"@$ % 쐋'(uj %"%@կ̰Xsgh\_"9@ $ E#1@# #<0254#"53265$54767653!"'#W@@>z]U]iTrs@@@@pegu/ssHs|2@  E<1@  0"325447&763! 3%$5@@@ԶMg@@@@R&Ѩ'LBHs2@  E<1@  0"325447&76! 3%$5@@@ԶMg@@@@<%Ҩ'hBY E"32654&!"32654&&''"&5623253765$7465&'7$ % $ % Kfg饤IJ %"% %"%IKbv4ˋ42@7-]fn9h%A@'$ F&1@&<<@" &0!"'# 432!32533253"3254hfg襤>@@@ JJ=|\@@@@@h} -?@, (,$ E.<1@"&. .<<0"32654&2533253!"'# 47&5432d$ % AfgB %"%4˩/JJ=%܉Mh -?@, (,$ E.<1@"&. .<<0"32654&2533253!"'# 47&5432d$ % AfgB %"%4˩JJ=%܋L@`$@1@  <<03!23! '#"543225O)3Ɯ)`,88{r *;@&%   E+<1@")+&+02654&'&47&7'73%$$!% l݁6ZA| $! $Vm-G4 p& ,7@  '#E-<1@+.%.0"32654&4! ! &# ! ! '&54323 c$ $ 6buUKX $ $8${nE{N%O 0@@2, %&E1<1@%/1!*<0%"32654&&'&'&5! 765! '676%&4% $  ,D )@ ' 1#-E5<<1@ )6/%!60"32654& 4%$54!232#"'&#"! '&5432h$ % ${ajjh@MqKy)LJm_ %"%1EYl0xP^b8Rsu_|]F'"2''&'$!32'&547"32?6AS2;9’hhNU~ +;9jq!Ban'u_ +@   /991@ /0! &7623$'4'74"Y#!A[VB8?<kP$U.FM?>={{+@  E1@   <0 ##"2#"53254#"n=;C>@{jVR777r&@ji  /1  /<20! ! !5 74! %&?%~?>~@i$@  /1 /<220! ! 3!5 76! %&>%~?>wJ~~@ji*@   /1@   /<20! ! !5 74! #5%&?%~?>~N@i.@  /1@  /<220! ! 3!5 76! #5%&>%~?>wJ~~T3"36654'#"5432AA\(DeN[̼o[$N[u%@ /1@ /0"3254"547&54323253r>Juum@s> [yu?{EBXF_ '656%"'&76! 4"3YVA!. {x9322674&#"CCjFPH OQ$!%!p'(FnJv-O!3] $ $z{&01, ("32654&&3 #"4/&5432N$ % s $ˌeqɘzm %"%82y,v\#"6@ E#@! 1@ ##04$54%&&5! $#"57"3254ix@@@X4|`Pٳ ?@@@@ ""32654&5&'7!$#"47#$ % dt.; %"%Ȉ_p 8>u%t/;4#"#"'&#"$#&532327632! '&57"32654&"3C2z7J,"/IN\=0BWTO3H$ % Xt\DD\t] 5<\UCfwpv  gH %"%V@/1/03#V~!'@ /1@  /<0'6"%)56574 65+*+UGm++),}݅.p\(>.4"!27676327673!#5654#"'&'&#";&543.%2~*&IHHܝBOg(LBC]i%>e>.`h>3A?~= h\$kb8:;-F_Zkf2)N !@ /<<1@ /<<053533##5N؎؎؎ P>r@ /1@ /0432#"73254#"ЄLTPPHHH` " 7654&' ! '&476^L:NbX1coqoh`WĒcg&24764'&#"676'&'&5476  pHgc/5pIu upHECle\gUܚsuϨcy\$24"27#&5432# '&5?$5+r%3]f́|pHFPfouTapH/%24'$5432327#"'&#"%$'#"54322533]L/|tkZ1AQf(3Ɯ)DjR:jTh8KOpt$68{cW%24"$'&5?$532&'&32!r|T9lc ~x?LvTamY<KcW-224"7&5&326532&'&32$'&324!B}b$|T9lc ~xr=Ch(筭 ?fXmY<KLvttY4@'&''"&54323253765'$543227#"$#""32654&fg饤u ^|uISL\>$ % ,IKbv4ˋjEaTW8ҋ %"%{ &%"324"324#"54!#"543263 #4#"h??AA??A'+,LWpطQQ%Rpt MU"32654&254"#&76767%4#"#"'&#"$#&3232763276'767$ % nnvp+-"2D2z7J,"0IN\=0J%.3?5xv'Q %"%933hk//3wt\DD\t 5<\UCrTF-2bG;"b,i $5354#" #"524"m~ŶejsX\|9~ LX"327$"3273253!"''&76324%$7&76%$5#0#&76262654&'&A?A?fxԅ$8$+Rb,7Hu Ӣ5r$!% @@@@@@@mӔJce$3- /ԋu cd $! $~ I"327$"3273653%"'%5254%$7&76%$5#0#&7626A?A? Tcb*@RX6&$Hu Ӣ5r@@@@@@@mo6J,/7'- /ԋu cdPi.".54>7!5!!"32>54&'7i7eȬd7&KlGqǔVXxyӚYlūc66clJ7^sz֟\[{6yEr2b\TZ@#!#".54>7332>53!w!KNM#hN&?Q*nq-Nj=8kT3$ KfWxc*s@nQ/+Lk?Z 5!4.#".54>2!/A%'B/+(=B=if:y'D33D( R0oCEOc88cO'MP.4.#"32>7#".54>7!5!!"@YmEgLLfjJkoX؁q؝XGxdI(YjiMKkii۫uuZ8!4.#".54>32i+Kg<>lP-7:p0M6NifL>@kK*0Rp?>?1ill3eMF}gZ,#!#4.#".54>32!|/@%&@0&%BE;hRPg;(C03F(#P/MCOe96`PFZ(4.#"32>7".5!5!>32&/Oj=kOOδMEHHjMoP.)NpF@pR00RfLLfan0/IP- %#"3!!"$&546$3!!J׉@@ט`a( ]wxԟ\Fww2P:G!!3!n!.x1Z+(4.#"32>#".53>32`+Li=?jM*,Ni=>hL+iJEMfLK{W06\xCKxT.4XwA_bKr62NpZ+4.#"32>#".5##!>32*+Lk?AlM+/Pj<@jM*KihNIHk?pR0,PpEBnO--OnβKKgcBvj12KZ+"32>5!#".54>3!!5!!Q@lO--Ol@>iL+MghONiL.QoA@nQ//Qn@/eMMehJ{PS$!4.#"#4>3!!"632,Mh<>e-PKhr>iM,fL?nR0*'R} gM1Tr@aKfPc K4.#"32>2>73#".5#".54>2*LjOwϙYVz|՚X0/':Yr?DsU0 E nǬc67dȭe7><qU'!RkL)[z{֝[W.>#K]59_|D 6clkǬd77dk{Z'kE"1%P#".5!5!2>53KeiL*-Nj|fH'eMOfXAqT12Vq>P&!#"&'.5467!5!32>534JEp=AB7D4+! )#$+e;:iP/05IGHeLJ )RpEn),/,Nj=Z""!#".54672>53!`NgiMNL6--Nk|jN,+eMKgV[@n6@nQ//Qn@]S#".5332>54&'7SLfiJ,Mi>=iL+>5{-H3eMKg@nQ//Qn@6|>/dfdS 4.#!!2>7##!!!2/Oj;;jO/JGHܓ.gM@qR0,Nl?dEHCMPbF4.#"32>5>54.#"#".4>32YywКYXxԗR6aO"?/$/ .@KZj>mȬd78ekoɭc5[])D0z֞[[z{֞[WwAoV5'//!6cǫc66clv?GOPb 14.+32>#";+##".4>3!2>mTEETmFUl>>lUFk\܀EFޥ^^ހWܢ\YqA@n@oWVn?~ٟ[][ڟ[]F!#!3!3!3FS!4.#"#4>32/Oj;53`EIgJ,Mg<:iO/02Kf>mQ0,Mi=nB-#".'332>=#".533267653BLi`R0Lc8;jO/FIiJ,Ni=:c'YgKSkFzZ40Sm>1/Jg@mQ.+(P|S!4.#"#3632+Kh<7g4QɑeL|?nR0++N|uaKfPk*!5#".54>32.#"32673YUlǬd77dlps[.\YS$wЛYXy^Pr2@6clkƫc6JH,Z՞Z;;xXZ)"32>5!#".54>3!3!Q@mO--Om@>iL+MgiNNi.QoA@nQ//Qn@/eMMehJ35S !4.#!!2>7#!!#!#!2 )4)2VsA4(AsV2*=&$;,S~U+ 9/XZ.?#".'332>54.'.'.54>32#6.#".KfbT1Ng:jN-VU^]4R8eMRlHzY3/Qn@72*63UeMTkH|Z4/Rn@)D BFRZS#"'!!332>53SLf,Ni=53 KihN/Pj732>54.'.54>32#.#"]~|ۤ_-H3K7>kTSj==jS8mV4/Rn@8gQ6';#w٥aL~מY[{:omn:vQNVl=53 ,T,Pf:l #D;%?.a=4.#"32>7+!!#".4>;5!5!54>2-  -)//?%&@.%?/:fPW2WvCDwX22XwDp=  @xY9lY|PW!%! %674#"&5! % %1,lշ._z+,S.+RLo ۤTn8d`'675$!2363 ! ##&!"#"32CxuM6sc*rE) PlaؕyZdX!&732#"&5 ][*8F e]N/I3^@[7rr2dX'!&732=6+537#&5! nN ggGVzkB3L.ķ@JKW~Xq\,d!$75&7! &324'"6Z^,CH!IJ:QU,X\$d56#"! !2363#"32UTcD>0R^<]td'6#"$! +.!TueudY! 473254+5365!5 Wb 퇇2mNEIJ(bC+d`3675$%2363363 565&#'#"#'#&#4%"fDjPQUOR Tg@! 5y<O-6d! !234#"#!#"2mLC{%  }>e~! )!363#"7Y`PlB   ry_d56#"#'#"$!2363 H LDVza!t#rd!! 4732+53274'$53X`4"gzҶ/c7Qib6ȕ!6G))=HdY2! 3325 '%5%Uc| CGko 4Y_nd9$5$#"#'#"$%7367 > B)oQT7-ngDP5kn1w5! 3324&547cTɜW\wؠ?c-'9dY: %3! ! %#d6*Q&q)QGFޕd$! %35#$ 3#3%#" 5;54 X`dHrrr44OfkQؔcdX2&!"'#!525#"3$%2363 #"321ZG\KVOvBppdY_!! %$54#"'! ! 4'7_GD `U6I@bYsrg8A:ԃM){6\lY(3324'7%#"'#723! ߫fB߻cV̿0?7YpdW $!6=3! 47$$5! eڞòkHuLL8TWJ&)*d54&#"'675&%'%"t_CCt?h]|KytJfqI8=ۣ&*d2 3#3#3#dѺ/㰽d 2"4;%"4#"32;ѹF|pux$LRQ´h=@ B1/0KSX@Y %##.d+hK'Egh"hO'tg@1B/990KSX@Y sNO')tiN')ui'eiw^?1B/990KSX@Y 5](&xyw^O'1tm'e56'e&g56'gO'h56O&hE'iE'iEO'jEO&jO'0j'mwE&mO'nwEO&nw^O'?0n 3#!38Ygg`nC^^n7]^7nn7]]0d"&533265453zWA@XzCss!AWX@+!U#454&#"#462zX@AWzB+@XWA!s0U!5!2654&#!5!2@XX@s0{X@?X{0U 4&#"32>"&4623X@AWWA@Xz柟C?XW@AWX栠H> %'111 ]]1<203!3CC~K3#K!5!${1V #5#53533zz{{1##5!z$ %{{:'Ue'g"'=iwq'mh9hK'Eh)hO'tw^:<1B/0KSX@Y7 5wM40w^O')tw^N')uw^'w^:21B/0KSX@Y%5^xyw^O'1t'56&9'56&O'56O&'wE&O'wEO&O'wE&O'wEO&w^N'1u<291B0KSX@}}}}Y5`sbbs]103C)8)K'E)*@ 8AKTX8Y1  /<03! #4&#"!!ˮî$*\u)O'tw^ 2 <1 /07! )5! )w5BhPa.,~w^O'tw^N'uw^'y` 2<1 /0%! )! !`aPhB5jiy`O'"t&''&O'O&'w'(O'wO&('y'(O'yO&('$ ~21@  0# $54$!3#"3nn͙ nn{'|'|w}'dy'F> %@ 21@  /90"32654&"$54$32#Bz_̀#R3IK'E %@  21@  /90"32654&#4$32#&f̲_ȭT#R3{O'tF> (@  21@  90%2654&#"3#"$54$3Bf̲_ȭ벃F>O'tFN'u (@  21@  90%2654&#"672#"$53z_̀ʃIO'5t'F'?'~'|?O&~O&|'F&O'FO&?'~&|?O'~O&|?&$~  $~ ]21@ 02654&#"632#"&53XP^J\TaaQ_VFTHUGQK})~J8 2654&#"03#"&54632xOaT\J^P_KQGUHTFV}i~F'x'F'x'F> 1 /0#4$32#4&#"#fK'E 1 /04&#"#4$32f#O'tF> 1 032653#"$5fF>O'tFN'u 1 03#"$53326f餗O'5t'F&?'~&|?O'~O&|'F&O'FO&?'~&|?O'~O&|?&$~ ] ]1 03#"&53326yaO\T~JPML 32653#"&5T\OaQLMPJ~w:1/0!#!5!)+jK'Ej@ :1/03!!)ժjO'tw:1/0!5!_++wO'twN'uj/jO'5t 5&w'&'O'O&5'w&6O'wO&' & O' O& &$ ]10!!3 nC ~21@  0! $54$)!"3͙ nn{3!5 nw} (@  91@  20"32654&'2#"$547!5__ȘLӦnjFY 'iFY} )@  91@  20"32654&'!!#"$54$C`^ȋMӑnj 'i<w "@  91 /20%2654&#"!5!&54$32__ȋfLnjw'<!w'<!FY #@  91 /20%2654&#""$54$32!C^`șMgnjFY'T<$H}'w}';3'$FY'y$3'%FY&%yFY'T<$\ 2654&#""&546 !j>_IEcI_(0MJBSKFXCIn~|Q;n."&5332653ܨabaaJPMMPJ\ 2654&#"0!5!&546 _IcEI_>jm0(MICXFKSBJnn;Q|~w 1 /0%2654&#!5!2#bŘ쥒FY '2FY 1 /0%"$54$3!!"Cꏙƥ᪑FY'<2w  1 /052#!5!2654&᪑w'<4w'<4FY 1 /0"3!!"$54$3CbƙFY'<7H'0w&0;3'2F&213'3F&31H'4w&4;H'5w&5;3'7F&713'8F&81\"3!!"&5463RiPYnvDZHCn~}w^ %5-5 ^j22F  ? 1 /0!3#$53TCc Xon2K' EK @ ? 1 /053#3  cCT-ncCO' tKF   ? 1 /0%#5%3# c--noXF O'tMFN'uM @  ? 1 /0%!#3#c-gCcnO'3tP'IF'I'K'KO'LO&L'MF&MO'NFO&N'P&PO'QO&Q&$P  ] ] 1  04&+3#XHǜV+.#"#"&'532654'&/&'&54632Cw7Bh#-8GC>=JGBAm'./G?;=~ÇH)@@V\`RʺªV\`RʺªhZ·%XhZ·Fl632#4&#"#"&3326tҪºR`\VҪºR`\VX%Zh۷ZhFlO'teF'32654 !"/.#"3"54!2!rz|K٬42 swUҤ'4X˧|`í~pX˧|`J3~F'<gF'763 #52654&#"# '4!"326(24׬'Uvr!24֭٣K|zsp~ȕ`|Xp~8=`|F'<i&dF&d'eF&eO'fFO&f'gFU'g'hFU&h'iFU&i'jFU&j'>72#52654&#"#"&'463"326[*'sobI=J>",BR\*$jt_UV) '2654&"#"'&54632! 33265,B:d:B0<~JIjˮîB,">>",BVU_tjN*$u) '"2654&'632#"&5! #4&#",B:d:B0<~JIj!!ˮîUB,">>",BVU_tj$*\) '"2654&74&#"#! #"&547632(B:d:BB®!!jIJ~<UB,">>",Bu$*Njt_UV)O't)O'tS^$264&"&546; )5! '&Vhf# fw_:@ 91@ B /90KSXY%4$32#4&#"!7g#ʲfhXdfF.=@ 1@ B 90KSXY#"$533265!>ʲf"fw_?@  91@ B 90KSXY '!32653#"$5g"ffd餗 K'  '  O' ;';O' '  O' ( (2654&""&546323326=3#"&=bFntnPX/Q,CEmaZT:KMMKFHn|ppX;oBGj9$ 3>2654&"!&546323326=3#"&=!"&54632!2654&"bFntnP?+/Q,CEmaʔ/bFntnPZT:KMMKFH;XppX;oBGj9|ppX;T:KMMKFHFY<@   91B /0KSX@ Y!"3"$54$3!7YꏙbXhUFY'<w8  91B /0KSX@ Y!26544#!wb gXw'\<FY:@  91B /0KSX@ Y'!"$54$3"3!YhbƙXiU𥒥FY'i<\'%!"&5463"3!\=.̞RiPYB~}nDZHCw%#535!53!3##q=ԭ-!%#5#53!3!3=~0Ԥ!O'tw533#!#5!5#5q=-ЭԤwO't!5##3!35!535=-ЭԤ!O'Vt 33#!#!5#53m unfy~n ,@  221@  /990%2654&#"672#"'"#3z_̀ٷ{O{ʃIH+'sZ@  21  /0# !3! !5aPh//+jiN !!!5!;VnVN#5!5!5!53!!75$i2$i*mւVxnVnՆu!s #'#37 ͉sH+'Y &s & O& 7& 7O& & O&!!!!#!YX  !!###!YX  !!#####!YX    H!!#######! \YX     !!#########! YX     !3!!  !333!!&  !33333!!e    G!3333333!!     !333333333!!      !3!!#!?r !333!!###!?r   !33333!!#####!?r      Y#!3333333!!#######!?r        +!333333333!!#########!?r         SC !3!!#!YX\\SC!333!!###!XX\\\\SC!33333!!#####!\X\\\\\\S FC#!3333333!!#######!ZX\\\\\\\\S C+!333333333!!#########!YX\\\\\\\\\\!33!!# #!՚rՙr %!3!!#!!2^DD^ Wc !!!5!5!!!wsX #5!! !!'!%'! !7%!77'7!  ww u||||||||||||u  G7+/37;?CGKO!5#535#535#53533533533533#3#3#!!#3%#3%#3#3%#3%#3#3%#3%#3??????𨨨!!!!aOq:#[!' 7#}CrarCrrD:[! !rarC}rbar=` !#!#3!ff`G [`3!!!!!!!! j /t`Ӕ&{o{4=J%#"'&=!.#"5>32>32#!3267#"'&32767%2654'&#"JԄ℄N ̷hddddj||MI؏ii~ST`Te__ZjkSR\]i߬A@o\]Z^Z5*,=>` #% 54)3#4+327#!5#53!2x9||ԙf_ڪrĐq{Fg`32654&#%! )s7F0Ǔ$g` ! )#53!#32654&+7F0ɖzٍ`` !!!!!! /`Ӕ|1#"&'5327654'&+5327654'&#"567632p<54& #.54! ì++f++$$>:#tNPƳPNM]*U3MY + 3267>54&#"'>3 '# 5467'7*(Ou))Hn.Mw834OMx43N)gA\*g>}66]C_56`?`q{&/=5!&'&#"5>3267632#"'&'#"'&732767276'&#"qN ffjbdjQGhi񈉉ijBN℄RR\]VVUVVVZdc44*,nmn67윜78lkpĘZYWWsttstuq/u{ 4&#"#32/8qu/ 32653#"4/8`!264&#%!2#!#N[cc[H^^>2`!.54763!##"#676#";jpkla;;?î545w?@@?w iQP%$q2^66**TS++2`!&'&'3;3!"'&546#"37545â?;;a|lkp w?@@?wS66^2q$%PQicQ++ST**<m``$ 653 &53sXٹ};ML+%!5!2654&#!5!#TZ`fcL||BtN5353!5!2654&#!5!#Z`fcxzʤ||Dv/{&#!5!2654&#!5!27654'&#!5!#|vz{\MN`_`gb>> E__ru99wSS?yzVU=`YV5`ZX`]x`73264&+5%5!2 'Ӏ{n Fo}ɽBdd>Jm7{3!!I{/=`N`#!#`I``-Z^`367653#5&'&3U9VˆmmV9S`1Ms,}},uMLs` h !3#'!#ZgVXVq`!!!!!5!#!.AeW"___DXI &327654'&#327654'&#%!2#!g1221g̼^-..-^EOO)(N^h+&&MO%%X@? ]65dL.- rUpz 327654'&#%! )[ZZ[vNONN]eefe !!!!!!R-@___S !5!!5!5!5@-_/__H~$5#5!#"'&547632&'&#"326NJYXe|}}|\SRFFPOWWVVWCj]/rssr'y5UVVUL 3!3#!#΀2Wr3# 3+53265A@1(TFDE`Tli 33 ##-<azBm3!!_ 33###|{9="G 33##|_{EEG ##3G|_{EDEH"327654'&$  '&RQQRQQQQwvvwtww[\\[[\\[\vvvvuvG>@"327654'&327654'&'52#"&54767&'&54763sCDDCstDCCBR65<%j<=0ER^X65`l<=ca==ll*6RI)++LK,++,KL++5##,&)$%LY+8:6iG2278PyAAyP87'21I.* 32764'&#%!2+#Y0110YQQQQ))))]?@@?[ #'&'&+#!232654&#=)&''y.,,LPO)*s\^^\$ )(GTD<32#"&'#3t4554455$pMPPPPMp$uuc@AA@@AA86Z[[Z68^gG3#5#"'&76322764'&"Jtt%78NPQQPN874555555S^8Z[([Z@AA@@AAG#!32767#"'&547632&'&#"@AsC?>>>BADbc^]SSt44Va:: 2j88a WW[ZQRmT3210YGMK SX@ 2KSKQZKT[X888Y1@   /0Y5!.#"5>32#"&73267GsC}>?CŻthVau2koamTebXTb2&'&547632.#";#"32767#"&5476G&%HG{065>=f,K,,+*Ib]W-155_;65-9553+,$$4O,, ^$'U13 `fa<))R`1#"'&'532654'&+5327654'&#"5>32FLHG{065>=23-KX+*Ib]V.156_:65-9j2RQ,+ H4O-+]4$'U 12  `33a<))G 14'&#"327#"'&'53276=#"'&763253J44^]4444]^4PP=7633223r99$88NOPPON88$tm=>>==>>FNO e 45k37XX"XX7_z3#53ztttu 33 ##uuZu2u{"4@ $ #32>32#4&#"tHKYhuu'oMLl+yRowtHJZiw[Wk\sa97EBEB~wZXku4@ zx66X6VYYk\sa8BDG 6@ KSKQZKT[X 88Y1@ /0"32654&'2#"&546]ml^]ll]ǁqqpoWGu 67632#"'&'532764'&#"G0336^_]^:5311213p?>>?p3121 XXYY _ ?@@? G4'&"#46320T6667zWVoBAA@qWWG27653#"'&506667zVWoBAA@qWWu#3>32#"&$4'&"27uu$pMPPPPMpf4554455b_86Z[[Z6@AA@@AA#3#;#"'&5#5350Hww33UUPM,V-,vTPn3327653#5#"&nt''N^67tt+78Jy~{Y,-65\c`9nA!5!27654'&#!5!#Ue22<KLg#"FS10gg%dAl88u{(#"&53327653327653#5#"&Q+<=Rnxu$$IZ54t$$KY45tt(78LMlE!"z[+,64\c[+,66Zcb;F&33#&{{y #! !&'3254554#"t nυ9F}攥^ؙ83a _{3#5&+532{t<,||GXG+&#" '&54767&54!232654'&'&yAJZVWVWW!/bL+"766^]l9=P(r(B4?KWXXWr]$,O'(@?Ajp69G  )"27654'&'2##5"'&5476734 )=;67-!XQVVQs~SVV@h)%661FQ:5}t?3XJOZUUXR=\ ,Ajq@:%'#&+53;'&^sa,(^ra,GX]:DFYzg duudnsjd&smdyondsody67632#"&'#44&#"326&_%sNo%ti\[jj[\i92ض78"{qqrG xqd%trdV{(!2.#">32#"&'#32654&#"aQQR9||9F,*[cbbc#LFt`5!#3#3!53#53t𰰰त TV/%+53276'7#3/F0j&*06G#367632#"'&$4'&"27tt%87NPQQPN78f5455554_s^8Z[[ZA@@AA@@Gu&'&#"32767#"&54632u1122q>??>q22110h;533` @??@ _ GKv+325&#"47&'&54632&'&#"632#"Z%0\R@5`$^4412/412q>??5{3 * &;/Z ` ?@@biG.&'&#"32654'&7#"&54632''7'37 i:;n\[nO$$ZY drP =67Tb1#"'&'5327654'&+532654'&#"5>32N+,QR2658-56:_651.V]aIV-+K-32==l/|GHL ))unn77wU:8P#P,i/0\+53276=1#533343r,Brrtn x66XU P#PG ,5#"3276#"'&'53276=#"'&54763J]4444]^44tPP=7633223r99$88NOPPO>==>>=۠NO e 45k37XXXXn3327653##"&nt''N^67tt+87Jy~{Y,-65\cO9I 5333##53#Irtggttt\\jz~ ;#"&5C,rfpUWlwI 5!#3!53IMjjo\\E\\I5!#3#3!535#535IMjjjjooo\\\\\\V`3#"54;33#'#"3276ztteztry "3rKNB ,|ssW?#5$ z~3;#"&5ztC,rfSVXlx[`+53276'7#3`34r,Bttax66XS gq3!!q_u{467632+53265&7454&#"#4'&#"#367632+=32#4'&#"43r,B0t*pJz>?t'(N^66x66X6V~a88BDwY,-56\uU 4'&#"#367632;#"'&5P''N^66uu)89Jy?>0B,r34Y,-56\sa8BDzV6X66xq 33##q-{{~G 2#"'&5476"!&'!3276WVVWUWWU6//1w &6^]6&WWWXXWWWW@9\[8E-AA.G&.#5!#3!535&'&5476767654'&OpFVVFp^nCWWCnt6%66%4#76$\\FWWG\\FWWE[*,ApoA-9*A@+Fa:.#"#"/;#"'&=32654'&/.547632;1j8W*,]({44MN9> 0Br34@?>=RX l)k`GF@rb/$+*MW33 V6X66x"j2-*TIX00476;#"+5326z73zno>43r,B0]Me30U:Jx66X6#3#;+5326=#"'&5#5350Hw43r,B033UUPM,ax66X6V -,vTP^!533!33##5#"&=)3276^ntgtuut+87Jy~''N^61\\`9Y,-6/G&5!327654'&'5!# '&54767GE()78Z[78*,?G$"ZYYZ!"J\{':?KY7667YR8>#{\8?>LRRQRR<=:u2653#"'&53QHuDEEDuHPZs{>??>{}ZPz31+"&53?27654'&'&gH#"YZ,rftA Z87)2:08?>LRRlwpU67YQ8C&# #3{{ s7n !!!5!G'L\^=R^7!!#;#"&=!5!G'LC,rf>\^=R VXlx ^7^n#47#5!5!3632#'3254#|`\'Ln& m,7!!^R^=jR37!2#"'&'5327654'&+5!5!hCQ>63``;??C5~Ex>?::hn\& =;M|CD m**PJ*)]R^G !32767&'&"2#"&76So/6^]6/ +66,ǗWVVWVV*MWXMmGYXFovw^wwwv[f!5!73[f3!Px[f#'!5f[f!!#PU騋fBf 3#'#35fxBf 73#'#˴fxh'${-{'TDN's%N'>E&%&E&%&Esu'l'Lvquf&vCO't'qbN'>G''qZ'zG&'qZ&GOw&'z[quZ&Gz'&'qZ'^&GZ&(q^'HZ&(q^&H&(7q{&H7v&(qv{&Hum'u&(zquH&H'zK#O'vt)/P&I @s&*2"qVZ&JI;N's+dN'>K;'+d'K;P&+j@dN'>Kt;&+ztd&Kz9;&+ 9d&Kv&,Jvg'LYZ&,tF&ajl'v.l'ZvNj&.&Nj&. &Nvj'/''O jk'*u'/S1'q(;j&/J'Oj'&/\'&Ol'sv0f&PvO'wt0'FP't0{'P3N's1d'Q3'1d{'Q3&1d{&Q3'&1d{'&QsZ&2fqu &RsV&2lqu&R'jorsZ&2jqu^&RsZ&2hqu^'Rl'v3Vf&Sv2O't3V'STN's5J&UT'}5J{' UT1'q}; J&q T&5TJ{&UO't6o&%V'6o{'Vm'v'6of&V&VvW&6o&#"O't o& *O'rt77N&W#>'q77'W&7b7&W'r&77''&W)'8X`'{Xv)&8vX`&X)&87X`&Xu7)Z&.8X&+v)4&28X'Xh}&9F=7&Ymh&9=`&Y^Dr'|:V5k'C ZDr'|:V5m'vZDN'j>:V5'jEZDN's:V5&ZGD&:V5`&ZJ=;O's;;y&[g=;N&;j>;y&[jfO'ps<=V&\f\m'u=Xf&]\&=X`&]1\&=X`&]d&KfN&Wj->V5&ZB=V&\{a&D/P&A@h'${-{'!Dh&$u{-{&DTh:&${'Dh:&${-&Dh[&${'Dhu&$ {-' Dhm&{-f&"hZ&$ {-' DhZ&$ {-' Dh&$ {-5' DhY&$ {-&D h&{-&3&(q{&H&(uq{&H^'u(q7'H:&(q'H:&(q'H[&(q&Hu&( q' Hm&qf'& `Z&,#uD|& &,.&Ls&2'qu{&Rss&2'uqu{&R}s:&2lq'Rs:&2jqu'Rs[&2jq'Rsu&2 equ' Rsm&'quf's& tsgk''ubvf&vscgk''ubvf&Cscg&b'uv{&c}g^''ubv7&scg&b'v&cs)&8X`&X{)&8uX{&X}_k'uqif&v{r_k'uqif&C{r_&qui{&r}_^'uqi7'r_&qi&r{r&<r|=Vk&\C!'v<=V`'t\&<r|=V&\`^'ru<=V7&w\qa&> Qpqa&> Hqf&> ^qf&> kqf&> _qf&> lqm&> `vqm&> mDha& Q#ha& f' ^|f' kf' _SXf' lom&1 `Qm&x mNa&B QDa&B 9f&B ^ f&B k%f&B _Of&B lR-a'# Q-a'# 7f'# ^|If'# kf'#" _Sf'#^ loVda&D QVda&D Vdf&D ^Vdf&D kpVdf&D _Vdf&D lVdm&D `Vdm&D ma'% Qa'% f'% ^|f'% knf'%3 _Sf'%d lom'%t `Qm'% mNna&F Qna&F f&F ^'f&F k<f&F _Qf&F l=nm&F `nm&F mAa'' Q5a'' Kf'' ^|Kf'' kf''4 _Sf''p lo"m'' `Q)m'' mNqua&L Qxqua&L nquf&L ^equf&L kTquf&L _quf&L la&-# QVa&-} Of'-v ^|Yf'- kf'-6 _SPf'-w lo*a&R Q=*a&R *f&R ^'*f&R k!*f&R _`*f&R lW*m&R `8*m&R mIa'2b f'2 kf'26 lo3m'2L mN'a&V Q^'a&V T'f&V ^Y'f&V k^'f&V _'f&V l'm&V `c'm&V m^a&6N Qqa'6 if'6 ^|uf'6 kCf'6t _Syf'6 lom'6B `QPm'6 mNqf&> }tqf9f&B }Tf:Vdf&D }Vdf;nf&F }f<quf&L }{qufY*f&R }0*fZ'f&V }M'f[qVa& HqVa& HqVf& HqVf& HqVf& HqVf& HqVm& HqVm& HVha&  PVha&  PVf&  PFVf&  PFVf&  PhVXf&  PVm&  PVm&  P2Vda& 8Vda& 8Vdf& 8Vdf& 8Vdf& 8Vdf& 8Vdm& 8Vdm& 8Va&  PVa&  PVf&  PVf&  PVnf&  P#Vf&  PTVm&  PdVm&  PV'a& YV'a& YV'f& YV'f& YV'f& YV'f& YV'm& YV'm& YVa&  P\Vqa&  PVif&  PVuf&  PVCf&  PVyf&  PVm&  PPVPm&  PqH&>zq&>qyqVf& HqVy&>HqVf&9Hq7&> RnqV7& HHhm&uh1&q;f&B }RhfVh& Pxa QVxaH <ܲ?]1 Դ?_]KPXY̲?]90IIPX@@88Y#55#53xgJ7FJm'jVdf& 8Vd{&D8Vdf&;8Vd7&D RVd7& W8f'#b }Ruff'%n }RfV;&% Pf' Q } f' Q. BJm' QnH&F$n&Fqn&F {.x7&F R.zm&F S0gm&'.uY1&'q.;f''q }R}f~f'  }f'  _Jm' *H&R'*&Rq$*&R {*=Va&N QVa&N *7&R R'*m&R Sm&2vu1&2q;f'2 }Rf5a'/ F)&j }lFRfCV'f& YV'`&VYV'f&[Y'7&V ROV'7& Yf'-; }Rff'6D }RfNV&6 PsRfvxaH ܲ?]<1 Դ?_]KPXY̲?]90IIPX@@88Y53#7"͔gd10!!dd dy/10!!dOydy/10!!d8ydy/10!!d8yy/10!!y&__J&BBB@ 10#53ӤR?@ 103#ӤR՘?@ 10%3#ӤR@#5R՘?m '@   1<20#53#53ӤRӤR??m '@   1<203#%3#ӤRӤRլ@@m '@    1<20%3#%3#ӤRfӤR@@m #5!#5RmRխ??9; '@  YW Y <<1<203!!#!5!oo\]9;>@   Y W Y <<2<<2122220%!#!5!!5!3!!!oooo\\3!   \ 104632#"&3~|}}||}3q373#k%3#%3#V #@   1/<<220%3#%3#%3#ki3#iq L #'3?K@D$%&%&'$'B@ .(F4 :&$L%IC'1+C =  1 =I 7+ ! L9912<<2220KSXY"KTK T[K T[K T[K T[KT[XL@LL878Y"32654&'2#"&5462#"&546!3#"32654&2#"&546"32654&WddWUccUt%ZVcbWWcdWccWUccܻۻۻۼܻۻ q r "-7;EP\"32654&'2#"&546"32654&'2#"&546  &54%3#"26542#"&546"32654& WddWUccUyWddWUccU<¹ߠZucbcNWccWUccۻۻۻۼ5ۻ(`3(`u(`&  ,(`' ,&  X(`#3W`u(`&  ,(`& ' X , #'#Rs#G@%Bon29190KSXY" 5s-+#R#I@&Bop<9190KSXY"5 +-#^R^  &K'N''=NO'^O$#5>323#7>54'&L Za^gHZX/'-93A% #C98ŸLVV/5<4BR-5^1Y7| B_ % ij991@  <202$7#"$'56:<hh~vvuw~ign % ij991@  <202&$#"56$6;>nvv~hhgi~wuI3 # #bbc$$v=' {' { 3_!!V_+@B10KSXY"3#-\X 3!!#3hX^#"#JX 53#5!!53X^JݏޏJ&""gJ&"JJ'^"d] 327#%dp](; 2###׎辸( 3+"&5463yv}~}|( ';2+v~}O|}=k {B# #5#5R#۬@n&  =o'  BC''H1a~ 8| #'7!5!'737!!qaqqaq)`rrbqr2 535353,(`$' ,& '  XfN 53!535353fXp fN 5353535353,p  3#3#'d 3#%3#3#3#dipD %53535353#!5!3!,|f  feP> 3#3#3#>w 3#3#3#3#W "27654/2#"&5462332233VVVVVVVz@ <<1@03#3#zttttg? @   ] <291<290KTKT[KT[KT[K T[K T[X@878YKTKT[X@878Y@T /9IFYi       "5GK S[ e]] !33##5!55bf]myf !!67632#"&'53264&#"y^^a`<~B9>>Eoo4h6_ MLKJq ff\/"327654'&&'&#"67632#"&547632X3333XW33331221DD &9:DTTXWll122m45[Z4554Z[54bg KL1LMONuv l!#!liH30Y *:"32764'%&'&546 #"'&54767327654'&#"55j]\655T./RQ./SZ85UVUV56-/.UQ100/SS0/*,+KLV,++]12Hdt::dJ01:7PyAAAAyN98?&%%$A?&%%$S.532767#"&547632#"'&2654'&#"1220DC #<9EWXWXkl122Xf33XU5443g KK/MNoouv rh\Z4554Z\44k !!#!5!Q_i_k_8_83!!'3_a!!!!''^_o #&'&4767TRRTe^///._~g3#676'&ge_/../_eT)**)~~~u0@ 32tNN^luu)qJy}wYYk\sa88WT dC{d^TtdbTud?C dfC d\T dlC dYT dST d d8 d  doif dgif dMUdG[dGddu!sdG\dV##"32.#"3267!!!!!!Oc%eNLbbL:/667756GFDFG ks9'.473&'3267#"'#7&'#7&'&76%73&'hA>/(%:@w]ayA9&AX}R4>C5Ai<)^_HH?WghйKp(`,%6767# !2.#"3>32.#".aXj]aye6{_]w|^0n&<$'/_HGghGG_^ٜu]\Y!!!!3###5qZpP~WHE9Eb#!!53#535#535632.#"!!!5-쿿=OL=tyB_))HB+#&'&#"#3676323632#4&#"#̪m49wSS>YXyzU6%X\xruxGM_a`f21>&>E3\u"&)''#!333#3#!###535#53355KO8~8~OO4&{{&&{{{ P32654&#+#!233!!;532654&/.54632.#"#"&'5#"&5qzzWQeGl`[z_<`HJU];Ufɘ/ϒjqqR>N#55YQKP%$((TT@I!*##`3E326&##.+#! 32654&/.54632.#"#"'&ٿJx}A{>[b`cae@fLNZb?ĥZa,/b؍$~3YQKP%$((TT@I!*;"&)-1'#53'3!73!733#3#####5!73'!!7]:1000019]zu }Luuguuguuuu_ % #4&#!#)"33!3_SV*$oN&1@: "+ /) 2+"!)#&  , & &*!/<29999999999122<20K TK T[K T[KT[KT[KT[X222@878Y@z  1Ti lnooooiko o!o"o#n$l%i'i-  !"#$%&'()*+,-2   USjg ]].#"!!!!3267#"#734&5465#7332[f A78 ʝf[Y`(77(6bbiZȻ{.# .{ZiHH"{/ #/{"G(33!!###5uX_Tws1s!5!!77#'%5'&PPM4Mo؈onوn9 -bw'67>32#"'&'"326767654'&'&67'>7632#"'.'&/#"'&54632326767654'&'&&#"32">1aJ{%A01Q[W7>/W1   >$<  . #dCw-^URB$`>DL_K>.3b @N\uLMiI(S395l9,8G(/&  -9)ЗiRm:3Xwdg7? 2j7#=5(6$ 629T/ (2M !:5S}$@{mbq~Es/4 -& "TAB`]|@8nRkcd]aC".)5'632327&547632#527654'#"'&#"%654'&#"o|@X"07PYtaTk~j[IwmqJ2530D#24!`NkBX``S㫣†qJ323!!!3267# $547#5\J5 ;_srigCS1r{jJ,{ +kv67&&UB{\* {;^~FE/0K?{w!,&'&#2767#&'&576753w[TUeeUT[Y\Y[dsye]Y\[CvlCi----iH$"u9Bt"#BuflC3!~d=!5!'3 G~d=z!#'73!5~~͛=z5!'3#7=~~d͛F 3#%3#%3#yfPF 3#%3#%3#%3#ky)=z #'73!'3#7~~<~~͛͛C $(B"326=7#5#"&54634&#"5>32%3#.#"3267#"&54632pSHfmƩogDc\GD^o8yy8o^IICBRCI M >OW\ 7$44"C +EI.46'&#"#&'53254&'"326=7#5#"&54634&#"5>32%3#VNz$p;i0ʪ%={pSHfmƩogDc\GD}|49d$, !5Lf,1BRCI M >OW\ 7$s'!.#"3267# !2'Y藣yyYjzS #bvAZ4-4ZBuHHghG[!!m&r&F+,/-/ܸܸ,(и(/A&6FVfv ]A] и ии# /!"+!0153&'&'6767!!5&'&76wI3cc3I86QLNN7887NNMR48_ki:rq;zn #++$ * rn<(2.#"3267#"&54632%3#"326&$  &54^o8yy8o^IICDkavva`ww~44"K <M-1332653#5#"&.#"3267#"&54632%3#\QPcu`^o8yy8o^IICDLriuD P44"K{Ro#&&r)Io!6767632#"'&#"32767#"'&'&547!#"'&54632327676"#"'&'&54767632l(9BKc{=&%%03!((!,739%7`lG;7 25]hB4,'5  'B[QF$%]c'G  %! }Kr~,1ьIg)*!&!(D;w},75;!_']7:y}[Ϟ\@4>#,!, 'QFj(JG4$$,*)/9yK#%P73276767654'&'&#"&'&"'632654'&'&54767767#"'&'672#"*i(X%# 1FSE/ O.55FuPU[QF[00rl~"KI}!;IFs;n;_T^͌Q79}w^l.Gyr\[4O9%#i#^MX;yv@c}e.ID\7I;>2V秉uӰ3!3%!!!!!!nnq  dx+%H#>54&#"#3>32u j_ y/wFx \/HT^Ȧ^m$R#a"67632#654'&#"##7373!!UcduL/ .| {@e22wKwGW\?3L0O}};t9#"'&5476323276765"#"'&54767632thn<7# ;KQ>!|Za,4(XM!},‚<7D9#7.M=.1?@ '(MXI(' jF!2?632327654'&54?#"'&#"632327#"&#"jou9!ydG>PPPP5ʺ68^nm{z}}ȋo֏zZ'PVaK~pmdykb^OP681/::b:DnJ327654'7#"'&'$#5"'47676766767632#"'&'&'&#"32nZS_n0VBRny#HB?X!$9BMw>7l. ;7%,;(ӧuy,D0&3273#"'#67&5477632654#0)W:K32#"&'####53&  O:{{:ܧ$}daad}j %# !3!# dX0dd q+6+/BB/,/<-ݰ.<-ް#? < # 9 FhH)##Ii;BB=#IbiF`FaC`#BC`CUXC`C8Y& <BB00<İ< 6< <9 FhH #Ih; < ְ ݰ,9, FhH &ְ& #Ii;/,#Ih:1#IC`#BC`CPX& ,/C`C8K RX #IC`#BC`C@PXC`C@aC`#B C`C8YYYBB=#IbiF`FaC`#BC`CUXC`C8Y#)<BB1#IRX   <  < Y3525!463"!4632#"&732654&#"5!6jgggg92299229k̀k@4nNggNNggD{{ "-! ! ! ! '32654&#%!2+# JR12)uyӲckkc?L00ey wXQPXdn;C0<67632#"'67327654'&#"#"'&57&547276545[ۄFIyeL )qz]E& JEYq:?.蔁0.A ƂMkeLPק<+(h|H=y|n=B {u.F/4_NT 33!27&#%!2+!67654'&,d.@nX<-]\,q jdZ)VV)s!)%#'# ! % 7& 676'&B 3y;:x+lllli$ #ab[ 2222jT%%5$c$B2 _327654'&'&'#"'&5476323276765""'&5476!6?232767#"'&B=]iS\ZV30Fn7;#FfS9!!< #5,h";<2XngZR{,##9>;K!QIag£S D5@7*'S:y}*7H0 5#!,Il @3Xnh0{(2r:=OSlIX&54'&#"#"'&527654'&#"3"'&547632763227767654'&#"R(O*\xggfg-.@@?@@?\QA@@@S6fggfeӻp/$~AB}:1$ -*MJJ@f[+8vuuv zVWWWXWWVVW\uvuuu# bW1W{|^1$h{vC[SK\GChfy /2 &.2&'&+3!.+!! !27&#676'&%3LDEx-Me5q>HJxnu1EA+ZY*01/O~hbb)j)V>U)-  /!/ и/ ܸи!ܸA]A)9IYiy ] и /9 ///+ +0132654&#+#!273 # #s sNCI/ϒ_6۬kk%T$+.3&##&'&''7#!27%7 67654#?\A>:AٿKE6ToF^~_ ,8~|T3Jۏ/HDh0& ,ok؍]-Dbg('4.#"#"&'532654&/.54632733###UW'AG/E8pi4sG[d/EK7?8pc|3iиY"*/( VAO[`*,2,* M=H\T(l0`!!#!!!!!!!3!!rso+` `ffff'F >@!    b b cbc91<<2<<903#######5Jq7rqr/B^^"h %73# ' 3,o-MoF+,\ %#!!!5!8kO8d qddd XL/ 654&#!5!5!5!!2!"'X $''ߦԧc̆eeaԊfJN6NsDU767654'&#"#"'&5733272632632!"'4'&'&#"'6763232767654'&'&#"_}yj#1Q\$####,TGG\n#?QY>kDM4giMqE#"'&'&5476?&'&547632#"'&547654'&#"3"32767'_ilE_ml=Oc{T3-2") %+fa@aP/Z_|{w:maZu> IhA"%@_l$=PczS2VN-2!$+%$+@e}N069na[u>_T M#"'&'!#!"'&547632327676=!7!&#"#"'&5476!27327#X':'7?<=**M_4. B^l{>!'Ba>nG#&#w4$B00!K=DcK_4B( 03B{>ceDInFT=I,Fw7K. 0# )5!!5!3#Pʪ9Bk32767"'&'&47'&'&'#"'&547632326765&#"6767632377632#"'&'&'&#",5(.'*'E`97y{7a;f7;>F3.^PeMD*#7@,j!HhH<=.%_yipp3 T}B',$ *5܀/,,@!;Da97TVM;nwF^O?/,%!;>jytX<;}f?E'_n H''#  .hJ) 4&#"322#"&54WOmVPm˜ݢt}t{أأg4 4'+5654/&4?'&547 '&5474/c2>Bd=VE/b5c2ltc2c2uc1LS2?Bd,>8?]/c6c1LS2tc1LS2c1LS2903#!".54?>3!4'.#!".54>323!2O,""$%@;5H *Y[#$"x2 1[G(  WA,!2#"&/#!"54?>3!!"&5462TPl 0%= -d,mF"$mG- .7#*(/ $"Sae(!q~B;V&!"&54>323!2#"&'&5 mG * 5G 0%9 . q~( 0 (/ &Js!S'DQIF 4632#"&3!53#5!pQOooOQpoTQooQOonuyy5yZR; ! ! ! ! HH#[[breH !#y;:x L`  !!!!#!3#'!#33 # #DjwZDZ֏R``C5MR.}$z`-1%5"'&'&5#2327#"'&5#!#"#463!#3#, 9Yl(Ht*=Z2dr!Z4@'!8 ֦zEB bLs{dYsZ{3#"#4763 3׮UEEl4FũdGQnCF\xB*WbOZ=0 3%!!,:*nq dd3!3!!!! nn8q  qwS ! ! !!5 5Y*dccS!!6$3 !"$'53 !"kJu^uopkoSUggHF_`2/.2%!#!5!)+!5!_++!# #3bef9WJ " )327&#!3676654'&|tK"P"coAfյ|cv~dAA xPfUmZ #2!7#"547632!3 32767654'&#"* 6B8wx!Nbb|˞"#>|OO'vN 2wx87tKsO=  =d01 PD10d^dTd6Jthi[{ (232767# '&5477632!7!654'&#" N&#G_yZ\klmk}Z5fF 9NJC0<7h:J(u*oDMcFPZd82vRsO 3#3#!!ɸ.Ԇ$N9`V 3##676#732767!ɸ.fʆ#5H2K1i0/N)deеT0Hd01``;&0 #473>32#"&'532654&7>54&#";Ht]h202޸SUWDi;2[UԠ_I@Yr~YW׀c?}<$$/1oX3gQX?@Q` $@   F 21@/0!5!!5!`oX&{' 35ud^X&t' 35ud^&{' 35 d^^&t' 35 db^&u' 35 d?^& ' 35 d~&{' 35 df~& ' 35 dw&{' 35 dbw&u' 35 dfw& ' 35 dlw& ' 35 d&{ 35,'&,,&,',,(Q&,9h9&9,,&9',, &9',',,-&,;=;;=&;,=B&;',,j/s'&'0yL&LLpY&L'LpLA&LY=`Y=&YLD=-&Y'LDL=&Y'LD'LL$J&L[;y`[;&[L[;D&['L[LyOq{FqZG{Py }  ) !3 !## !5hPPh55~ji.,w# + ++ A]A)9IYiy ] A]A)9IYiy ]%"+++ + 013 !#3 #32654&#! )5HHNhPaY.,职~y }(1C3 +3 !32654&+! ) #"35# !35#"&546!`HH5NNPhthNN5H/ó., ji~s'H{d?8   2@ @@ 00 ]1@   990@   <<@ <<KSX << Y5!!dx=xUZxx @   991  2@ OO ?? ]0@   <<@ <<KSX << Y3'#'-Zxxvx<xuP8   2@ OO __ ]1@  990@   <<@ <<KSX << Y'7!5!'7Pwx=xZwxx @  991  2@ @@ PP ]0@   <<@ <<KSX << Y#737Zvxxx76767632&'&'&#"#"'&/#7!#/)85,0F"<;NJX[GR7<"#!2)85,/$#?2WG[XJN;?,!F0O<:" %7xxUZxaxxaxuP8 '7!' 7!'7Pwxx>xaxUwxx>>xxwd?8 !5!3#xwx-xZxY %'3'!!5xZxZxvx檪uP8 22@ O O _ _ ]1@   990@   <<@ <<KSX  <<  Y!#3!'7'8窪xwx-\xwZwx !5!!7#7\xxZxx+xvx7!!5!7'3'xxxxxZxxvxxvxd>%52#!5! 767>54&'&'&>42/+-+-':1 Hxwxܪ-)o=  xwZwx(.46<=69)-d>>3276767654'&'&'&"5476767632+#5!5 6 +/24>A1:'-+/24>xwx  =69)-(.46=<69)-xZxvP>54'&'&'&"3)'7'7!#5#"'&'&'&5476767632# 6 +lxwx>42/+-':1A>42/+ׂ  xwZwx-)96<=64.(-)96=dP8X#532267676767632267676;'7'7#""'&'&'&'&'&""'&'&'& xwx 0$#$   "%'-0$' !  ' '- xwx  ('Z&("  "(&Z'( -xZx$ -#%"&* 'xwZwx ""&*  *&"" dPF%'!5!!'7'7!pxwxpdxwx^:5xZxo:xwZwx* %'7 !^ b9YXxbZ  #!5 xwxoxZx[ !'7'7!#xwxxwZwxZ  !5!3 ixwxDxZx[ 3!'7'7xwxDxwZwx 7#7!5xwZwx=xwxd? !5!3?=xwx-xZx,-eX&7#754767676 #4&'&'&"9xxZvx.-\ZnllnZ\-.BB54'&/#7!!#"'&'&'&54767D !BB54'&x\-..0YXplgtTY0../Z#,@#B"!BB@RNJV]xwx]TQ>]xwx]xLii `iiT4]xZx]4]xwZwx]JiiiiuP8!7'!7!5!7!'7'7!'7!5giiyYuI0]xwx]uIiixK]xwZwx]Kxd?8!!5!!]xwx]7Qix]xZx]xi#'3'#'x\xZx^xhP8^xvx^huP87'!5!'7'7!5$iiQ7]xwx]iix]xwZwx]x737#73jhx^xvZxx\x%hh^xvx^8dP8!7'!!5!'7'iili\]xwx]]xwxiii]xZx]]xwZwx7''3'7#7iii]xZx]]xwZwxliii{]xwx]\]xwx  #7!##PU?,UvU,?UP5#'#5!#5'U,?UvU?ԄU4 753!5373U?ԃUPqPU?U 433!'3ɕPU?UqPU?,Ud?8!!!!5!!c$R&xwxxxxZxxuP8!5!'!5!7'!5!Q$܊xwx&RFxxxwZwxxd?8#''''#53777?(FncxwxFn-FnxZxFnuP8577773'7'7#'''unFxwxcnF-nFxwZwxnF3'!!!!#!5!5!5!'-Zx((ت&&xvxTrx#7!5!5!5!3!!!!7Zxx((&&xxrTxd?8 5!!5!35!dxqxUZxxa 3'#'3#3#-ZxxbvxrxVuP8  '7!5!'7%!#'#5PwxqxUwxxw( 737533-vxxvxrxv4k?9 !#3?xvxתx~\xuI9 !'73#'7!uxvxxvvx7?~ 5!! !!  d }*^V 3! !!d}*p  d HP~ !! !!    ^V #!# !!!d e n ^V !! !3 3!!!E*dr*r$| \d^V )3! !3#!5#3 3 ȃ\Pdx @t %#!5#3'!3!3! !33'ȡdxd:tZdd\nt^V%#!3!3! !3!5#3ĹtIt\Px^V%3 3!!! !!3 37r*kd d| ^V %#!5#3 3!3!! !!33 37ȃ:͊` \h u}~ 7!! !5#35! u\Pdx f:bȃ  zM!#7!!#Mc"?,^xc?x^zM35!3!5!73zpc?Jx^cr+a?^xJ^V 3 3# '! !! !  e   dCuP8)5A '7!"'&'&'&'#5367676762!'7$"!&'&'!27676Pwx 21@=:C.2  21@=:C.2 _x_R#)l$h$#R#$Uwx@21.2@@21.2@xw#w;' , utP'7!5!'7!5!'7!5!'7Pwx===xUZwxתתxwZd?D5!3!!#!dx3xUZxmmxuPD '7!#!5!3!'7Pwxͪ3xUwxmmxwdPD3!'7'7!#!5xwxwwxwxmxwZwxmxZxd?D5!333!!###!dx⪪YxUZxmmmmxuPD '7!###!5!333!'7PwxYxUwxmmmmxwdPD333!'7'7!###!5d xwxdxwxmmxwZwxmmxZx7?@  !JBJAu}@ 7'!5! PJBł}BB7}@7'! ! 6BB A}BBh %!3!3۠ՈR+nm+A&6FVfv ]A]+ +0132#&'&#"327673#" B!OO!BzcI7͙7Ich-)b@'! '!* $$*9991990K TK T[KT[KT[KT[X*@**878Y>54&#"#"&54632#"&54324&#"32IH7$$0e՘ݢe WOmVPmmWKt,>bFأ[t}t{ !5!!5!!5>+5!#7#53!5!!5!733!Kcd04+^^``k](673#"'&'#7&'&$32 '&#" 32$767&'&YjiEd80~i?/c`RQQ$g'-"SRR:;nSz_'BTc_ N@DROg`8@91/90@cmpxyvn]] !3!^DC?`%! !3f<?I!!"$54$3!!!W?JGcGK@ sJxNL``ȟMOx]I&/!!!!3!!"''&'&54$;7#"ؖI$$$GA?d`,,cFU;}YI7ʟ 7c``JxH NGx]g% $54$)!!3!+*(FiNv%FrO:0QI&'&'&'!5!2#!5!676767!5?JGcGK@ 'JxNLȟMOx]I&/'7!5!!5!&#!5!2+4'&'&'3276765 I^Q$$GA?d`,,#FT;}YI7ʟ 7c;JxH HNGx]g )5%2767!5&'&!5(*FiNv%FtFgP:1R, //01!!,wq@gg120!#!# }wq@gg1<03!3wJ}w; ]@    91990@0QVPZ spvupz  Z pp{ t  ]]!! !!5 7AJI3!-10!!ת !#!5!3!!5!--+}ת W+и и и / + +и 01!!#!5!3#-Ө-5+@B10KSXY"3#-\<%?P%73% %#'TUUTUTTUDGrHF103#F=} *@    91903##'%\sB}}`s-Pb;=& 8us=& 8 s %.#"326"&'#"&54632>3"31UfvYRIOF^_HDa+J1CXXjewߦ~XZ /@- !$'!!0 $*0999919990@     $$$   $$ $ ***///***55500055 5 :::???:::EEE@@@EE E JJJOOOJJJV !"&'()]]32654&#".#"326#"&54632>32#"&1TevYR1UfvYRF^_HDa^/XZie7XXjeߦ~᧯wI%!3!~,I%!3IfIA//+к99к901%&'&'3!!#4'!&'7`'JAW`LqR]+X* Pʋs^(Rs57756u5 +  // 9 9 901 7&'7%%'6 676r{EG%y44RW!L!$Ҿ &!L {JP+3#+fJ+ 7+и//9 90137#'PMVo)gnJ+3#3#@+fJ+{//и/ܸи ܸܸ и и// // 9 9 9 9013737##'[P]ME+qd @oxpAn!3# ih^T3 3##"T^32#4&#"#P(*7332653#"RP7*uM>2&#""&'7327~9GA~9G⧅}}uM& I I%uM& I' I% IJuM-6?67632&#"#"'&'7327&'&5476767654'&'SOJMG79GcBnnVsSOJMG79G]InoSu=,EG%,=,HK%DAF7K|oUDAF71IosV/HgjG$4.JhgH$uMMQZc67632&#"!67632&#"#"'&'7327!#"'&'7327&'&54767!!67654'&SOJMG79G~SOJMG79GcBnnVsSOJMG79GSOJMG79G]InoSu~=,HK% =,EG%DAF77DAF7K|oUDAF7$çDAF70IosV!.JhgH$+/HgjG$uMmqu~67632&#"!67632&#"!67632&#"#"'&'7327!#"'&'7327!#"'&'7327&'&54767!)!67654'&SOJMG79G~SOJMG79G~SOJMG79GcBnnVsSOJMG79GSOJMG79GSOJMG79G]InoSu,~=,HK%2=,EG%DAF77DAF77DAF7K|oUDAF7$çDAF7$çDAF70IosV!.JhgH$+/HgjG$uL.3&#"7#'754'&'#"&'7327#4767>32";EY?w^H6H\O3,,HO;E+@/VfmVmHO?u]HH]sM3 gz.VrmV_zuM<%4'>7'7&#"7"&'7327&'&54767>2=,HK%=Q Hl;EYLmHH7'&#"'"&'7327&'&54767>2=,HK%m#6,=iSH;EcHKs;E]InoSuJ.JghH$6B0+@TH?HK|z1IosV32326ian ^Xbian ^V2NE;=LTNE;=K23276767632.#"#"&'gV^ naibX^ nai2UK=;ENTL=;EN1).#"3".54>323265.#72#"&:QHRdhNi\dnx>@HRdhNi\dnx.ttlH=YOHL\}X[lH=YOHL\}W#"'"#322{dfftX{dfftX#*$0!#.5476767654&'30ND:323267#"''cDXbia]yeEVgia`yS LTNE+~F KUNE,F #"/&'&#"5>32326!!ian^Xbian ^VeoNE;=LTNE;=K`#"/&'&#"5>32326!!ian^Xbian^VeOE;=LSNE; =Kkb%&32767#"'!!'7!5!7&#"5>32%H\ iaBP﹉lZXbian3}o -X"OEd8LSNE;I"#"/&'&#"5>32326!!!!ian^Xbian^VeOE;=LSNE;?Kk˪.#"/&'&#"5>32326#5!7!5!7!!!!'ian^Xbian^VLoKɦoOE;=LSNE;?KL˪s˪sB.32767#"'!!!!'7#5!7!5!7'&#"5>327b K`Jqia'+\+zlh>Tm?u2^Xbianc"%]OE˪Nt˪=LSNE;%N;?@.9*-" *19" <-<<219999990#"'&'&'&#"5>32326#"'&'&'&#"5>32326ian ^Xbian ^Vgian ^Xbian ^VoNE;=LTNE;=KڲOE;=LSNE;=K43267#"'3267#"/'&#"5>327&#"5>29+Vgia@LJZVgia}9+Xbia@MHZXbi a KUOE8KUNE; @^ LTNE8LSNE;f@59#"/&'&#"5>32326#"/&'&#"5>32326!!ian^Xbian^Vgiaq^Xbian3VeLOE;=LSNE;?KҲOE;=LSNE;?Ky5P#"/&'&#"5>32326#"/&'&#"5>32326#"/&'&#"5>32326ian^Xbian^Vgian^Xbian^Vgiaq^Xbian3VײOE;=LSNE;?KҲOE;=LSNE;?KҲOE;=LSNE;?K"32?632.#"#"&'!5!5gV^naibX^naiUK?;ENSL=;EOȪ+  %5 % $%5$[g&Y%ZhӦ69%676767!!"'&'&'!5!!5!676762!!&'&'&[C-87VYYW6 8.CC.8d 6WYYV7 e8-,CE[<0[2332[39\DD+N+DD\93[2332[0<[EC,` !5!676762!!&'&'&!![C.8d 6WYYV7 e8-;++DD\93[2332[0<[EC,`' 7 ' 7&  7' 7&  70' 7&  7.62' 7' 7 W63& ' 7 7` 3654'!!5!&547!5!!4434w~0IG00GG2?8>;_8` !!!!"264&'2#"&546HdddeH;k'**z{DbFE``bq+((d:svv`K!!!! &!56뗲`!!!! 3# $c'`!!!!33#$'c`!!!!!!'+]^*^]N䰰` !!!!!3!Np!NNf`07GO!!!!#"3###535463!3267#"&546324&#"'53#5#"&4632264&"?$mmC???DNB&H#$J'`qk[Q_C<17HBB@,I\\I,@p`ctiG6B?9i=$#tu#gSSS`*!!!!>32#4&#"#4&#"#3>32!]?U\Z79EPZ7:DPZZV:;S==:xoHOM]QHPL^P%U20=` ,!!!!3#7#546?>54&#"5>324eeb_--B6'Z0/`4\o$-,N2A+,/-7#!^aO&E++ '>@"     <291<2<<990!!!!!'7!5!7!}/H{};fըfӪL !@  <<<<10!!!!!!ת4!5!7!!!!!!'7!5!7!5!DQ"rn遙RoLT˪˪T˪  )@    <<10!!!!!!!!K T@.B $# <2291/90KSXY" 5 !!@po V@/B$ # <<291/90KSXY"55 !5AǪV 3!! 5 !!@poV !!555 !5BkǪ!5!7!5!7!!!!' 5'`ȉ)P"_=6@ss1stFpo!5!7!5!7!!!!'55'`ȉ)P"_=6ss1stF. 5 5:6:6pr pr . 55556:86:'!67&'&54767&'676'&'{)#Y4JJ4Y#))#Y4JJ4Y#)AAAAGF㞢GGGG➣FG2;;;<<;2;5$?$%5%67$'W eĔd?NĔ])]o& bR)`q% Rd%'%5% >zmzF<˶@6 o@hGp%5'75%7-孈m%˶C@ʴ@hGp/V !5!%5%%%!!'/xvH-rf5LOlUrC@=Vlь=/V%'!5!75%7%5!!' GWb[mmNL>ߪwe=ت=$%#"'&'&'&#"5>32326 5jbn ^Xbh`n ^Vg@ND:3232655jbn ^Xbh`n ^VfNF<>LTNF<>L>)P14%&#"5>32%5%%%3267#"'&'&/' k Xbh`'+kuE%sk ^Vhjbn "Pv1-LTND9ATj͊LTNF<= &TN#wf=J;N} 55 58@'poN} 5 55@'pom`!-%5%%%'5%%5 MM`ZDOA@FZDt@m*_TW&o}䎲w&-r~bUm`!7/%5%%'%5%75%Jvad",,V`bL"_D2,/*/&O{¸[&}P %5$r osaa^~||P 55%$so a||^a)W!%5%5$gV$}]]x|)W3%55%$Vg}$BW|]]RW(%#"'&'&'&#"5>32326%5$ian ^Xbian ^Vg$}NE;=LTNE;=K$]]x|RW(%#"'&'&'&#"5>3232655%$ian ^Xbian ^Ve}$NE;=LTNE;=K$|]]&%5$%67%'Et֋$k}uU)?eKtuu" K 9''567$'567&'%=⃹t֋~}uRU)?Kuu,ަK9'_%!"54763!!"3!슊@^`@ƍ^`_75!27654&#!5!2#@`^@Ȋʣ`^; #";3!!!!#"54763^`0rrndflppꊊ^`&pphƍ3 32654'&+ #!5!!5!32#^`0rrpp9^`phƍ7!!!"'&54763!!"3!Ɋ@_`@,ƍ^`7!!5!27654&#!5!2#@`_@Ȋɖ,`^ȋ '!";!!!!'7!5!7&'&54763!7!!ʉ_`'}E=aLT>scL0R^`5ƍ7 '327654'&/!5!7+!!'7!5!7!5!^`__BV 5cTpX?bLm>U`^`C 7 Xȋ5j )5!7!!'!"'&54763!!"3!.Bqx-qxDɊ@_`@Z54&'&'$  &'&'&547676!!#!5!]\LMLLML\]]\LMLLML\bc1111cbbc1111cbdd''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcbee$7!!"2767>54&'&'$  &'&'&547676r$]\LMLLML\]]\LMLLML\bc1111cbbc1111cbתa''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcb$3?"2767>54&'&'$  &'&'&547676''7'77]\LMLLML\]]\LMLLML\bc1111cbbc1111cbxyx''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcbxyx$7 "2767>54&'&'$  &'&'&547676pxg]\LMLLML\]]\LMLLML\bc1111cbbc1111cbpx''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcb$73#"2767>54&'&'$  &'&'&547676]\LMLLML\]]\LMLLML\bc1111cbbc1111cb''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcb$ 2L"264&'2#"&54>"2767>54&'&'$  &'&'&547676ZPnnnoO@v+..]\LMLLML\]]\LMLLML\bc1111cbbc1111cbAoPOmmp1.-rB''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcb$+E %#'-73%"2767>54&'&'$  &'&'&547676C4f4C4/f/]\LMLLML\]]\LMLLML\bc1111cbbc1111cb1XSXYS''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcb$!;!!!!"2767>54&'&'$  &'&'&547676]\LMLLML\]]\LMLLML\bc1111cbbc1111cbj''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcb$37"2767>54&'&'$  &'&'&547676!!]\LMLLML\]]\LMLLML\bc1111cbbc1111cb8''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcb$!%!!!!#!5!QX>ddYee$ !!!%!!rPX>ת\$   ' 7 %!%!!=kyykyjjX>xjyjjyk$$ 3#!%!!aX>J@ <1<033!!upJ!#!5!3JI!#!5IssI35!3!|33!!Nup| !#3!!!!.NN$J !#3!!!!.$J !3!!!#3GupJ !#33!!!#3.GVfupJ!#3#3!!!!.cGGf$J33!!!'!'Ssj\s=u5Y6pJ!!!!'!#3!7!sjshxj56$$J!!'!#3!#3s6s=5Y6puJ!#3!!!!!'!#37!s:jsjG$-56$ 51  ^ bb:d 5! 5bd 5! ^bbb:yg62"'&'!"&462!6"264S몧Q3Q3TW4drOOsOOSQ3CB3RU4CDPrOOqyg"&462!6762"'&'!$264&"aS몧Q33TW4QrOOsOSQ3CB3RU4CDPrOOqbgR 7!6762"'&'$&"26b1[륢S4OsPOtO.D/YR3BPQqOOy;d 3#!!#3%!5!( 󀨨 ds <!##5!#T~N 35!3 3#K#"T^ !!3# K@ih^T !!3 3#K@#"쪠T^~ )3!!&'.'&ZVF%,E=Ώ?~%FVZDA?=~ !53*,Ԫ֪w # #}}wJw 3 3!#wJww@ 1@ 0"# #4$H̭9B( w@ 1@ 02$53 3H4CC1 (B9#u)HF 71  !!'+]^*^]䰰'B  ' ''ٛ>PNq^D^'B %  !'''tNP^D'B 5  5!''6bNP'B5 5tN>]P'B 5 'Nt>P`32?632.#"#"&'!5gV^naibX^naiUK= ;ENSL=;EOȪ^ 3# 57Ѧ^ 3#55=d//m.   5 5 5 :6:6:6pr pr pr .  5555556:86::6:.  5 !5! 5?@Npo. 5 5!55?ްop9 %5 5!@op9 7 5 !5!?)W5$%5$Ti}$_|x]])W5$%$5iT$}B!]]|!&!%'&'57&%5$%67&%7*?;i@]0qw^%KA6#(AF+3273267#"'' 5cCXbh`^xnieEVhjb_zl]@LTND*F JVND+Fpo"%&#"5>3273267#"''55cCXbh`^xnieEVhjb_zl[LTND*F JVND+FͰW&&#"5>3273267#"''%5$cDXbia]ymieEVgia`yl]$}. LTNE+F KUNE,F]]x|W&&#"5>3273267#"''55%$cDXbia]ymieEVgia`yl[}$3 LTNE+F KUNE,F|]] 7%'%5 '瞃۞L О  @Y8@\9@a ' 7%͞G۞О@?Y@<9@}5!%57%!!'71|Iv\' :qߦ[@Z8@_}7!!'7#5!7%%%9Jpv\]FGjq8@ǹ@. !!#!#5! !'7'7!!5!5!xwxFbxwZwx# %! ! ! l(+R[SrvvP #53sàȖ0kTs*3#*P- #5sȠ-Tk0P 53ȠP*#0P*.P- 3#àȖ-P#!!s#s*3#*P,!!s`,P!5!#UP*3#*P,3!5!`,X #4763!!"]oeD9יfV],#'&%'53 763<(enK==Pne(!<  _AE_  <X> 3!!"'&5]9Deo>ܚVf]>#3]J] 4'&#!5!29Deo$VfX,&'&3!3#76l<(enP==Kne(!< _EA_ <]> 3#!5!2765oeD9>יfVu(3(7@% !!!5 5!!37d  hrv! !! $<Ff +   276764'&'&">  &vvrn66\]]\6666\]]\65kk\SS]\6666\]]\6666\!>32#"&'#'%53%&  s:{{:!8#!rܧ$daad]chaam@j.!3!3:^ &ۺ+#+#+A&6FVfv ]A]A]A)9IYiy ]+ + $%+$01! 4$32! 4$#"35%33!??qqW|A?rpG~+/ 8?+3&+3+A&6FVfv ]A]A]A)9IYiy ]3и/A&&]A&)&9&I&Y&i&y&&&&&&& ],9+ + +0)+001! 4$32! 4$#"!!56$7>54&#"5>32??qqWO\R!>/_N;sa=0>A?rpGM"?U(?N&:$}:iF D+B5+B+A&6FVfv ]A]A]A)9IYiy ]A55]A5)595I5Y5i5y5555555 ]5B9,5B9,/A,,]A,),9,I,Y,i,y,,,,,,, ]ܺ&9;9+ + )"+)?8+?2/+2/2901! 4$32! 4$#"#"&'532654&+532654&#"5>32??qqW v@X[}DuskcZX\[4yk_=hA?rpG]0OLGN<:,+>2+201! 4$32! 4$#""32654&.#"632#"&5432??qqWN\\NN\\Ta/w N 5jA?rpGb[ZbbZ[b#P =  "#/$/ܸ#и/A&6FVfv ]A]A]A)9IYiy ] 9!9+ + !+01! 4$32! 4$#"!#!??qqWkQ1A?rpGK '?K +=+1F+1+A&6FVfv ]A]A]A)9IYiy ]A&6FVfv ]A]AFF]AF)F9FIFYFiFyFFFFFFF ]%F19%/A%%]A%)%9%I%Y%i%y%%%%%%% ]+=9+/4F19%7ܸ+@+ + ":+".I+.C+C4C901! 4$32! 4$#""32654&%.54632#"&546732654&#"??qqWT__TT__jivvWQMKRRKMQA?rpGPIIPQHIPIvSttSv\\=BB=>BB 4@+>)+>+/8+/A&6FVfv ]A]A]A)9IYiy ]A>&>6>F>V>f>v>>>>>>> ]A>>])>9A88]A8)898I8Y8i8y8888888 ]+ +  2+ ,;+,5&+501! 4$32! 4$#"532676#"&54632#"&2654&#"??qqWUa.w O 5kN[[NN\\A?rpG$O <b[[bb[[b &2>+#+#*<+*60+6+A&6FVfv ]A]A]A)9IYiy ]A00]A0)090I0Y0i0y0000000 ]A<<]A<)<9<I<Y<i<y<<<<<<< ]+ + -9+-$%+$3'+3$01! 4$32! 4$#"35733!"32654&'2#"&546??qqW͞u>@EE@?FF?A?rpG>>'*6ޗ{5!!X3 2!@ 2 5!!5!!5!4)4𬬬 !!!!!4)4XXX 333 Nf  !!!@@@ Nf  53353353353𬬬 3333333XXXX 333322s's' !!!!@@@@22s's'!!!!\!!#!!#\!5!Z!!X!5!$Z!!$X3!-Ԭ3!-.*!!@Ԭ!!@.*5!3,,(!3,X5!!@,(!!@X3!!- 2Ԭ3!!- 2* #!!!P@ZԬ 33!!P-#,Ԭ!!!@# 2Ԭ #!!!P@.* 33!!P-#\*!!!@# 2*!5!3,Z,!!3,X !5!!#@PZ,( !5!33$,PZ,!5!!$@Z, !!!#@PX !!33$,PX*!!!$@X!5!!Z !!!!-XV !5!5!!,ZV!!!X!5!!$#Z !!!!$#XV !5!5!!$#ZV!!!$#X5!3!,-,Ԭ !3!!,-XԬV 5!3!!5,-3,*V!3!,-X*5!!!@,Ԭ !!!!@#XԬV 5!!!!5@,*V!!!@X* #!5!3!,-Z,Ԭ !!3!!,-XԬ !5!3!!,-Z,* !!3!!,-X* !5!!!!@Z,Ԭ !5!3!!$,-#Z,Ԭ !5!!!!$@#Z,Ԭ !!!!!#@#PXԬV #5!5!!!!P$@V,* !!33!!$,P#X*V !5!533!!$P-#ZV* !!!!!@X* !!3!!$,-#X* !!!!!$@#XԬ !5!!!!$@#Z,* !!!!!$@#X*5!35!,-𬬬!!!-,XX33*!!@@*DH5!5!xX333x 2 2H !!!!-Rx !!##xmsZxH !!3!!xm3-sZRH !5!5!5!,NX 5!###lZZXH !5!!!5!4l t,ND 3!!!--Dx 333!x,ԬxD 3!3!,(D 5!5!5!3,,D|X 5!333,,(DX 5!35!3̠| 3!!!!-- 2Rx 333!!xs 2 2Ԭx 3!33!!-s, 2ZR !5!5!5!3,,X !5!333xtZ, 2X 5!3!5!33t, 2H !5!!5!4R 5!!###sZZH 5!!5!3!!t,-sZRD 5!5!3!,-DX 5!333!,,ԬD 5!5!333!DX,!5!5!5!3!!!!,,--R5!333!!###s,,ԬZZ !!!!5!5!333!-s t,ZR, 4763!!"Q[yY[`~| 4'&#!5!2.-Yx[Q`~=?x 5!2653#xY[Q[~|2Ψx !"'&533![Q[Yyx2|~>3m 2>#3> 2> # # 3 3>ݲ}#$cc|5!F3F~|5!|iF3P|!XF!@F~|!|iXF!@P5!5!!5iVV333PP~P!!!iXVV#!#P@P~P;( ;!O;!O ;!O;!O;!O;!O;#!O#;(!O(q(!((!((!((!'(I(!]((!((3(:( ' q( #'+/3!33!33!33!33!33!3mnmnm 4('/7?GOW_gow5'#3%5'#3%5'#3%5'#35'#3%5'#3%5'#3%5'#35'#3%5'#3%5'#3%5'#35'#3%5'#3%5'#3%5'#35'#3%5'#3%5'#3%5'#35'#3%5'#3%5'#3%5'#35'#3%5'#3%5'#3%5'#35'#3%5'#3%5'#3%5'#3(;(!%)-13#3#3!3!##!#3#3#3#3#3#3#^^(ll(lm#;( #q:( !&9 '( 9(& &  9(&  9(& &  9(& &  9( '9(&  9(& &  $! $!!!,7r+uv ))xxp) )$7632#"'327$%&#"%632#"'~~~~eMM>yJJJJJ6````qq|qq#u"@91990  9%-p) 327$%&#"%632#"'MM>y````qq|qqr' '/7?G%&'&'6767&'&'7%'676727"'64'7&"'62&47\+;.81F9K58.42d;E9G,:.80G9J6&8.;+d1O9FLL&_`JnLL'`_n<1& j(0=Ju &,A=N:0('<1& j(0=Ju &1<>EB0(n_II'[[JnII'[[p) %/36%632#"'327&#"6767&'&6py AAAA,+-,,-+A@@Rqq|qq%%mܱ[0$ %@%|"p) )73276'&#"7632#"'327$%&#"%632#"'r99:9rr9:99XWXXXXWXMM>yB!!BB!!oe33eje33````qq|qqp @ 104767632#"'&'&pihѵhiihҵhiѶiiiiѶiiiip $32#"$27$%&#pkk<MAk^a``p $32#"$"3pkk<MAk^``p $32#"$327$pkk\MMAk^>``p $32#"$%&#"pkkAk^>``p $  $"327$!pkk]<MMgAk^```p $  $"!pkk]<Ak^`p})6%63"'pRqq)#2y|q*q( 2654&#"!|~}}|v< ( $%632#"'327$%&#"!IMM>y_O````|qqqqH( ( !#%&#")%632OyyMMqq>~``  3327$3!#"'$@1>qq``) %63"æqv`) 2#%&#u)q>` 527$3Muyv`>q "'$33yuMq`p)%632#%&#"puqq>``p03327$3#"'$puMMuyy``>qq!$ !$ !$! !$!$3! 2654&#"4632"&nȊce;~|ddcc||}$!%!!d r<$!%!!We r<$!%!W7 r<$!%!W7 r<$ !%!!!!+c,b r<<!$ 462"! W|VV} ,|VV|V !$! c  !$! b  p(  7& $  %;<*X֖$ !!!!!!,7,rWb<)) Ie$ !!!!%!!,crWbM)MM^??@7`d?\gOOOOy>*<?v^h"3263#!5276;'4?'4?26u'6"gP39.4! '*C0.xV#m14He '1l1 Z+dd?33 #&'&+"'&#"/573;2?"#'57#&'#"#5676!5:+#9,p!j[%+ > 7VCCc":8}V .e3B=Se` e9*=9 3@=}k %C`:d;emu}'S3273&'3327&'67&'67&'67'32654'&'2327654&#"3672 $54767&'&47'&327632#"/#"57#"54?'&5432'&27632#"/#"57#"54?'&5432'&327632#"/#"57#"54?'&5432'&27632#"/#"57#"54?'&5432'&327632#"/#"57#"54?'&5432'&27632#"/"57#"54?'&5432'4327632#"/#"57#"54?'&5432'&27632#"/#"57#"54?'&5432'&27632#"/#"57#"54?'&5432'&27632#"/#"57#"4?'&54327'4327632#"/#"57#"54?'&54327'&27632#"/"57#"54?'&5432&'67&'67&'67'&327632#"/#"57#"54?'&5432'&27632#"/"57#"54?'&5432'&27632#"/"57#"54?'&5432'&27632#"/"57#"54?'&5432'&327632#"/#"57#"54?'&5432B~ %<z*+')+(@&'$||e<-A}]\B-71SLoWj\vLL)(0/ (( .1(%%,* # $ )*f$% +) $ #*+f%%,* $ $ )*  \o  [ %)#&'%&)#`#$ *) $ #+,U  Q  0 E%% +) $ $*+&EC&V*,)-)-*,%&%&fБfU 3HhfeefhH2pu^QFs棥sKQGh!99!  !77!  4 4 22 K44 22 22  11                   7        %&%&%'%&%'%&22  //  g               44 22  ->O`q +&'&54?632332?654/&#"2#"/54762#"/54762#"/54762#"/54762#"/54762#"/54762#"/547672#"/54762#"/54762#"/5476%2#"/5476%2#"/5476%2#"/5476D.2`{4&/<) e>O ,4H3R 07K $   $   #  #  #  $   #  $   $  U $   # " $   #  7Q=KG<s-8PZy9z _e""#/2dt0&2j ,: . 4 . = ,  ,   -  -  -  -   .  .   ,   -   !! WV9`8 !! 7 ! !WVDu9`8N I 7%7&54769 }V&7A 6$ 8'^4? !2 7%7&547!&'6I@Y%14HFS"="l-2DC[9 &! 4$32 4$ #"&54>2JJhhq0^mNMn2Z^Z2K7iwBNmmN1Z00Z} C"32654%"32654&%#"&54767654$ #"&767&54! ggJIhIhhIJgg[ZQoy y}WZ[zADgJIggIJggJIhhIJgU\\Q srW\\^} A4&#"26%4&#"326! 547&'&632 $54'&'&632hIJgggMgJIhhIJg#@@z[ZW}yOOyoQZ[sIhhIJggJJggJIgg ][[Xrq Q\\} "32654&7#"32ɏǾ/`T_ȐɎ;P12Y}1"264&"3264#"54327&5432#"'&'3xyx& کZTdIU  k#5AMYer3#"'%&547654'!#"'4%$53!76=332654&#"#"&54632'#"&54632#"&54632&'&67632#"&'&676'.547>'.76$6&'&54%6&'&6>#"'.54>32#"'.54 [$gi< D""D =if%LW쥨驧r^]]^ !! !! . . *)X,),*))+. } +G  G+vKK9__9KKݧꧦ]]_""""s!!""W&. - . - a)," "  ))    !) /     p%-5AMYdp|5#!4'&'5#2#"&546"264"264"2647>'.7>'.676&'&>&'&7>'.%7>'.676&'&676&'&53!76=3%#"'676%27+%&547654'7327&'$%'#327%654'&54718楣. . . .  - -Y - -))G))))U*)>- - ~- - VK; yA C0B Ax ;K'6FJ> $06# >JF6&@@1AeA1@@H磤椣筁 . . . .E - -- ,1))),(9)())u- , - - G77W6 W77G D&& ee˥ &&D "(=pp=("u !!'!Pn8hv "!!'!##+572367676MoL)>u eI3?ba8hA:F;/Itxv !!'!  ##' Mo_h[ei[i8hi[ef[l[@36273 ##'5) U.WW1@ US Vdv#,5>~3+&=43+&=4%3+&=43+&=43+&=43+&=43+&=4%33 #&'&+"'&#"/573;2?"#'57#&'#"#5676!5\:V\9\:\:]:&]9[\::+#9,p!j[%+ > 7VCCc":8 #8d#7$6$8;$7i$7 #9pPL  )Z. ;6ZV Z3%Y63 .87p  3DMy!674#!!6?676545&#'323276767654#3#&'&'454632767!672!&=75$/563&43!32+'!67#>54&53# ? I :W0 96;E,Q 2:&l6x0 bm! o۸"\>%Ef~e2U6g!6V#p5C+ C ? P9 @7H4XmM7RV /M(=H: ,qLUD)8Wqke-Pex NW =$ U  /0c)H?2@[nDF8T$.J? !' !T4XKGwL5_K !'7W4Z~wDS&5476322632%632#"'&'#64'#"'&'&54654&'&54767632xJX%&XA,B:\8 [EMH95##Fl% !9@!#jL p_Mi#"?8" %lF##58HN4hok@RRr*%te BB9'7*$%) "fXS5EIf" )%#,7'9CB >E3#"'4332327$'#"$4727%672567654&5&oJ7.b9M D ,B3 qY 5**]d=HN9% sW$,J ]T-MMm@ed: ,'Z M'cM&T)$$ < I2%!"&54676737#&'&54>;7!"&546767!7!"&54>3!6763!26P+=6/2D>R+>2,+v*>>+2  ,2 =,2  =,3>,2463!2!2#!!#!32#3#!>*v+,1>+R=D206=+P#,>3,=  2,= 2,  2+>{"D%4&#!"!0#"3!!"3!#";#"3&'6737#&'6737!"'67!7!&'63!67!2I0!6OS SS: SS>SS]]J]]]]h\\, Bv*>K%39LKIOKHLKIhghghghgE?-L!D72654'6#"'4#"'54#"'54#"'675674767#%$4:JILLHOKHLKIhghgighgD>-sJ1 b6'SS cRR SS?SS\\K\\;\\]]!A*>K{!C%254+'3254+'!254#!'!24+!&#!"463!!2!!#!3#3SS?SS *vA!,]]j\\\\K\\IKLHKOIKL93%N-?EghghghgiL!C32=732=7325732'654&#'%2&'&5&'5&'IKLHKOHLLIJ:4$N->DghgighghSS=SS SSb SS'6a!0J)K>*B \\]]:]]J]]}O &*.26:> 3656;2#'7+"/#"'+"5&54775%"'5476;25'7&56%635&56;374765'75'76=4'&+ +"'4!#"'4543$365&5&#%#754'&5&&547'5367&547+&'&'735&2?"5%75537'7'3533553535'32767&5%2?&#%55'5757757751:e,$?F?Y>F_LA3ELH3,8LYLlEF'!0< k#gF  EeY!! Gp&iq.8ZN$%`BCf F4"4._?ee3&{E(1-+$Kt8 -  $Gs sM rEF"2 >_plTErf^5.>=9|5"-l)d ,&>vv]cccWpC-+ d8 Bpp>W]oaxvuPp82,D ^8, ^B$K+ "1R[+e*; 2 W QP I&? gpo% w ^SA$ 2 9i-5n02 Ai&IY^P]D%\??\OWC ,,1 /211/=;7777=321811{908hN%b\Dh,)h?17I21!122223 21&2%2#"'&=477654'#"'5473Bq4|l anN ilm b 9 b؍MOb>YaYƮ58l7P P@ $0<FX + &=6&# 3 6=%&#"';27!5%67%!&'&'2+"'&=476r cR~UY082.ԍ_W_V"+}IR8D).P9H'S]ٱZYHYoX(I_ ;.2lOP%.G6R%&I8d)Nl>54'67&54&#"&'632.547#"'&'#"'3267654'7327323.#'654'567654&&5476;'&'%&+"#"8DH$$yU ?L[>!WtJ([Fho*m.2\=w\`|UP7:/E" @7?EP]Eix pF@T5ym,"&eB@q(A _% #+B7!N &".OS$XE/K(Aa]dLP*'FCaYr=C44mo C (FKWYFvbph'UD'R< $d#+?Vm#327&"#"'7'632&'$54#&73254'&#"'5&567#&''5$'67'654'6'5$'67'654$'67&'654'''5$56732#"'&#"&'$'63&47"7&'7&'7&'7&'54'6546767675477&545?&''5&#" '6%35&'.54>23#67!&#"W  OB7[l#> F_Vh " "@.,=6tJ4Vp1EQJqMi vhpHI!:JJJ =4m\8B*?o v!"t,`s&*_~P1>5='g=>24<+-s[,*&sd1PT>3J@='h<42J-H#*YT_Y)*)X^TY*$D  ?>}>  *0t"J.  &b54CUE ''!`9 !,(MTE *! }q~=/+)f[4f !B" <@0&9c?"V+GoMK~a? }b9e\ P&0@k"?c*GEJX ?e}9 \4 \6 '''' 6\ N(&'65&'67327&+!65+"3yyys{w ccޱqXeXc6 6 c ,35'533#3!'#'5!5!5#53!5!5#!!-ʷ}} ckvG G @<<3ffX苜qXGccGJ 326&#!2+73 ### 3(ttvgnؐB(33#!!#'!'57!5#'5735׫$"q~q+!#!573#'5!3!'573!#'73!#'5;jjŠJss<wѡIjj8/w{,32#' 3%+ &5%6323'#57'53^VQ6>ѨABؒ6ʞG2k >Y3~||~Obs32732753"'#"'4323$4'5;+"'#"'53275'&'&5?5572%#&'&5%634%476=%@.!%,BE,#!-Q2" $nL/PuHED832#"&546324&"26%! !  Őb{=&*<<*(;E;R::R;KJ67Ϛ{ɬ)::)*<<**<<*):<'L67I&' &' &' &' &' &' &' &'  @FLRX^djp3264'&#"&47367'676756273#'#'5&'&'7&'677&'67'%%&'&'%6767%&'0/CB^0/AC/pkTcR|'N(OfUippqUfO''NQaQh!$ b)dLQk KRt!% c'd&//^000'N'|P_PfppoQ`Qy'N'P\ QgppmQ \Py,  M N>&`7" bK*V&"g{ M M %1=! !  54 #&'&#"#46324632#"&%4632#"&67KJ]_EASvwSAF͒D10EE01DD10EE01D7IL6a]U@SS@U1DD10EE01DD10EE %1=! !  54 3327673#"&4632#"&%4632#"&67KJ]_F@SwvT@E͑D10EE01DD10EE01D7IL6a]U@SS@U1DD10EE01DD10EE %1! !  5# '&'32654&#"32654&#"67KJ;lWPihQV<=UU=-1\ H0e%FKSwZGr=;=NN$E| 1 ?'_>?@7`d@\hPPPPy?+<>w_VG{?,rCA+ +"'5$76%&'547327676=&#~jt1/Q}](+VRxbO P >nS]] =fP+! &56;2'5$%75#"3ui1.P~N](7P,VSZycOpO >S\^ f0:1>7#'#53'&'&54767&'&=33676=3#326'&i($lm$(($[Uu&tU[$&uU[[UV$|ddb e|$% ZSSZ %_TYYT* $4&#"326&5432!!##53&w衤礡PP䤣L~||* $32654&#"%#"54767!5!33#b衤礡7䤣L~|| $&$76+"'&5'476!7!ttsstEus pid5s qttrtt<֤ꧦg\ulS5264&#"#43233#!5 z{ym㗗y{(|j#53533#632#4654&#"#*jjoon}mZyH{zF2 1"32654'#"&4767!!53#5!!3!!#3!!pOO87O:=0LmkL/>Λ2  1O79NN970LؙL1KӘJJ-'<%#5#535&'&'5'73'3#'73'676=35'73'33◰zhNgeMjzzTThOʍ7NjYYӖy?! #!!!'!27674'&#.d ;6zFH%QM_\ǃ$P<]$!#"#&5463 67!2#654&#"V⩁"T]ts]U"X"1((1"u." 6&'67>3"#"54767&'&#52&͕LVa{.+ؔ)0zHUM\&ϖ=Bll)'ҕ*l8lB=j&'5 %$ 56?63#'[Wtutu4ZZ//[[5  @Eo&<"3264,'532'&54632264&" &$#"#"&547>B_^^l;͓hI^9l:͓hI (+|TlgMLx)+{TlϔgMM M>54'.#"32463227#"&5454&#"#"&'&54767632254&K2q'$#K1o'#0ߴGdAoc.% 3t88bWDs-Kx68<32>32#&'567'45'#&+"#4'3>$4&+"?w(K>R0D32>32gYYYD,.:?#)v$E?w(K>Ro}vvxJvaAjtAO]ƀwϧ!5!3##'!5!~2k<@i8080k<j)127632#"'#576&#"4'5267>327&'"SkQmyz,~zi2@:$(.-)zW] ݾgvx-aX[&ŝ9{'Q32263227632&#""'&#"#"'&#"#'3232762327632&#"#"'&#"#"'&"#'Es- p86rV+)|m^?_354.#"!&'.54>325467675#53533#63232>54.#"P#3JTRJWVJQSOMJ4"?*&ElnhPL$ llill %LOhnlD')----+)QPQ((QPQ)+/ 6klj$?6FWWF6?$jlk6 }++--JHNRh|&'4>32"'4>32&'4>32&54>32&54>32#!5!'!567>54.#"32767>4.#"327732>4.#"327>54.#"732>54.#"M_ 6694S55.+C55C&.66 V\+55 c$M##$ 6$#$s`%#$d0"%)h #"#_33@]22-"40446/*33UJ"+33^1/K=0T* ####  #&$$&##&$$&#  B #### *"$$" U!'-2!35!#3!53573#'5#5!35!75!!5'57!s\\ss]]s JRRIJ~֛E77__vtt4!v7CQ^&54767&'&'5676767&'&54>32! 535#5##3654."!2>4.#"  <$))+N-N*)N-M,**%:  @ v<-MTM-?K5:66459<5&?HPPIK* ')+K**K+)' *KIPPH>&5<:6uN|l||l|-I+N))N+@6:55:5Q)5>o654&547!&54='&'654'67.5476;+"'5#"=6&'76767%25#654&'Fz-6 Z8. ,N0H!h6%`+EH )#M ;,Jga#iR k' M +1^hgo8:(@s.Pmz nx?.#1p#41`&>%!ac,,LHJ x}647| + OJJ)!0 P[32>4.#"32>54.#"!5&54767&'&546767&'&4>32'&'.#":e79e89f76e`[S &(*UM,N)(N-KV)&& \@ECApd88dpg669:%N&KRS* 'TM**MT' *SRK&N۠:9}qyyq}c $Tdhy67&'&"!3!67>54.#"!&'.54>325467675#53533#63232>54.#"!57!&'.54>3234'67632!P#3JTRJWVJQSOMJ4"?*&ElnhPL$ llill %LOhnlD')----s=BDw@>=))==AwDB=+)QPQ((QPQ)+/ 6klj$?6FWWF6?$jlk6 }++-- !yCB{C!$$!C{BCy! JHLP&'4>32"'4>32&'4>32&54>32&54>32#!5!5!M_ 6694S55.+C55C&.66 V\+55 c$))_33@]22-"40446/*33UJ"+33^1/NNOOU%)5!5!!35!#3!53573#'5#5!35!s\\ss]]s ^^/oo#E77v4@4767&'&'5676767&'&54>32!&535#5##3  <$))+N-N*)N-M,**%:  @%v<5&?HPPIK* ')+K**K+)' *KIPPH>&5<:6n5|l||l|L3?HN654&5473#!&5454'+#"#7&'654'67654&547;2547#";65'"3%:U"-6 Bu Zg0krX0c-h8E+`%s H>4wM-'9.QY / o8:qhPSmh #%Bz1"0@)5"@YR0.&54767&'&546767&'&4>32; &(*UM,N)(N-KV)&& 9:%N&KRS* 'TM**MT' *SRK&N۠:9C##"'##56'##"/547?^'5@_*SU&/UL ;Yԧ9UP(` XI.s222732#&547636=4'&# #4'&#"*t pz&=<xQ>hG:V Hek%PF5NP B|-&pA&NFX &&5 <F:^;" V gdG7236;2"##'65##"'&5476;235&'&=476e x<JT`(GeRUdfB3 VNTMT,P$ 66$0_ u3dUdt_}s*$"Rt0XX__/ik=ZG8*F 1 . ъf)MC =g9EkO 9!(-);&  ]t!y" & 2| ba$ U+  #8M35733!&54?'7'327!!"'&%#'7367654'77'7'&#"'676ի,&T>=c#]K9.U:1ʈ%`T?7>54&#"5>32&54?'7'327!!"'&%#'7367654'77'7'&#"'676]T@1$J=c#]K9.U:1ʈ%`T?32&54?'7'327!!"'&%#'7367654'77'7'&#"'676Z _3lFHe5^\VOosHGJI)`VKm1Sj,&T>=c#]K9.U:1ʈ%`T?=c#]K9.U:1ʈ%`T?=c#]K9.U:1ʈ%`T?=c#]K9.U:1ʈ%`T?=c#]K9.U:1ʈ%`T?=c#]K9.U:1ʈ%`T?32#"&e|e(<X<ħñ"32#"&$2#".46e|e(<X<ħñ"@<#"4.#"e|e:<#"< !<"#;zch =B4.#"$32>4."e|e:<#"< !<"#;"< !<"#<@;zch =B54.#"##"'5##"$'&'0!5!5&'.4>32!!676767'%''H&(G()G'%H(%'V W3WImuw>DE}AB|GE=md^JW4W Vs'H''H'(H''H`XAK|@X1(ԁ3"|}DD}|" 2/ "1X@|AX1# / 673&/'67 &'"&'6?&'3 ' K[]><+Gg['fBBe&\h?(K?]\K !;32T $ #AC,MMMv A5p_9D-M**  B@0"@R//>wA&oc/D&3.YaQ/5"1'"uE62/u= =!m- .... y 7%  %  32+#".=!"&'&'#&=4;7337_% 8)0/_^^M^1/ 9534<&&<&*(D>?GGzB6C{GG?>D9/C}&632#"&'.#"'#!#!#Ҹ62K#+~KF0R!9'/Nx_TV_T 'NQ9;:#8HL"CD|))Z) 532>4.#";267#&=&$32735&'.4>22[02[24Z1/[)'5*+X A54.#"%2#".54>''#/'7''7''7/5?'77'77'7?3777''H)(H('H((I\Hs=]SH$e$HR^323#67#&"#"/&'&547&#""'6%676V n*[n%'ZxL0<{2;&b;0&8a>!U*~EmLK}`? {a7c[ O&0>j!>a)E~CKW ={d{7 [+M57LL75M-Z '*''*' Y (5[ J5( \d (5J [4 ''/7O_2#".54>&'32367&%2327654'&''67&'&'&'676765467654'&#"7>326323#"'##"'&'#"&'&54767&'&54767232&'&#"6&%6767&'&'&#"676&5467&'&6732767&$$$$OG3%V cc V%4GL944m/122102/.303112.OF}6&V e"w?>v"pt #87! vn":;@A<:"nx !66# sp%./13/.UVT\<>"$!! !"#">kc V &6|FO 93399 <>#"#><  "$ZTU./43..V5$##$59gT;&'9Z^^Z9'':Tg9'(''&()I8:9889: Z_59eU;'( :8.>euvc>-7:bccb;7-?cwud?/8KWZZW **D@@D+8(':Te95^&)(&''(DA:AD.*!Y[[Y!& !-x67&'67&'4&6%67.'%4'6&#"&'6767&54?67&'&#"#&'#&'5&'"'67&'&47632>4.#"%2#".4>'7,3 3%/0),7=*#0*+3.22'8  YfT,1'').UfY >98 "2 B2;F_ XB?2C 3" 894ihgikce"S[XVWXZ#ejpMcNTvJKrZ1VlLWMI p jk%nA V{ww[11[ ww{V @#fd-#JM 7B/""0C7 NK",df#νhhοggQUXXUd %3!'#!52#"62#".54>" h9|M463%&$$5 O Dn; $$$$33'554#$/[QwGSGUW GJGX .5CK&5432632!!#!##53&4&#"326!&&#"327&54654'XP}}P~C;7?_Xej;A>7'sssLFF~||ב-  䤣lrrq)-5DL&'&6767&'"'&'&'&5'476!7!! 76'&'&'6'&utss-5 l&kpid=pDi/tEust,2}ts5sqtt-ԛ1 k&iꧦ g\}ul  An?\27/rtts,͓}qt)8GO'"'!!##53&'&54326!7!&'&36'&&5'47&#"327674'U`P}zpidu>7;C˂;C>xtsK) ||LGD g\uls螝՞䤣hkrr .4&#"326&54762!7!!!##53&w衤礡ᩨhn&䤣羚 o[tꝇ|| +D#"'&'&'&47>76327'7'%'27>764'&'."(F3"D"&%#}bV`ZZ^;D"&&$[X]:3G9:]:F=~=HS]^X&% iiD^29i\=<<92-1X?:<91*=X62'%'!!#5!5!5&'&'.546767''7'''7"2767>54&'&'&4p69].(EGGE@Z-<81VDEGFF'19T]9T:G5>+.11./:95>+.11./:9 \2:a(Eb_E@( %CE_bG(Hij:ο\ij+.wBAw./+.wABw./4+F!!#"'&'.546767675!5!' 2767>54&'&'&"<-Z@EGGEDVRbfNZ@EGGEDV18kbbjC9:/.11.+>59:/.11.+>5疑 (@E_bEC%##(@Eb_EC% kajP/.wBAw.+/.wABw.+ +F####"&'&'&54767>32333'7 '%32676764'&'.#"ܖU (@E_bEC%##(@Eb_EC% Uܭkaj/.wBAw.+/.wABw.+<-Z@EGGEDVRbfNZ@EGGEDV18kjC9:/.11.+>59:/.11.+>55 @  10432#"732654&#"陽…5 @  10432#"K +@kk k kKTX8Y104632#"&732654&#"ϑϑϘuSSuuSSu͒ΐSuuSSvvdPK!)7eK RX@ *.,&"($ k3,k($kk8991@&"6k0k 8<2<299990Y4632632#"'#"&7323&547&#"%6547232654&#"dϑRDDRϑRDDRϘuS?>Su^222Z>?SuuS ͒!!ΐSuXqpWv28ML88LM{WpqXuSSvTZ`z8Rm3#"2767>54&'&/2"'&'.5467676"2767>54&'&/2"'&'.5467676R#)$#R#$ $LK:C.25521@=:C.25521@=R#)$#R#$ $LK:C.25521@=:C.25521@=zZF)(JG()K.2IF21.2FI21F)(JG()K.2IF21.2FI21 J7Qk>767632"'&'.'!"'&'.546767632$"2767>54&'&'$"2767>54&'&'#61@=HK:C.25521@=:C.5%'21@=:C.25521@=HK:C.6#R#$$#R#$$R#)$#R#$ $5[51.2IF21.4`]21.2FI21.5[F)(GG()FF)(JG()KR 5%%%xr6׊eMM^xxV)7654'&'575#!&54767'5!s_vR$N::N$Rv_{aT,X@X,Ta{4b\)1%==%1)\b4ߴ:`\KDDK\`* 4&#"326&'&5432#w衤礡$PP䤣L~{lPj'#"'&#"'&'&'&47>7632327>76&'&'&/&'&'&47>762!2!%327>764'&'.#"&#"327>764'&'&s* 0$+$$$ 1#*# ZaZ%% NT12 4 #HH  ")mROeb  , 0  +   ) . $J . %'.D"&B 1 $C mR )Ky    !   V!Edz267>54&'."#"'%"'&'.5467676;27>4.'&+"'&'.54676762%632$"267>54&'&.&&.&m,mQjP(!N!"(! aVf&&bZ55!("!N!(PjoQm,.&&.&q    l?W,>&#< A#"< " (( " <"#A <#&>,W?~    lOOj3!#!"'.'&47676?6767>'.'&#"#"'.'&47>763276;%32676764'.'&#"676764'.'&#"32eOuRd2!  HH# 7   ZTN +Za21#+$0 4$$$+$0 's  *   * OK) Rd#!>& 3"9*$"D. ' - D! 2 . , T% #: & (  IZx-4H67&'&'&+"'&'&'&476767632%632 #"'%#"'&'&'&54767676;276276767654'&'&'&"276767654'&'&'&""'&'&'&547676762"'&'&'&547676762'&'&'&547654'&'&'&";276-&#"+"276767654'&5476%327%&"'&'&476762I  Q\C--%("(/*0.,+"( /X]\9<\X/"$)0*3')"* %1*0CR[        22 2 2 2 %'   &J  &%C\d#_*]OhXC%&  J&   O]*       ")&`&"'$"/' <%ZS  % SZ%< /'* "%5"-($# ;8\= !  !  " /VC "  !  !  [uV/+    V^au 767>54&'&'&#"&54767632 '.5467&54732#"#"676767#"'&#"'67654 ozwbda_f_zx|wbdaM,krnulspsnunNJ*D$ lQ$" 6*D?"5'K(2- # >   :72 331cd툍i`4331cd퍇>mwn<;;8ro졘wp:;;BV0/M8:D@*|sa  -F(7 "*=8&0!2  1-5$& 6:B4V^ (B\w.'%&'&"632%6767>54$2"'&'.546767" 767>54&'&'&'2 '&'&547676?'*&$ 1$-+h+-$F3782**?1 $&>>9|wbdabc`zwbda_f_zxspsnunˎspsnulwI_"2[$  "" gI $[2!v 55 55 31cd퍅caf31cd툍i`43d;8ro졘wp:;;8rown<;x,A-57'36%33#3#!2#!3#3##$'#7$@d5{sVd]F0 0F]dVs{5⒒d@( jPP,PP` 0 ")- !676762!"'&'&'&54!X$#R#+/RFF$#R#$1Sh,  k-"s!}P476?6763&'&'&547632676767654'&547632!54'&'&54'&&#"'&/&'&'&#"#"'&'&/&'&#"&'&'&?6'&'#"'&'&#"!'476='654'&545454'327654'&'&327654'&/%4-)"$0JK&  )7    %0'# #6 +-L __^/s4* 1( .266 |/(1   \   #:7  lS&   x71]/~[#<$  o_%@,: $";vR $X$+|!5DX&PY;9Do6 b'n2  83eF] 4T&  &  /50$?- 1@& 3l K  C"P1 :03<D:5XI.)D&[+-1:   q/A8   g+jl9Lp{7654'"'&#"+"'&54?67676763276323273#5%6767'&#"6"/67#"27632327654'73654'676547&p/l0&J!cS%YE]{@C"$4>-;% ,(6Y>m!N$X6"/,(4sS?X$U>"sJ?K(`./4+2K2.0>S Zp0+1^' ;cs  /^"|Y/ 428ۇϕl%%ot5oA='Y$ aT* ''G+- %_kj~r}jL`І|\gK@/.85c($ (2LS>54/##326?%%3254'654'3>7632#"&547>32'% ;66I   }g ?6qn   -> 9@ H67;  zh| 8 >6!q    B5>%+?F4&'&/76765'7! !'!654'!4'!!$467>2"&'&!654' 33 ^^^RXI#J2VlP# ~!88!~ Kppph,p<(##(#id (2LS.#"227654&'''%'654+.#"65.'&54632#"'.6#"%  I66; o |>?%6!q   9  ;76H   |h> 86qm    BX{[%G'23 %%.'&"27>7%$!"#232%"'&'.4676762%#"#2%k      A>>dIID`nS   SnGYn 5>5 n)(%$#"#64'232%%&'&'&"27676&22k**!n``n!##3W 2327632#"'&'&5476'( > !~GH ".4F+@xH )0$'*' 23277632#"'&'&54763'( e` }{*279HF`0@xJL 1 ,A  ' 7 Ɏ877Ɏ77ɍ8ɍ? tt7tt7t7tt7uB2632#"'&'#"'&54767'&54763267632676 Q   x L$3 z(   6X3  6*=P*> "#  R26#"'#"'&'+"'&'#"'&547&'&54767&&5476326763276T 디% $$YyX$ zc0 + j :  (̢1#: _$ #- Խ =1 '2ĺ pD #!!!!!%!!!!!!!!#!5!36HVBBXBBUHVPBXyBpD !!!!!!""p"p"#pD35#7!!#!5!3rrsrspD!!%!!!!!!r"p"#p"#Rb !!#!5!3ppEU l3!!'#'!!#!!3!5@,r,,_ r,,_>v #!!!!!'!!!!!!!!#!5!3hm_|P_H_pDK#";54&'&'&#'!326767657'&'&'.+3!76767>5{dIB,$2$*DEh{LGC_RQ|66R_CIJ{hED*$2$,BFd{LGC_RQ66R_CIJKIB`OT|87O\FGKzdGB+%2%+BIdzKGF\OT87O`BHL{dGB+%2%+BId  #!! !!! 373#'7#ZAA:Llحmllmzlmllm|}}|d d}cT`C54'&54762327632#"'&+"'&5476=#"#"'&476323(L,68x86,L zFvd0000dvFz L,68x86,L zFvd0000dvFz zFvd0000dvFz L,68x86,L yFvd0110dvFy L,68x86,LV^&'##"&'&'&4767>32367675&'&'.5467676236767>32#"&'&'&'#"'&'.546767675&   R.-R  R-.R "  *!""! ((\(( !""!#%   " R.-R  R-.R    %#!""! ((\(( !""!**!""! ((\(( !""!#%    R.-R  R-.R "   %#!""! ((\(( !""!*  " R.-R  R-.R   Sa4&'&'&'.546767622676767>32#"&'&'&'.#"'&'.54676767>5"#"&'&'&4767>32(,$ ((*& :.r06$&**& )'De!  'd8:b&$$&b:8d'  )a@/!  ')*&$6/r/6$&*)'  ')?c'  &d8:b&!$&b:=_& (bCc"  &d8:b& $&b:=_& (a?/!  ')*&$6/r/6$&*)'  ')De!  'd8:b&$$&b:8d'  )a@)' ((*& :.r06$&**& ((T`0267632#"'&'&'!&'&'&54676763267632#"'&'#"'&'&'&5476767!6767632#"'&'"'&'&'&54767#"'&'&'&5476767632!#"'&'&'&54767#"'&'&'&476767632&'&5476767632!#"'.'&5476767632&'&54767676Z   ( &            <   4          % (      (   2     6           %    <    %  (   W_2767653"4'&'&Wspsnullunsps;8rown<;;j>-'O^__^Oq44H4"hdd0!% %!-@jjjk**37'73 #'xxxx.xx.x..x  pD #'!5!73!GFdFGrEGdGErFGqFGdGFqGEd@L     - FOFc,OO,cFd,PO,dGOP T` '%%%%%% % -wD{wwe#w%f{wwy||y{xxe#w%f{wwxEy||y % %  Zp/AppA/}}ET`     - Zq NqqN  NrqN qrT`% % -ZyllylyyT`%% %% -ZtGcVGttGVcGGstGWcGtsGcpD/3%!!%#'''%!5!%777xo:U.cF.d;UǩoxoU:e.Ec.U9oE.f:UūoxoU9g.Ff.U:oxo9U. 54'&5476276767632+"#"32;2#"'&'&/"'&5476=&'&'#"'&'&547676;232?&547'&#"+"'&'&54767632676'K,68x86,L qA'C<4GW>L d  f L>WG4L d  d L>WG454&'&/54'&5476276767632+"#"32;2#"'&'&/"'&5476=&'&'#"'&'&547676;232?&547'&#"+"'&'&54767632676o**YK,68x86,L qA'C<4GW>L d  f L>WG4L d  d L>WG42#'"372"'&'&/"'&476="'&547>Q!//VZ *nN+G80j@6RR6@j0/P1N TP#00VZ ,lO@W+G80j@6RN6@j03L/N  ]H,`,H Yc!77\4OO4VA7gU3',H^ ]H,`,L&3c!77\4OO7VA7fV4&,H^67654'&"327632#"'&'&/#"'&5476=#"'&'&5476763232?'&#"#"'&'&5476763254'&5476276767632#"'&#"#"'&#"327676%32767654'&'&#"#"Z8%1T1%85e %ZF\ +m8BS/?JV@6RTXN6@VGB1QB8n* \FZ% e53e!&ZFZ *n8BS/?JV@6RR6@VGB1QB8m+ \FZ&!e3DA 5<; > +F$H$F+ > ;<5 AcJ2QD++DQ2J (5H,'9,J&0f) T|\`j4OO7g`\|T 'g/& H,9',I4( (3J,&9-H &0f) T|\`j4OO4j`\|T 'g/&J,9',H5(""'!$(:UJJU:($!'""nFw"2767>54&'&'767632"'"'&'.'"'&'.546767"'&'.546767632.546767632=>343343>==>343343>x>%85670-),(-%8/[0!-(,)-02y/8%0%)-02y/8%-(.'&$W/:#-(,)-02;>/;),)-02;>/8%-( 06{IF{6006{FI{605+'g>:c.&".c;=g'+&1N%&W'+&.c:>k#"$.c:>g'+,B:>g'+&.c;=?nF\v%"'&'.546767"'&'.546767632.5467676267632"'"'&'.27654&'&'&"67&'&'&'276767&5467'&'&#"32767>54&/76767>54&'&'&#"Z0%8/y20-),(-!0[/8%-(,)0-<1:3%>(-%8/|/8%-(>%85670-),(-%8/[0!-(,)-02y/8%0M=  H C# B/g H /*x#$  8## H g/B PP  $#x*/%N1&+'g=;c."&.c:>g'.5 ?=;c.&&.c;=? 5+'g>:c.&".c;=g'+&1N8GG$> >$ c.,bB$#>  Ir0C >'#> LM >#$Bb,.$ >#'> C0rI T`)T:e&'#"&'&'&4767>3267'&#"327%32676764'&'.#"7632#"#.4767676324676762>322##"&'"'&'.5#"'.'&467"&'&'&4767>&'&'.'&'>76?&'326767767>5&'&'.#"767>7.'&/32>7674&'&'67'&'.#"67'&'.'67676767"2767>54&'&'"'&'.54?&'2767>54'7654&'&'&"67'&54676762:    $4 4$ww4 4 xy   %" !()-+U$"! ((\(( !"&S+-)(! '7M"# V2% A()-.R$"! ((\(( !"(O-,*(A"#2P"# "M    ! *4 2 kk  4 2 uKK        i2 4* !== 2 4  `_  wR#$$#R#$$  8 < c !<>     8 < d!!<>   "%UV*) !!$3R  R3&!-(-%Z& "#%(.2$( &&S+,))A!$3R  R3'A))XT$""#%(`$( "      i3+!x== 3 _`        !+3 kk 3 uKJ   F)(GG()F$    %3 3%ww3 3 xy   V^3N^"2767>54&'&/2"'&'.4676762 '&'&547676% %-z35++++++53z35++++++5pWDM69?=;9JHDM69?=;9JHSspsnunˎspsnul}}(.h<;h.((.h; +F$$> +F$H ;<5 A~ ;<5 A+DQ2J (5H,'9,J&0f) T|\`j4OO7g`\|T 'g/& H,9',I4( (3J,&9-H &0f) T|\`j4OO4j`\|T 'g/&J,9',H5(G+DQ2J$(:U$(:U3!'""!'""A''7'753'75377537'7'#5''#5'7#5'7'7<B-DH2#"2767>5!"&54$3!57!#"'&'.5467676#_>I-743TP>CPNDG-2.1/&D9 88 '.* !-8D_2{j@F'%.3r@Md7+4V/2&'&54676762"'&'.546767Zy*,&''&%1]~|45,-++-,54|45,-++-,5(+&a4|d΃fz4a&$(F*.j=3"&'&'&54767>32rJ6464NN4646Jp`684F@NLBD64:866D@NLBD668^~* i654'&#"632327632!"'&5!267&'&#"#"'&54763247632327654'&547632#" 6+Jo.^V|;-˙it36?̺fQMeEJS?(*$ s]vh2K)*NL13^v:Mc*ZeC03N35%&-Kt\K%9S >BWN=!$?$8(F!5{^?Z Q67654 547&'&+327#"'#536767&'&'&5432&5476323254'&5432?-BO>=v06&%K`dC+(k$'eM?$#=Hb B=)+8=.m9eb PB>$3g:84!EB7WPfG+1KHP<Ff#&T'0P+A'<}DC/'"05276767654'&'4rceNS((((`hm@DDF/CD}>C/GFCG !&547>2; 0!!6P<:! !$ ! "#{! !{54&#">32!5!>??qq>0ţ=as;N_/>!RL}A?rFi:}$:&N?(U?"Mt 6+A]A)9IYiy ]1.+. + !'+!+9*'!901! 4$32%4&#">32+32#"&'32654&'26??qq|=_ky4[\XZcksuD}[X@v hA?rs ?<:32#"&'32654&#"75!5!??qqYe2hvvhDw_X@ϰ?A?r%aVUa/  23/4/3и/4ܸA]A)9IYiy ]A&6FVfv ]A] +  + +,&+,/&,901! 4$32#"&54632"32654&#"7>325.??qq\NN\\NN\qºN w/aTJjA?rZbbZ[bb*= P# + + 01! 4$32%!35!??qqlUA?rv]K 1=++ +A]A)9IYiy ]A&6FVfv ]A]A ]A ) 9 I Y i y ]/9;9;/A;;]A;);9;I;Y;i;y;;;;;;; ]5+ )+ +28+201! 4$32#"&5463232654&'>54&#"2#"&546??qq_TT__TT_⾭vijvkKRRKMQQA?rlHQPIIPPI\vSttSvB>=BB=>B &23/4/ܸA]A)9IYiy ]3'и'/-A-&-6-F-V-f-v------- ]A--]+ +  +*0+*# 901! 4$32254&#"326#"&'4632#"&??qq鿹ºO w.aUJk<\NN[[NN\A?rK < O$[bb[[bb $0Ӻ%+%+++A]A)9IYiy ]A++]A+)+9+I+Y+i+y+++++++ ]+ .+ (01! 4$32!5##7##"&5463232654&#"??qq$ŸuF?@EE@?FpA?r*'$ =$>  767654'&'!5%3!!  '&'&54767̆mommom4mommomP\|~{{~||~{{~|96oooo6996oo  oo6}9:݈@>}~Ա~}>@@>}~,,~}> =6P  767654'&'!!567>54&#"5>32  '&'&54767̆mommom4mommom)4 \=)N=kP`aF7I׺\|~{{~||~{{~|96oooo6996oo  oo6_A.Xx;_x55'(IZV@>}~Ա~}>@@>}~,,~}> =B\  767654'&'#"&'532654&+532654&#"5>32  '&'&54767̆mommom4mommomttLUDWx~zB\RGr=\|~{{~||~{{~|96oooo6996oo  oo6yt'(xrjw_Z\bd @>}~Ա~}>@@>}~,,~}> ='A  767654'&'!33##!5  '&'&54767̆mommom4mommomh*˪+\|~{{~||~{{~|96oooo6996oo  oo6 @>}~Ա~}>@@>}~,,~}> =7Q  767654'&'!!>32#"&'532654&#"  '&'&54767̆mommom4mommomz#G#KSLVAC\|~{{~||~{{~|96oooo6996oo  oo6c ۻ)%}|X@>}~Ա~}>@@>}~,,~}> =%>X  767654'&'"32654&.#">32#"32  '&'&54767̆mommom4mommomllm=|< /Vڵ =|^\|~{{~||~{{~|96oooo6996oo  oo6EKۼ>-O@>}~Ա~}>@@>}~,,~}> = :  767654'&'!#!  '&'&54767̆mommom4mommom\N\|~{{~||~{{~|96oooo6996oo  oo6`E#@>}~Ա~}>@@>}~,,~}> =#9E_  767654'&'"2654&%.546  &54632654&#"  '&'&54767̆mommom4mommoms慄htdthutԄ9tihvvhit0\|~{{~||~{{~|96oooo6996oo  oo6,{{|kl{Eggss\hh\]hh@>}~Ա~}>@@>}~,,~}> =2>X  767654'&'53267#"&54632#"&2654&#"  '&'&54767̆mommom4mommom=|< .Vڴ=}mmlJ\|~{{~||~{{~|96oooo6996oo  oo6DJټ@>}~Ա~}>@@>}~,,~}> =+8Ca  76767654'&'&'"32654'.  735733!  '&'&'&5476767̆mo5885om4mo5885omT,+VUVV++2QPPQΠP3p\|~-,g%&݈@>}~~}>@@>}~~}> = $!5!#%  '&'&54767{\|~{{~||~{{~|#:9q @>}~Ա~}>@@>}~,,~}> =6>7>54&#">32!5  '&'&54767I7ݺFa`Lk=N)\\|~{{~||~{{~| ZI('55x_;xX._@>}~Ա~}>@@>}~,,~}> =(B>54&#">32+32#"&'32654&  '&'&54767ir׸G\\Bz~xWDUL2\|~{{~||~{{~|db\Z_wjrx('°t=@>}~Ա~}>@@>}~,,~}> = '! !335#$  '&'&54767hno\|~{{~||~{{~|  @>}~Ա~}>@@>}~,,~}> =7>32#"&'32654&#"!5  '&'&54767CAVHSK#G#\|~{{~||~{{~|=|}'' %@>}~Ա~}>@@>}~,,~}> = $>2#"&546.#"32654&#">32  '&'&54767PmmlC|=ϵѴV/ <|=\|~{{~||~{{~|+޸KE@>}~Ա~}>@@>}~,,~}> = !35$  '&'&54767>h\|~{{~||~{{~|@fE@>}~Ա~}>@@>}~,,~}> = +E2"&46' 654&'>54& 74632#"&  '&'&54767Yt愄/tԃuhtt-tihvvhit0\|~{{~||~{{~|{lk|{{Essgg]hh]\hh@>}~Ա~}>@@>}~,,~}> =$>%32#"3267#"&'"&54632  '&'&54767!C}= дѳV. <|=Allm\|~{{~||~{{~|Q/=޸JDg@>}~Ա~}>@@>}~,,~}> =  :2#"&546$  !5##7  '&'&54767eddedddB¡\|~{{~||~{{~|>-/#&%q @>}~Ա~}>@@>}~,,~}>uPj !!5!!Pp#@pppt 7%FN4NGuP85 zD<22pJJt '-ZKFGNuP!!u\lE>~~>uu+"&'.546?!".4>3!'.5467>2p4,,$$,,42.p ,.".2."., puP8!5! %JZPJJuP8!5! %JHJJuP8 #3#3#3!!5 xx<<oJpppJJuP8 55!#3#3#3oPxx<<΄ΊXXXXuP8!!5 %JJJPD! 6>l>>PD ! DR>l>>P  BlvvuPb3!5 5! '&'.u$##+* ZJMM*+##$0U%!JJ!%UuP84676763!5 5! u$##+* ZJMM*+##$0U%!JJ!%U0!! ^r{VXeoouP855!Dq΄Ξ0uj%5!!53  !<9h9>uj%5!!53  !<9h9>+Z !73#57!!+ Id&+ъ2&+Z 5!'53#'!!!+dI|&22 !'!'!53 !Odcndh 2 3#5!7!!! ndnd;ch dd !53#'5!'! !]n2n22r-hJdc;dJdd 7!573#5!! !2+2n2nr-hLJd;cdJ<6767632"'&'&'! <'CZmo~yti^Z\X^Vqoti^?)X6nGCZ.//+]Y݀z_X0//+]>Iʞ BP "&*.37#37#37#37#5!!!!3'#3'#3'#3'#<<< 7&#"7'7 !%*BF8WU{FC*9oX:WubP 55!5!!'!XXddPRt '327'' !!iFB*8X:*CF9XUpt>*%&#">7'&'&">327&5467>7tBEH#&NKX$W/,0$" D5Hp*G6$"!0,0Y"W!F&'&#GGCuaP'467#"!4676?'&'.5!3!.5P5#$%"//"%X$# 5eeJ(0Y! "X0(Jet*.'.54?'#"&'2767.'32t)H5 X"$ #0,0X"KN&#EHEBCGG&'&KW"Y0,0$"E6GsPX'<6%"'&'.54676$4676762"'&'&&'.54676762$/+z >_ $#R#af#R#)>xbQu 88RK68# 88  vc<*676767632#"'&'&'&%.5467.546A ''+/54<3o8n23'9%%%%bb%%%&:?$ fLLf#&#/:&'X23X'rr'X32XV2c"'&'.54?654&'&'&#!"#!".4?64/&4676763!23!2767>54/&546767622 Z ;:td Z   c   uu  c  2c"'&'.54?654&'&'&+"#!".4?64'&4676763!2;2767>54/&546767622pW\xj IJ \W   8  uP^'#76767&'&/3#>7!5!!5!.'PSJl..&GG&GlHSi7*nK Kn**7OUnm'66'1U=Hd)dH=#u ! ! j.u-10 3%!#3!Zddd/ #3!53#5ddZd{3 #pph # 3hp&T&T[[ '#'#'##'x\xxjjxx\x,x\ehhP8\xYY73373737+.x\xxjjxx\x.x\8Phhe\x,OlD=072767>54'&'&'&"7#7676767632#"'&ew@RNJV !'7$"!3!&'&'&'!#!2767676wx !1cbbc1! "1cbbc1" `x]\LM&  &ML\;RR &ML\]]\LM&ZwxZQvcbddbcvQZ[RwcbddbcwR[xV''LM\7=e=7\ML'e;6\ML''''LM\6d 8   2@ @@ 00 ]1@   990@   <<@ <<KSX << Y5!!dx yxUZxxu 8   2@ OO __ ]1@  990@   <<@ <<KSX << Y'7!5!'7 wxy xZwxxd 8ڶ 22@ PP_ _O O]1@    9220@   <<@ <<@ <<@ <<KSX <<<< Y5!'7'7!dxxwxxUZxxwZwxxd 8!!5!! s]xwx]ix]xZx]xiu 87'!5!'7'7!5 ii]xwx]iix]xwZwx]xd 8!7'!!5!'7'XiiiI]xwx]h]xwxiii]xZx]]xwZwxd 8 !5!3# Y#xwxݪ-xZxYu 8 #3!'7'7xwx-\xwZwxd 8 !5!53#5! Y]xwx]Q7ii]xZx]Eiiu 8 !'7'7!#3!7'Q]xwx]iic]xwZwx]\iiu 8%77777773'7'7#'''''''uFFxwxcnFFFxwZwxnF,X@,,X ,,X@',,,X,,X@',,,X ',,,X@',',,@,@',,@',,@',',,@',,@',',,@',',,@',',', ,@',, ',,@',',, ',,@',',, ',',,@',',',@',@',',@',',@',',',@',',@',',',@',',',@',',',',@',, ',,@',',,',,@',',, ',',,@',',',@',@',',@',',@',',',@',',@',',',@',',',@',',',' ',@',', ',',@',',', ',',@',',', ',',',@',',','@'',@','',@','',@',','',@','',@',','',@',','',@',',','',pX,p,pX@',,p,pX ',,p,pX@',',,p,pX',,p,pX@',',,p,pX ',',,p,pX@',',',,p,p@',p,p@',',p,p@',',p,p@',',',p,p@',',p,p@',',',p,p@',',',p,p@',',',',p,p ',p,p@',',p,p ',',p,p@',',',p,p ',',p,p@',',',p,p ',',',p,p@',',',',p,p@'',p,p@','',p,p@','',p,p@',','',p,p@','',p,p@',','',p,p@',','',p,p@',',','',p,p',p,p@',',p,p ',',p,p@',',',p,p',',p,p@',',',p,p ',',',p,p@',',',',p,p@'',p,p@','',p,p@','',p,p@',','',p,p@','',p,p@',','',p,p@',','',p,p@',',','',p,p '',p,p@','',p,p ','',p,p@',','',p,p ','',p,p@',','',p,p ',','',p,p@',',','',p,p@''',p,p@',''',p,p@',''',p,p@',',''',p,p@',''',p,p@',',''',p,p@',',''',p,p@',',',''',ppp,p@',p,p ',p,p@',',p,p',p,p@',',p,p ',',p,p@',',',pp@'p,p@','p,p@','p,p@',','p,p@','p,p@',','p,p@',','p,p@',',','pp 'p,p@','p,p ','p,p@',','p,p ','p,p@',','p,p ',','p,p@',',','pp@''p,p@',''p,p@',''p,p@',',''p,p@',''p,p@',',''p,p@',',''p,p@',',',''pp'p,p@','p,p ','p,p@',','p,p','p,p@',','p,p ',','p,p@',',','pp@''p,p@',''p,p@',''p,p@',',''p,p@',''p,p@',',''p,p@',',''p,p@',',',''pp ''p,p@',''p,p ',''p,p@',',''p,p ',''p,p@',',''p,p ',',''p,p@',',',''pp@'''p,p@','''p,p@','''p,p@',','''p,p@','''p,p@',','''p,p@',','''p,p@',',','''p,p',pp,p@',',pp,p ',',pp,p@',',',pp,p',',pp,p@',',',pp,p ',',',pp,p@',',',',pp,p@'',pp,p@','',pp,p@','',pp,p@',','',pp,p@','',pp,p@',','',pp,p@',','',pp,p@',',','',pp,p '',pp,p@','',pp,p ','',pp,p@',','',pp,p ','',pp,p@',','',pp,p ',','',pp,p@',',','',pp,p@''',pp,p@',''',pp,p@',''',pp,p@',',''',pp,p@',''',pp,p@',',''',pp,p@',',''',pp,p@',',',''',pp,p'',pp,p@','',pp,p ','',pp,p@',','',pp,p','',pp,p@',','',pp,p ',','',pp,p@',',','',pp,p@''',pp,p@',''',pp,p@',''',pp,p@',',''',pp,p@',''',pp,p@',',''',pp,p@',',''',pp,p@',',',''',pp,p ''',pp,p@',''',pp,p ',''',pp,p@',',''',pp,p ',''',pp,p@',',''',pp,p ',',''',pp,p@',',',''',pp,p@'''',pp,p@','''',pp,p@','''',pp,p@',','''',pp,p@','''',pp,p@',','''',pp,p@',','''',pp,p@',',','''',ppd?8 !5!53#5!s]xwx]ii]xZx]EiiuP8 !'7'7!#3!7']xwx]siic]xwZwx]\ii 3'#'##-Z-x\xxx\.x\n #\733737#x\xxx\xZ'x\# n\xO'=%"'&'&'&767670327676764'&'&'&pk_V1..1Vbrx`Xk_V1..1V_kpIxXE?#!!';B]YQS@?#!!';BQ9.-\ZnllnZ_.x$-\ZnllnZ\-.)xF!F@RNJV>lmGСBk>DdW0Xdtsݓ.W@#.  -&.%)/K TX)8Y299ܴ]<<999991@ &$-/22907&54&'>5!2;#"#!532654&+CI02Kl>>l5UU5D>kB0GmstݔdXЎW2  5 1Vd22h' %#3 5' :' 73 ٪L^8bb:'B 7''ٛ>PNq'B '''ٛ>PNq^D'B ''>PN'B%  '''tNP'B5  5''bNP#u  u-3!3!!#!#!5 L3ͨ--Ӫ--333333#######5Ϩ---Ӫ---:k7!!  767654'&'$  $'&'&547676h08rtrrtr@rtrrtr VGFFGrGFFG;:rs죟sr:;;:rssr:Ŭɪ:k3?  767654'&'$  $'&'&547676!!#!5!rtrrtr@rtrrtr VGFFGrGFFGssB;:rs죟sr:;;:rssr:ŬɪKss:k3?  767654'&'$  $'&'&547676   ' rtrrtr@rtrrtr VGFFGrGFFG]x3w32x3B;:rs죟sr:;;:rssr:Ŭɪ3x23w3xuM %' Io& I' I% IJuM327!5!>2&#"!!"&' ;E 2&#"!!!!"&' ;E $;E Ϊ@z٨zuM&#"%"&'73275%>2";EC;EJ綠mzzuM*3&#"&'67"&'7327&'&54767>2";EIq(P >6D;E]InoSu=,HK%)AH!+p$ z1IosV2";E+@/V]H6H\nUm;D [>wfP3,,I6x/Ur]HH]lVzM>wrN3 F4uM!3#!!>2&#"!!"&'732w~9F 9 }9Gr0}}uM+3#>2&#""&'73273264&c)~9GcBnnVs~9F (6o~ç|K|oU}uMp.3#327264&#">2&#"632#"'"&'z;E-8pƖqS;E;DܛWI3>6я]z!zuM 13#64&"327&'&767>2&#""&'˔֐;E]InoSu;EcBnnVszяϐ-1Io7sV2&#"!!"&'73273!#3;~9G9G ūI}ޭ{ tMm-&#"!2#567&'!"&'7327!5!>2";Ed_``!;D ܻ`;`*I6ƌebIz`:H:`*F4uM#&#"7'"&'7327'7'7>2";Exx;EzxXyxzyxإzuM*327#467>2&#"#4'"&' ;E-A 4yy;E Z>Vy|-2PIϼ+zEa82JzuM'&#"63"&'7327&'&53>2";E*y;E\?Vy~+&8'zLFaI1zuM>32&#"#"&'7327!5KL~9GALK~9G⧅}}gkb>32&#"#"&'73275!KL~9GALK~9G⧅}}Р? 5 5FѶeѦ 55FѶ///m' 7/& 7'' 7'' 7' 7/ ' 7N:A%#"'&'&'&#"5>32326#"'&'&'&#"5>32326 5jbn ^Xbh`n ^Vhjbn ^Xbh`n ^Vg@PNE;=LTNE;=KPD:32326#"'&'&'&#"5>3232655jbn ^Xbh`n ^Vhjbn ^Xbh`n ^VePNE;=LTNE;=KPD:327&#"56767326 5jbDS4WVhjbm\Y@/Xbh`ES3VXbhZmMp[Y@1Vg@PD4KUNE;@LTNE4LRN"*,@J^po_N5<#"'3267#"/'7&#"5>327&#"5>32732655jbDS4WVhjbm\Y@/Xbh`ES3VXbh`n[Y@1VePD4KUNE;@LTNE4LRND:@J^T 5!5!-5 !5!uu/0\^ҲЪ~T -55!55!usҲЪ᪪/0N%#"/&'&#"5>32326!! 5jan^Xbh`n^Vf@PD:32326!!55jan^Xbh`n^VfPD:323265-5ian^Xbian^VgsuOE;=LSNE; =KJ/0:ҲЪ !(#"/&'&#"5>32326-5 5ian^Xbian^VeuOE;=LSNE; =KJҲЪ/0, -55!55!us%ҲЪ᪪(/0٪, 5!5!-5 !5!uu%/0\~ҲЪ^6 5 5 -55uu/0V/ҲЪа/6 -555 5uuҲЪ۰/'/0K/& 55p/ѦѶ& 5 5p/om//&' 7/&' 7{ 5!5 5!@Ѫop9{ !5! 5 !5!@Ѫ555@pNpop 55 5@p pU(".#"#"&'5327>76325hV^ n`hbX^ nbj@TL>7632 5hV^ n`hbX^ nbj?TL>֪VJ<:DNTL<:DNDop$+5!5!.#"#"&'53276767632 5hV^ n`hbX^ nbj@>֪VJ<:DNTL<:DNDf $!!!5!676762!!&'&'&!!C.8d 6WYYV7 e8-;Z{+DD\93[2332[0<[EC,W7!!%5$$}y]]x|W%!5505%$}$y|]]W !!'7!5!%5$ZZ N$}qPP]]x|W !!'7!5!55%$ZZ N}$qPP|]] K75!5!%5$!:[]3֪k-QtXVv K75!5!55$%$][:!3֪kVXQ-qK!5!7!5!7!!!!'%5$&`ȉ)P"_=6!:[]ss1st-QtXVvqK!5!7!5!7!!!!'55$%$&`ȉ)P"_=6][:!ss1stVXQ-y:E#"'&'&'&#"5>76326#"'&'&'&#"5>32>%5$ian ^Xbib` ^Vgian ^Xbian g!:[](NE;=LTN9 A=KOE;=LSNE;C E-QtXVvy:E#"'&'&'&#"5>76326#"'&'&'&#"5>32>55$%$ian ^Xbib` ^Vgian ^Xbian e][:!(NE;=LTN9 A=KOE;=LSNE;C EVXQ-6A#"'3267#"/'7&#"5>327&#"56767326%5$jbDS4WVhjbm\Y@/Xbh`ES3VXbhZmMp[Y@1Vg!:[]$PD4KUNE;@LTNE4LRN"*,@J-QtXVv6A#"'3267#"/'7&#"5>327&#"5676732655$%$jbDS4WVhjbm\Y@/Xbh`ES3VXbhZmMp[Y@1Ve][:!$PD4KUNE;@LTNE4LRN"*,@JVXQ-7 5@pppo%5555òi ' '!]#\e#N\#]x#L   !77 ! \ݿ##N]##4 !7 7:\#]x#L]ݿ#\eL#1 4  %''' !]ݿ#\eL#1\ݿ#]j#7P~ % ! !!5 5!3!   7?~% !!3 *^V !!^*  ^V!!!^ ' '!##L  !  ##4%7 7#L4L#1 4  ! L#1#7P~ % ! !3!߆^V ! !! !ECuR #7!5!7Zxx/{xx:xu-R '!5!'xx vx:xH% 7!!7vx{/xxxƪxvH-% 3'!!'Zxx vxx$!%!!W7 r$!!!W7 $!!,7r32 &}f[_ &}f[, %$R/ %$R !2+##5332654&+!ʿ[qrqqϐђАfT$@  $ !? %29999991@&  B  $/999990KSX9Y"@&]@Bz%%%&'&&& &66FFhuuw]]#.+;#"&! 32654&#A{>ٿJxn?M~hb–m؍OH#(07#5#"''7&546;7&'&#"5>327354326=-?\g`n;) T`TeZx_958>cc3Vfa<}NV{ E..''rOs+Ax.ٴ) 3{ B333#;#"'&'##53w1ѪKsQ fև3͏oNP r>-!#4&#"#3676323#d||BYZucce22wxLj%3###3!E3A1wH33 3###%̟8ǹiEL#\ !!#!5!sP=g՚oAX` !!#!5!qjLl}e`R%sw-@ 221/053#5# !232#"MT+焀\\xEEf! !+53265##-}-MDnh %!#3!3҈R={6762354&#" #3$ )rQTm*T:rrD  # #3 3 67632#54&#"f:9:54'&'&s~&&~~ڢ~.]=@N\N\.]=zz❞zz}qa !SM!R}|pas?#-n@.  '&$ /$ .9999991@ .'& ) )./9999999046$327#"''7&7&#"4'32>s~&Ġn~ڢĠnՑꏧw֜\w֜\zvijޝzwkj!^`|g^` .@   <<<2221/03#3#3#3#):@  1/<0@22 # #3.]F; -@    1@  /<<03!#!#!"9q><@  9/1 ]@ /<220KBPX@     @     @ Y333 # # \Xds3{ 1@   <2<2??]1/<2<20%3#3#3#3#\ 7@  91/0@ BKSXY" !!!!&TdD՚ohh $@    1/<<2203#3#3#hhh0o !@  /221/220!!!!5!!o&.-ժo1/,@! ',01*$ 022122<20!"'53 !"563 676!2&# !27# '&%4rmyymrO4%%4Trmyymr4*B6!*:'(8) 6AB6 )*!6oP@   <<222<<<<21@   /<2<<22<<2203!3!!!!#!#!5!!5!!n""xxyyrr3@21/03!!!ժ,o7@   /<<2<<21@ /<2<203!!!!#!5!!5!CCPPxyr7@ KTX@8Y221/0@ 0 @ P ` ]73#3#>@ 10@ BKSXY"47!5!32654'3! $x˿ßwNetwc #/9@1E- !'E0<2<21@ 0*$002654&#""$54$322654&#""$54$32,,,,PIIPPIIPPIIPPIIPs'(@ ) (1@ #(046$32#"$&732>54.#"s~&&~~ڢ~\ww֜\\ww֜\zz❞zz}``}|``s,P@  ! #.# -9991@ ! ((-99046$32'#"$&73277654.#"s~&&~l~\wj\ww֜\zz➞ikwz|`^jI|``; -@   1@   /2203!3!#,dq9d (@   <<<<1/03#3#3#QIh ?@     <2<2??? ]1/<2<20#53#533#3#3#h+Is'+>@- )(( ,9//)]1@+(#,046$32#"$&732>54.#"3#s~&&~~ڢ~\ww֜\\ww֜\zz❞zz}``}|``s>,P@  %$#& !.! -9991@ #&$%((-99046$327#"$&732>54''&#"s~&Ġn~ڢ~\ww֜\pw֜\zvikzz|``|?l^`sr%1=G@8&,20><2<21@/; 5 )##>9//0! #"&547 !&54632! 32654&#"4&#"326sS_  _mz,,,,,,,,gs'O;H66H;O'sz<11<;22<11<;//d #@   <<1/<203!!#!5!IIjk=;;sr3?Kf@F4%+6:0L2<2<29/<<1@=(I C (7##11L9///<20! #"&547"333###3&54632! 32654&#"4&#"326sS_ ̻A;z,,,,,,,,gs'O;H6ߊ6H;OO4z<11<;22<11<;//;@   2<21/220]!!!33##!!!>ժFh";@ 1/<0)3!3;+y=@ B <1/20KSX@Y!# 5!!!8ks#O@%$!  /<<22<2<21@  /<<<2<<<2032653#2#4&##"#3"3ʊyʊy+VVF%F.@ KTX@8Y1/0!##u-s+f@- ,&'  #+ /<<<222<2<21@+*   #*'"/<<<2<<<29/<205!5"3332653#!!2#4&##"#35ʊAyʊy>FV>=VF=6-@ 1/20!3!3M-'6'6'6'6'6&6'6&6'6&6&6'6&6'6&6&6'6'6'6&6'6&6&6'6'6&6&6&6&6&6&6&6'6&6'6&6&6&6&6'6&6&6&6&6&6&6'6&6&6&6&6&6&6&6&6&6&6&6&6&6&6&6&6'6: #'+/37ڷ/$0(7,48<<<<<#+ 3'<<<<< <<<<< <<<<<9̰XKRX8K bf TX30<32#4&#"#9`M1Cuȸ||MM 7BuƸ||e,'"xMfca?'Gzed\V5<!"'&76763!!32653#5#"&5#3!#"&5332765!"3ە^SWsv||CusCuȸ||WVۃ^SBWLa{fcBVfcf__{{V H!&#5#"&5332654/&763!6763232653#5#"'&=4&#"#9`M1Cuȸ||MM 7c%Zk>8nClbd||xe,'"xMfca?'Gz2XO{fcx{䟞[t`&V 332673 &Vv aWV` v ޞKKJL[`&(SN~`6@  F991B /2<0KSXY%2767653)5!3$Wq2!dj±/8s4tVg` ##4673>=3|u˷d7<T "yX`#!5!e/я`!#3#4&#!5!2snJvy–X`35!26&#!5! #X-뒦yX4=!3!#T\[CLzl` 3!2%!4&#!Wn`–X` !#4&#!5!2nKy–X`!#4&#!+5265#5!2nã rLy–a;- 1 <05!3!----Ӫ&$&$&&`& u`& `& \X`& BCZ`& Xh`&d`&Q`'ZX`&`&&Q`&ZXV`&X`&:X&X`&%X`&X(`&Vd`&Id`&{C!`&!nV`&"X`&#I`&$`&%<t&X& X&d&X3>=3##67'#3x]GgG.i=dB`ԛ":T)C '9n '9 X& ~X' 'n ' X&c ~X&c 'n ' X&c ~X&c'9n'9&L~&L'n&&cL~&cL',n&,0a&,+p~a&,+p'x~\F&x?&,~ x&>'xx\F&x?&,x x&> (f'; >f'}>\/& 8>>/& 8 (f'; >f'&8\/&88>/&8 (f'; >f'2>\/&8>>/&8 (f'; >f'2>\/&8>>/&8 ' ? ~& /&?,> ~/&,>)7%#"'$47332767654'&54767;#"'&/cͷ?Ahž#62 #dGG&+@XA:g!axLQ 6r'_>X %+53276=3+HZ#c,1VV,1jٻ~X%+53276=3;#"+MZ#c,11,c7nVV,1jj1,JRX&Yc~X&Zcpn"56$3=gi~wun52&$=Ԛuw~ig* '/&'&#"#67632O,$e5Fqp[?8WH7  $0GJI  '327673#"'&'O,$a9Gqp[?8W7  $,KJI PT,l&IT,PU,i,k ;#"'&=3!1,cK\WL71,\W+PV,PW,l'W,IPX,l'X,IPY,l'Y,IdZ,l'Z,I<[,l&I[,U/'\5&\l9']5l9&] @']>Q 6&]>l '^5l &^']>R&]XD&Y]+p~&Z]+py5 3;#"'&1,cKPWskj1,\e'9n&9X&~X&'P^&^ 'n &&cR~&cR'n&&cR~&cR (f'; >f&\/& >/& (f; >f0%3#"'&'&'!27# '&5767"#"5$3 "(1{R=IrbJIԖ^` __&m3HZdP^vc–e4)?6 [_w\/&'&'&5672+5327676SSgURHKLXJKݣdht^#4b4bBPH:jV>/);#"'&'+53276767&'&'&5672~AI2hrBV~(;E)Kݣdht^eSgURHK 4b)N"w6a.%PH:jV# ('?; >&?\L& >L& }R=}GR &'3;#"'#"'532767654"9aRQS,cKa].-fgsT!"#?zNuIS,!&* 1p*D}'E=}G&E b&? ~&3;#"'!5 767654x I*eK2D0# &pgM,>ꅗ:H~ b'q ? ~&q A GF%7653323;#"'#"'&''&'#&'$473327676'&/3N0%@nS,cKvDm% I01_@8'TPxmil_Qb_y^@@$:|_2&aS,`[ F{GHܳ&%0l}=J<~ 1%+53276=3327653763#"'&'#"'&+8LcKc,P,+hm,%@n\Kf%#?70`DAbH<;!.,Pd@dczg2&q\ =!1(78#"'&'#"'&'+53276=3327653763;#"'%#?70`DAbH<)+8LcKc,P,+hm,%@nS,cKvD =!1(I;!.,Pd@dczg2&aS,`Z ' A G&  & 7& C <I)"'&5#&'$47332767654'367676;#"/"3276'&'&u&4-JXPxmil_Qf[+!' (s{lHX}a*=RKgL~큻%MGHܳ&%Dl7(2l^F"%GMF ,\v7Ql?[F2 .327654'&#"!"'&'+53276=36767632Ш큺%0LJNA'fKc,P-e_KUskl?[F*#=,PdrNP2T?!'Dmx+8)"'&'+53276=36767632;#"/327654'&#"JNA'fKc,P-e_KUqm*=RKg਑큺%0L*#=,PdrNP2T?!'DKH ,\vl?[F ' C & 2& & E))5!3%632;#"/%3276'&'&#"@o\Dui*=RKg큻%0Pz\?c!'EMF ,\v?]DQx %3276'&'&#")5!3%6329큻%0Pzu \Duiʸ?]DQx\?c!'Emx))5!3%632;#"/%3276'&'&#"8 \Dui*=RKg큻%0Pz\?c!'EMF ,\v?]DQx'RE&R&R&Ru *Gu %+! '&7.54762;# '!2764"[b=D}a_[9^DU)k_1ocz2t*n@00@p[C+ @Mkl=v8`3$*727&'&5763"327%+5SF7J \X];d}M4F!Ť$/%+532767&'&5476762;#""654'v`kB;(aD hYYh MXD=p`vʨ4/gg/($'UZ'-)74--47)-'bM,(U __ u F'wGu L&F&wL&'~\L&?&~ ~&kG'R~ok &k?&,~ ~&8L!D#"'5327654'&'&7676'&'$54733276763;#"'J&P DfXRNB8D-<9_h$$EB|=Q#!v+6(  %{{qe))5!27654'&54767;#"'&/66-62 hGG&+@XA:g!a_h$$EB|=Q#!v+6(  %?+)x.M#$%653;#"'#"'$&733276N1,cKpNyUcE@A(IPmI~jkj1,3.(B"[\ss~B"5 +5327653WPKc,1se\,1j%+5327653;#"SMKc,11,cKVV,1jkj1,^Ngt5%327654'&'&#"#"'&#4763&547632;#"bzL,5;(.;D K2KxAZM\HT((&iK*9:X DD(PNNOmf7*(?$GC,,m$%#"'+5326767632%327654'&#"dan@ht4W^Q[a>/4(*X.[4fb0G1P8TYNE5EK&)/4:''5)24fb0$#1P8S1>,E5EX !a%H'?  +&V?&'R~'RP^ $&'&'&'3;#"'&'#"'&5476 xRot$8pKZI-&8:m*12e CY>)2'+eO,3;I0D-=67654'&#"27&'&5476&'5#"'+5327654'&$"':A4N--0M,Q@(Jxb 41}! @H=.%4-+#%v iEN@TSZ 'D49g=ql)D%'i.C!v-3j  ;AWE L9P)8K6(S/VL_+Y9K1\SJR765&'&'&54767632;#"'&#"#"'$4733276L[/,4PT*uW ##rpl$-AIqYhu?AB[M!3!+ (;=A<^ĸ#0{bV` )gZZrN J' R ' X&Yc~X&Zc.&\,.&\,&],&], &^ &^T#"'53273676537M͞jK`Uq%BUG FA+7T#"'5327367653;#"'&4;IʡjK`Uq%"@Pif<[A FA+7DT)TL* 35'5467676?67654&#">32,X\"$߸g^aOl39ZZ8L{4<+VZ@EL89CFnY1^5YVe !5!5!)5!S2SR7'XF: 'b:= ']C; '<b= ']bH'&'H'''H' ''H'&'H'''H''' H&&'H&&'H' ''H''&H'''H' ''H&''H&''H' ''H&''H&&'H&'' H' '&H&'' H' ' 'H''& H' &'H' ' 'H' '&H' '&H' &' H'''H'&'H''' H'''H'&'H'' 'H''&H''&H'&' H'&'H'&'H''' H'''H'''H''' H'&'H''&H'' 'H'&' H'' 'H'''  H'' &H''& H'''  H'&& H'&& H'' & H'&'H'''H'' 'H'&'H'''H''' H'&&H'&&H'' 'H'''H'''H'' 'H'&'H'&'H'' 'H'&'H'&&H'&' H'' 'H'&' H'' ' H''& H'' &H'' ' H'' &H'' &H'' &   3%!#!! !Y9w\{8q d+_N  %*!2#!327&#363&#!3654/654'f;33;$ $#>]a{w DD663! )327&#!36'hPcp~qAA k{qS3%!!!!!!-x9vq dddsd !!!!!#3#oQn.ddqs&&$#"32767!5!# !2deVRuu^oRaG@;@&5dSUmnHFcIf3%!#3!53#.nXddddq dddd fY6765%!#!53265-V?O?nqd J^ dd0 !3 #!3pdw@1q 2 !!!3ddo o !#!! !3!3_Gbn}qR+q  r'( ! '&76 7& 676'&&:żGlllli$ #ab2222jT%%5$c$-6&/.4%&  %5 64&/.$ Pdo&nŢmngzoʷ-[ʚ)'NXd''pui$2Xf| / 3%!!!!rpq ddq $!&%! 65! X!!Y fqba@`|gd5\*$ 3%! 3!dq d+D 3!3%! ! 3! !D5D:9:9d|q  d+l 3%! 3 ! #(\~vbL:H|dq d22{ 3!! #3ndp29V{{",34&'3!5#"&5463!54&#"5>3 5!">76a=Kd?`Twj6/^;:5Czӆ]YfaH..t''UNHGgwt-!>32#"&'!4'&'676763&#"327N:||:^,<<,9RKM_]daadt= z =OsKTdihtJq{#%#"!2&'&#"3276%M]-ULEmGJXHCQRHV,${z$d$$>:##dWS%&-!!5#"323327654'&'&#"N:||v9,<<,^(]_MK^daDDaZKsO=  =Td6Jthio}{!327# 32!.#"}K_mk)#i̩J@b]u-)8 CqzӾ/ 3476%#"!!!#5354763g.9:9|WX -8J_D8d97ddddTVqV{#.=65326=#"325!!"&32767654'&#"jlQR:||:Nry^,<<,9/KM_]=ʌo,*qdaDDad-w=  =OsKihtJH "34'&3'!>32!4&#"! GS5‡OIƁkk h@[:Lded\ПU5 33#!!JKOhV #676#532765!3#%G(=1l$%OQRaеT0Hd01``2 !3 #!3OHіmdi#L&5#"'&5!3J=(G%RQOLiH0T0Z``~J^d{"&1<!>32>32!4&#"!4&#"!3%34'&%34'&OIƁԝTށkkkkd[ GS5 GS5`edJv\П\ПUh h@[: h@[:H{ "34'&%3'!>32!4&#"! GS5‡OIƁkk h@[:hded\ПUqu{ #2#"27&"676'&s3x33x3d4'pp'3(pp({98  kp-$-R-ۀ-qV{-%!!>32#"&4'&'&'676#&#"32N:||9,<<,^؆]_MKdaaKsO= z =oHJthiqV{-%!!.#"326476767&'&3632#"N:||v9,<<,^(]_MKdaaKsO= z =oHJthi{3'!>32.#"!N:4I,hdfc˾zo{E67654'&/&'&5432654&/.54632.#"#"&'i'K&'q4=B%%U+.39GSOjqL4vfLJ\_opPx3Zl=vf03"3;@{R?Bsl37'*7CoT78^UNO,, z1$YXDL#/%%7%&7#!!;!"&5#53*\{KsբjU|7N(dUNdudTD` "%&'&5##!5#"&5!3265! GS5CIƁTkkTS hl[:hded0=` 3%! 3!YT^^d\hdTV`3!3%!!3! !bTNdhhdjjjL` 3%! 3 ! #U|p|[hd-s=V`7%! 3+53267>^]_lP|XQ+ۙdi8{dCYXb` 3%!!!5!\vwhddhddh$%s'&'(#)s*;+,f-j.j/031s23s4T567)8h9D:=;;<\={-{DEq{FqZGq{H/IqVZ{JdKyLVyMNyO{Pd{Qqu{RV{SqVZ{TJ{Uo{V7WX`X=`YV5`Z;y`[=V`\X`]ZJsddh @03#u)@ dd1<20KTKT[X@878YKTK T[KT[X@878YKTKT[X@878YKTX@878Y@````pppp]3#%3#^ys@B10KSXY"K TX@878YKTX@878Y@ %%6FVjg //]]3#7Ju@!  VV 99991<2990K TX@878YKTX@878Y ]'.#"#4632326=3#"&9 $(}gV$=09" (}gT";9! 2-ev 3)dw @B10KSXY"K TX@878YKTX@878Y@*$$5CUU//]]#ę1w@ 91<90K TX@878YKTX@878YKTX@878Y@ //- ]3#'#Ӌ1@ 91290K TK T[K T[K T[X@878YKTX@878YKTX@878Y@ "  ]373Ӌ 9 #.#"#>32v cSRav 6978w{z9 j@ VV120K TX@878YKTX@878YKTKT[X@878Y332673#"&v cSRav 6978w{zfGd10KTKT[X@878YKTX@878Y3#@1<203#3#䙋N#!#ęę53#73#'3# 3#3#'3#}}d 3#3#'3#}}d3#3#d 3#3#3#3#dd&;#"'&'#"'$&733$767654'3F??7KXY~XZ\,>%!$'$&73!2%7&'&547676323!!"'654'&'&#"xhn}@AQ+"R:4RQP ioh4"(=)1$+<'g\^sM6,|y$K2S%jAzG' <8BN?0654'&323276767'&54767632#!V)B,4((7(*HTO<?aNbNLZB`.NJ|m+M;3*)3P& ]027EW4,E$2Hf3Џ,' !5;#"'+5327&'&54767632"67654'&'&f$'و'$A??8 D?$ 9P2*I1C299(M.L,0W 5+5DE2.4! k .@%&'&'&547676323!!#'$'&5473!2766'&'&#"B.y9()Wp8c20-=^E>><l/"'"3 9Ld/  #+m=E2X:zFNV}`kL:DbZzWK# :<,; ? &R~&R %4'&"2>"'&4762<R8R8z?@?@@?@(8)*8@@@@@?? ''&'cRP~&'cRP' &cL~&cL >&]8\K&]X>K&]X >&?\F& >F&  >&\F&>F& >&'?>\L&'8 >>L&'8 3_+ 5__bV'J@!B  6991/<2990KSXY"]33+532765#ոRQi&&}``01}` 2@  F <<221/<20@  @ P ` p ]33###53ø`<ĤV.` 54!333##"3276!5R w{i&V`p?`3A0c3'q=Ua4'q[^3'Pq=cZ'dUcZ'dUaZ'dqaZ'dqvj 3'\q=cZ'bUvj V'}\cW'u|vj0Z'@d\c:'u(Dcm:'Duvc u'uvV Y'PpVZ'PdVZ'PdV'Pc['uPj&Z,,!!,,O=32653#"&[hq`=QQ, &&_ &3;#"'!5 767654x I*e2D0# &pgM,>ꅗ:H~#'_`'_S'_SF'_8@'_+ 'cY~@'_+ 'cZ ~r'_>9 9F KSKQZX8Y1/0@  @ P ` p ]3;#"&5Li a^q%qqu `&JOw`73#!!dž$Nd`Vw`#676#732767!5ʆ#5H2K1i0/N)deеT0Hd01``vg`'`&3#3## !#3!53#^ժ ?!5 ?8'TXZ8 U'UXZ8'ZT8'WXZ8 U'XXZ8 'Z,W$'W]$'X]N@ T1/0333N@T 1/20%3!533yոBy@ T1/0)533ysոBq8@ E EԶ0]991@  /0 6& #" 3 *NYh> éA@E E Զ0]91@    /<20 6& "'!53&54 3 *NNJhh> é!8@ E EԶ0]991@  /0 6& &54 #"'!5 hYNJ>z=x 4@   2291@  /290)33!x³j*]Qix 6@   2291@    /2290%!5!33xtj³瓓]Qi' 4@     2291@    /290#5!33j³]Q=q) #33mCq"q )5333!mm"q)533#mOq $@  1/2<0)3!33OkUq""Oq (@   1 /22<0)533!33OιUΓ""q $@  1/2<0)533!3kιU"Oq $@   <1/2035!!5!3ΓK"Oq $@   1/20#5!!5!3ΓK"q @ 1/0!5!!5kqKq!&'.4> !2>4."RJr 惃sKR9[ZZ 1ũbbŨ1 p`88`p`88!#5!&'.4> !2>4."RJr 惃sKR9[ZZ{ 1ũbbŨ1 p`88`p`88O#5!&'.4> 2>4."RJr 惃sKRQ[ZZ{ 1ũbbŨ1 p`88`p`88O &@    21 /03"3#!5!>k fO "  21 /03"3#!5!>c f $@   21 /03"3#!5!pk fq7@ E<21@  /<20!!##"&6 !354'&"3.Cf^v ]8mr^<Uf"qɃ]8ƃ;@! E <21@ /2<20%!##"&6 !3!554'&"3.Cf^v7]8mr^K<Uf"Ƀ]8ƃ7@ E<21@  /<20%!##"&6 !!554'&"3.Cf^v]8mr^K<UfɃ]8ƃ ,@   <<1@  /03!!!!!55Փ/ 0@   <<1@   /20#53!!!!!55B/D ,@    <<1@  /0)53!!!!ys55B/= ,@  <<1@  /0!!5!!5!355ߒѓ 0@  <<1@  /20#5!!5!!5!355ՓLѓ ,@    <<1@  /0)5!!5!!5!,55Lѓ *@  <1@   20!!27654'&3!23,R4,,=ٹUiXO]Oz}I_"_Ҥ.@  <1@  /220#533!23!!27654'&ιUiXO,R4,,=B_Ҥ]Oz}I_ *@  <1@   /20!!27654'&533!2#,R4,,= ιUiXXXl]Oz}I_"B_ҭ@@  ܲ_]9@  /999@  10!4'&'5!!5Mc4B_9V@9D@   ܲ_]9@  /2999@  10#5!&'&'&'5!! 5Mc4BX]9V@9$@@   ܲ_]9@  /999@  10#5!&'&'&'5! 5Mc4B X]9Vq=:@   91@ /̲]촍]0!533T9 >@  91@ /2̲]촍]0#5!533hՓL9 :@  91@ /̲]촍]0#5!53hL9+#1@%!$1@  #/2203432>3234&#"!4&#"!}x5%^qZHZlK--Xh|ŕnc%5@'#&1@  $/2220#53432>3234&#"!4&#"!}x5%^qZHZl[K--Xh|ŕnc#1@%!$1@  "/220#53432>324&#"!4&#"!}x5%^ZHZl[K--Xh&|ŕnc= -@   <<1@  /<<0!!5!3!!!KK?1@   <<1@  /2<<0#5!!5!3!!!KK? -@   <<1@  /<<0)5!!5!3!!@KK?=X>@ <<<<1@  /2<<<220%!!5!3!3!!!=KøL??XB@  <<<<1@  /22<<<220#5!!5!3!3!!!%!KøL=??>@  <<<<1@  /2<<<<<0)5!!5!3!3!!!0KøL=??Oq %@   1/203!3!$Uq"KOq *@    1@  /220#53!3!$U"Kq %@  1 /20)53!!kUޓK=!!!tFs0hB~ !5!!!tFlhhB~B!5!!tFlh0B~B+ 8@!  <<1@    /2<20327654'&+!!!2/!m]%i ; @ED\qQE=4."RJrCEoJRXErrJS9[ZZ 1SV/ { 2Ʀ1 "p_88_p`88*#5!5&'.4767675!5!!2>4."RJrCEoJRXErrJS9[ZZ 1SV/ { 2Ʀ1 "p_88_p`88O(#5!5&'.4767675!5!2>4."RJrCEoJRXErrJSQ[ZZ 1SV/ { 2Ʀ1 {"p_88_p`88Q %@   1/0!!#!3BQ *@  1@  /20#5!!#!3ԓ} %@   1/0#5!!#!+Q (@   <1 /0!!#3!3OQ -@   <1@   /20#5!!#3!3ԓ} (@    <1 /0#5!!#3!B /@   <<1@   /20!!!5!3z;  K"qѓB3@   <<1@  /220!53!!5!3z;7 K"ѓm /@    <<1@  /20!53!!5!z;7 K"ѓ+q &2>4."&'.4767673! [ZZRJrCEoJRXErrJS"p_88_p`88~ 1SV/ { 2Ʀ1  (2>4."!5!5&'.4767673 [ZZlRJrCEoJRXErrJS"p_88_p`88 1SV/ { 2Ʀ1 O &2>4."5&'.4767673!5 [ZZRJrCEoJRXErrJS0"p_88_p`88 1SV/ { 2Ʀ1 {q*!&'.4767675!5!!!2>4."RJrCEoJRNXErrJS9[ZZ 1SV/ 2Ʀ1 "p_88_p`88 ,%!5!5&'.4767675!5!!2>4."RJrCEoJRNXErrJSQ[ZZ 1SV/ 2Ʀ1 p_88_p`88O*)5!5&'.4767675!5!!2>4."0RJrCEoJRNXErrJSQ[ZZ 1SV/ 2Ʀ1 p_88_p`88 '' '' '' '' '' '' '' ''  :@   @ ? o ]9999991 2<0#'##'##'d2222222dddddV!#!3!3#3jժVV8`!##333#{}`9V$36767#"&546?>7>5#53!Ya^gHZX/'-93B$BS #C98ŸLVV/5<4,5^1Y7=pM_<& r Um Q rf55q=3=dd?y}s)3s\\?uLsLsyD{={\{fqqq/q999qqJ+o#7=V;=3X55^R\sd5^5bs#5`b?yyyyyys\;\\\3 LsLsLsLsLsLf {{{{{{{fqqqqq9999qqqqqqH==y{y{y{sfqsfqsfqsfq)q3 qqqqqq3sq3sq3sq3sqTx\9\9\9\9\9r\9?uXu9uuFLsqLsqLsqs/qJJJ+o+o+o+o#7#7#7DV={\3X{\3X{\3X/ }}ssfq3 }qqLu3s~\ 9 =LsNgvsq7r+d#7#7N={\3XTT\h3qT]hX\] ` d <qKsday{\9Lsqqy{y{{3sq3sq?LsqLsqTX9 ` d <q3squy{{LfHy{y{qq\9\9LsqLsqJJ+o#7,Gqqq{\3Xy{qLsqLsqLsqLsq=79qqy f u +o3XPP}  yq\9@sq J qefqqqqq|SA4Pq9qq q``9t*KL:+#qqGpPPOJI~>t+o7#7#7q=V=f3X3XXmXXXXLsPqq;VVqXXqvqq77:7/ <66JO<u1ufu]H^H 6&:uuuuuu  3s3soouuuuMLhuTzuuuq7]yq U zw(j#Lcxhc+qc3x+x.pppp*pw::efqesDy}uy{\Ls\?yLsLs{=LsN\Fqc<Fq qSZkq=xJvkqJqqdGp;GpqqWWGpAOpLsq0q@GGrwxssFqU-~Od$s6sq,J7Opfq9Lsqs5UsssJs\\\T\J#y}}@e(!TLss#y{=6|<}o{p4kq5FA33L ;q;fq<=p;rR>Qdqtqq/4dq+o9998L07/3=;xs*` D3 GLsk7sS[2Lsq@R2@R2s<qsq pv9xssfq;XXX.j}!&4fG8=(5F!A!=2*IS^s6qsfq<=={=;yt|||\(5F?56].I6r|29y{y{{qLuqLuq(5F!ATX33LsqLsqLsqodq#=#=#=|4QfG8{=;{=;}q -qn6.3sGq/STL&tuA&7\\S&esR\Lsuu^x"6^Zq"qDq;' qqF92 F &q/qzw`DDcc/NDdc\\fcXCX.X0.XsXXEX.XXN*CCMXwBS(?99l9lC91***}} ffuuXK5k1CCOOLLLRLLLLLUL<L<LdL\W5kVz*******KKK))*CC1LLLRLLLRLjLL<L<Ld9qd==;;q;q=x==D=;==p==q==.qqB[B[{d{d7]xlxr[")>WE_HHY"~h~h@rx2OsN~sxMn`P{P@@@@`NzBza\d>N c c]ccY]dji:~:~PZ"ZPZ|ZPZ}PPZPZXZPPP|ZPP*FZnP\ZZZFdZWPPWFZdZddDPGd.d#ddadd%dvd-d/Cd$d/dWd/?d1<Nd/dBd/d-d-d/d/F.Z#d{ddddddd.ndmd?dndyyyy'''''w'w'ww'w Xc^c^%H Ewyyyywwwwwwwwwwwwwwwyy^^^l4wl4w4y4yywyFFFF*F*F*FAA8F3F3FFFF*F*F*Fzzwuuuw.wwuu&w&w&wwFF wwwFFGwyFyFFwFFFwwwFFGwy=Fy=FGwGw=F=FwFFJFFFV+V+FFV+V+VY]YFFF"F"F"F"FGFGFGF F F F F wwWww?w?w?wYSSwSwSSSFFFFYwyyyyMMwwdwSSyy4yFwwFFww```````FwFw     FFwwFF%w%!%!%w%w%!%!Y )#su` z    s 4 s 3  E p 2 O 3wq= {>fq$S9( 3qfyqyqy3/qqq222</=V3X5x=2ZLr u//SH||NYHG p+"M"M>G/Mmu>GVGVGTR>GnzhuuEuOGGOGOGmu\#=nnuV&7yGSG%nzu=nV&7yKySG%t9>GGGOGT_>G=nIzIIVz[quuIuEqOGOGFK\#^YGu@zV&7~77#7OG[[[[BBy{}}}sfq)q)q)q)q)qqqqqq/3sq\9\9???uMuMu9u9LsqLsqLsqLsqJJJJT+o+o+o+o+o#7#7#7#7y=y=DVDVDVDVDV{=;{=;={\3X{\3X{\3X#V={/y{y{y{y{y{y{y{y{y{y{y{y{qqqqqqqq\Z9D\9LsqLsqLsqLsqLsqLsqLsqNgvNgvNgvNgvNgv====FqFqFqFqFqFqFqFqyy'iSSSSSS0l7hx qqqqqqoE.k_FqFqSc<qqFqFqFqFqFqFqFqFqyy'i7hxk_FqFqFqFqFqFqFqyyy<pr\\D~{aNsVddddd%%%%9933W q q(()((()( 33?nn=V`Jd=n=n8N(ffadp5Wnz5?5f5\5l5Y5S999og0u5W55^5b5?5f5\5l5Y5S999og"MVGOGuVGVs`u .;F_( ..D]1u!===P=&C&Cs#&<<oI H#;jDN hR6nLsbBSV,y('y\XNND?yJ\}WJT9hgd(V FhZ $<|3uuWZ[O=;6Q^^b?fbfl\bya W{=w= =us)9~=}== ]=;;;9fqq y) ysedud    du,dudududvdvdd*ZZd-Opdduudwddxvxddddudud  dududuku7^H^^^@^^^uzz^uwududdud7u7y#hZZ,dVD===j,,ff+uPuuu+uPuuu+u+u+uyyy``**yyby* a aXXJr;xxdxxd++* 8 8 P 8 x PFq 8#+7',,,,,,,,,,xxxxxxx||''''''''''''''''''''''q''''''''''llgg'''''''''''''''''pprppppppppp7p7Tpp''''3'''ppppp'''',h,d,,,,+,}}_}} ,,,B,d,,,,,,,,,,},,,dZd2E\,,,,,,,,,,,,,,,,,,,,,,,S,,,,,],,,,,m,,E,,,,A,,,U,,Q,0,,,U,,L,0,C,,X,,B,,X,,,x, ,,,,,,,,,,,,,,1,,,,,,,,,,,X,X,j,, T},y,},),,,,,d %6  dT VIVVx+5X3ppppR >pTVSTWW/V0/0002p@TTTTpnnTVaaTT,f,z,z,z,z,xNNx>NnX~#9Uwlf,,,,,,,,,,                    uuuuuuuuuuuuuu++<uususs[YOO Bu xd xu xd xd xu xd xd xu xd xu xu,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,duwOwO::: u+u+u+u+u+u+u+u+u+u+u++u+u+u+u+k  77^^  7^uuHH''''$"u 9 u H#?{\3X@sy= DVh<Gp,qssu@xC@~yyv{\{\ssg)?>8{\(oo:o\:o\csssss$d{=syNsNs6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,q/ / ///}/o } <^VN1X?,XXuXXeeeeNNN>XCXQ~XwQ"XTXXXX,X6TC"Xe.>XTXTX:j:j:j:j:j:jKH KH ************jj))k))k":jC:jp*XXXiXXXXXXXXXXX9p9lpl"9lplC:j9p:j1J:j:j*********}3}}3}jj 3# 3#  f^f^uBuuBu/KH 5kk kpSI:j1J8"CC:j..TT4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,c3s$f"=3LrDrl{fqo/q5 "qqq+o7=HVhL=Xy}s)3s\\?uLsLsyD{={\{fqqq/q999qqJ+o#7=V;=3Xds N:jH k :j:j:j********_9xxxxxxxxvxxvxxvxxxvxvxxxx,p:jj9Jqq9O99:::qd=dd=;;;;;;q;;;q=xxx==D=DD;;;====p==q======...qq,,,,,,,,.j?< 0 $%*K-r294K7D9:;< R&Y\99999 &&&&&K&D: $$$$$9$&$*$2$4$7a$9}$:$>?@<@<@ABPChDDFFGHIIJKPKLLM$MN0NO@OlOP$PQ|QQQRRSS0S`STUUUUVV8VPVhVVW|WWWXX<XlY4ZlZZZ[[[\\]]4]`]]____``$`<`T`x`bLbdb|bbbc chdde e,e\etffDfpffffgg,gDghggggghh,h<hii4iXi|iiiijj,jPjtjjjjjkk@kl lllm m0mTmxmmmn$nHnlnnnnoop$p<p`pxpppqdqrr<rTrlrrrsxtt@t`ttttu|vvvvww(wPwhwwwwwx$xHx`xxxxyLyzz4zdzzzz{{,{D{\{t{{{||$|<|T|l|||}}~~t8X|T`P0\D` d <L8Ph\,4@tX``4L $<TlD\| 8Ph ,D@XpP0H`x 8Ph(@Xp0H|L $<TlhT|h°LĨdƌhɜ4ˈh(μ`ЀАРѼ҈ԬH<0׬DdttT|L ߸L4\PP@LTx0Pxl\| H|Ht0|DT$\( 8 X  T   L t   t  , \ l      (    0T(\@h8X,@`\DXlDh Lh\<PdxXt  @ l  !H!d!x!!!!!!"$"L"l"#\#t###$$,$@$$$$$$%h%|%%&&8&H&`&x&&'' '0'L'h''''''((@(((()))** *0****+<+L+\,,,,-p----...0/0012P23p4845556,667t889H9:4:<<=(=@=X=p==>p???@@A8ABCHCD,D<DEE<EFFGTGHHIIJhKKL`LM4MlNNNNNO$OOOOOP8PPPPQQR<RTSSS S0S@SThTTUU UxUVVVPVVWXYDYZZxZZZZ[[[ [\X\h\]]x]^d^|^_`\`aablbc,c<d,de`ef0fggpggggh,h<i$i4ijjdjkLkdklxmmmndoo ooooppq4qqqr rds<sLsttuuLuuv@vwwxxyz0zzz{{P{h{|$|}~t0H`$p<dlP<0H(t$Tpd8t@<L($<Td|TdT0|@P`(@Xhx4DTl,D\t $<Td,xDxTdP,HTd,`D@((l$P` <L PÈ|tƈdXhT$ẗ́P`H\4ѰӠӰLՌ8֌@(P`4`٘4ڄpTܠDݘpިd(p$||<\X(@\t<T<T4P\l<X`tTTTPLPh0H`x  0Phx`DTdtP0t`,(l(h4            p lp 0X,pP| \`t4xX  !\""#$l%(%&'L'h'(t(()`)*\*+ ++,-,-D-.l.//0D01,1@112p23t345\567<8L949: :; ;l;l>??@p@A<ABdBC4CCDXDE EF FGG\GHHI IJHJKK|LLhLMdMNN|O$OOPLPQQQR<RS<ST,TTUhUV,VW0WWXhY YYZ`Z[L[\ \\] ]p]]^^^^^^_@_X_p_____```0`H```x`````aa<a\aabbTbbbcc0cTclccccccddhdddee,eDe\eteeeeefff4fLfdf|ffg(g8gPggh<hThlhhiii4iLidi|iiiiij j$j<jTjljjjkk(kkl8lPllmmmmmmmnn(n@nXnpnnnnnooxooopp,pppqq`qxqqrrr0rHr`rxrrrrrss s8sPshsst0tHttttuuu(u@uXupuuuuuvvv0vHv`vxvvw,wLwwx`xxxyy yyyyyzz(z@zXzz{<{{{||h|||}}}4}L}d}|}}}}}~ ~$~<~T~~4((@XpP`Ld,D\t4L004Ld| l|$ ppTl,|H`xxp0H`xT8P,<Ld|  0H`x4`x $`x \`(@Xp,\,TT8HxHpHp`<X<xX@4l  | p4Dx@`0h(0@HTp”(LÀİ4ŜtƴLPȈɌ  4H\ʸ`p˰T̴8XΜhϴHЄPp҄Hxx p0֨PxרPؼ(Hlِٰ $<Tlڄڜڴ,D\tیۤۼ4Ld|ܔܬ4Ld|ݔݬ $<Tlބޜ޴,D\|ߔ߬ $<Tl,D\t $<Tl,D\t,D\t4Ld| $<Tl,D\t4Ld| $<Tl,D\t4Ld| $<Tl4Ld| $<\t4Ld| $<Tl,D\t4Lh0H`x4Ld|0Hd0H`x8Tl0Hd(@\t $<Tl (D\l $4L\t4Ld| $<Tl,D\t4Ld| $<Tl $@Pl|(8Ph(@Xh$@Xhx 8H`pDp 0 l   $    h  , H `         |8\@p|,H <pLdPx(d444444444444<0d0DXl   D !!|""#h$8$%H%`''\')@)*t++t,,,,--<-t--./001@12t22234505567<8899\<<=`=>p?@A4BLBCCDDEEEEFFFFGHI,IJpKPK|LMMNHNOLOPPQ QQRR\RRSS<STpUUHUVHVVVVWW8WXWxWWWWXX0X@XXXxXXXXYYY(Y@Y`YpYYYYYYZZZ(ZHZpZZZZZZ[[[]]^^^_p` `accDctccd dleeffTffg4ggghhiLijXkklmTmmn nDn|nnopop,pq@qrXrrssst tDt`t|ttu(upuuuvXvw@wwxx@xxy8yxyyz8zxz{0{{|(|p|}}D}}~~H~~@l@$|d@|P4h$,H$P h|h8T@ T,HtpLT(@4l8h$4xH(8|xLXl,XPDX pl` plD\L˜LŌtXXɼ0T|ʠ$T˔p0`͌h$hό,Ѐаl dҤ@Ӥx0ՄռH֜0,ؔ,٤ڤ,ۄP(L(ހޘ lL(\4l\|,T|4TtD4L0@P`p0hHh< xHt 0<|    < X    8 p   D h    @d0PtDtDpDpDl8dP X4h(T(T@l,\8xPLDx  , H d     ! !D!l!!!!!" "("D"`"|""""##$#8#&''''''((((D(`(t(((()D)\)*+P+,`. .<.h....//L/h////0080d000011<1X11112242h23<33456`677t78,889 949p9:<:::;;D;;;<<<4<|<<<=$=`===>d>>?$?d?@d@AdAAABB$BPBlBCCDMPpPQ Q\QRTS STPTWxZXZ[[|[]4^_(_\`Pa$abTccdehhiljl0oppqqxqrsuuv4vww(wHwhwwwwy\z,z{|}X}~hXlx|LdL8   ,pp8 h,` ,hh $0L(@8\DlT\ǨȐɜʔ(Hϐ XӜ\P״@ތ@ 0p<4$hx\0t$ht`8`T  d(H( @ !!!"L"h"""#,#D#\$8$%%&p'(x()T)))* *H*t***+ ++,d-.P./114D57D89:4;<=(=? @8AhABC`CDEdEFG|H@HpHHHI$IIJJTJJKK0KPKKLLLLLM0MMNNtNO8OP4P|PQ`QRlS<STV VVWWPWxWWWX(X|Y@ZZ[\\]|]]^X^^__h__```0`D```|````aa,aPataaaabb,bPbtbbbcc0cTccccdd,dPdldddde eDepeeef f<f`fffgg,g`ggghh<hphhhii,iPiliiiij jDjpjjjk k<k`kkkll,l`lllmm<mpmmmn nDnpnnno oDopooop0pdpppqqPq|qqr rLrrrs$s`ssstt,tPtlttttu uDupuuuv v<v`vvvww,w`wwwxx<xpxxxy yDypyyyz zDzpzzz{0{d{{{||P||||} }L}}}~$~`~~~ Dp Dp0dP| L$`0\$`0d L$`P P,x|\ T8lPx\tPlpT8PhdDHh(0l(p8HdT\H(<\0\P(T4d@|\ hTP`0`œÀ(ň  ǐ ȀL˴Hʹ t<HX4ҠH,Ԍl8 t؄@PڔD\t݌ݤݼ4Ld|ޔެ $<Tl߄ߜߴ,D\t4Ld| $<Tl,Dhtd `P $<Tl,D\t4Ld| $<Tl,D\t4Ld| $<Tl,D\t 8HXp h|0H\t $<Tl @Xp0H`xTl(  , D \ t   x        l,D\th\lXhx 8Phx<L $<Tl@@@@@@ <Xt 4\(P| Hp  < h   !!0!\!!!""("P"x"""##H#p###$$<$d$$$%%0%X%%%%&(&P&x&&&''D'l'''((8(`((())0)X))*\*++D+, ,X,,-(-.`./ /H/00L0122334H445P556778889 9:H::;X;;<@>> >0>@>P>`>p>>>>>>>>??? ?0?@?P?`?p????????@@@ @DAAB|C$CDlDE@EEFF FDFtFFGG|GGH\HIJ`JpJJJKK K@K`KxKKKKKLL L8LPLhLLLLMMMN@N\NxNNNNOO O<OXOtOOOOPPP8PTPpPPPPQHQ`QxQQQQRRdRtRRRRS0SHS`SSSSSTT,TDT\TtTTUU<UVlVWdWX<XlXXYYpYZZTZ[[x[\@\\]^,^_$__`@`aabbccd8deelffg`gh0hi ij@jjkDkxkklm<mnHnoopTpq<qqrrPrssttdtu uduvvvwhwxlxytzzzzz{{,{P{t{{|(|d|}T+h @h>2   : `   (Z4;b ;; 0    " F m " : %: h: ; ;Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. DejaVu changes are in public domain Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. DejaVu changes are in public domain DejaVu SansDejaVu SansBookBookDejaVu SansDejaVu SansDejaVu SansDejaVu SansVersion 2.24Version 2.24DejaVuSansDejaVuSansDejaVu fonts teamDejaVu fonts teamhttp://dejavu.sourceforge.nethttp://dejavu.sourceforge.netFonts are (c) Bitstream (see below). DejaVu changes are in public domain. Glyphs imported from Arev fonts are (c) Tavmjung Bah (see below) Bitstream Vera Fonts Copyright ------------------------------ Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. Arev Fonts Copyright ------------------------------ Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the modifications to the Bitstream Vera Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Tavmjong Bah" or the word "Arev". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Tavmjong Bah Arev" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the name of Tavmjong Bah shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from Tavmjong Bah. For further information, contact: tavmjong @ free . fr.Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. Glyphs imported from Arev fonts are (c) Tavmjung Bah (see below) Bitstream Vera Fonts Copyright ------------------------------ Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. Arev Fonts Copyright ------------------------------ Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the modifications to the Bitstream Vera Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Tavmjong Bah" or the word "Arev". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Tavmjong Bah Arev" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the name of Tavmjong Bah shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from Tavmjong Bah. For further information, contact: tavmjong @ free . fr.http://dejavu.sourceforge.net/wiki/index.php/Licensehttp://dejavu.sourceforge.net/wiki/index.php/LicenseDejaVu SansDejaVu SansBookBook~Z  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghjikmlnoqprsutvwxzy{}|~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ sfthyphenAmacronamacronAbreveabreveAogonekaogonek Ccircumflex ccircumflex Cdotaccent cdotaccentDcarondcaronDcroatEmacronemacronEbreveebreve Edotaccent edotaccentEogonekeogonekEcaronecaron Gcircumflex gcircumflex Gdotaccent gdotaccent Gcommaaccent gcommaaccent Hcircumflex hcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJij Jcircumflex jcircumflex Kcommaaccent kcommaaccent kgreenlandicLacutelacute Lcommaaccent lcommaaccentLcaronlcaronLdotldotNacutenacute Ncommaaccent ncommaaccentNcaronncaron napostropheEngengOmacronomacronObreveobreve Ohungarumlaut ohungarumlautRacuteracute Rcommaaccent rcommaaccentRcaronrcaronSacutesacute Scircumflex scircumflex Tcommaaccent tcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuring Uhungarumlaut uhungarumlautUogonekuogonek Wcircumflex wcircumflex Ycircumflex ycircumflexZacutezacute Zdotaccent zdotaccentlongsuni0180uni0181uni0182uni0183uni0184uni0185uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni018Funi0190uni0191uni0193uni0194uni0195uni0196uni0197uni0198uni0199uni019Auni019Buni019Cuni019Duni019Euni019FOhornohornuni01A2uni01A3uni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01AAuni01ABuni01ACuni01ADuni01AEUhornuhornuni01B1uni01B2uni01B3uni01B4uni01B5uni01B6uni01B7uni01B8uni01B9uni01BAuni01BBuni01BCuni01BDuni01BEuni01BFuni01C0uni01C1uni01C2uni01C3uni01C4uni01C5uni01C6uni01C7uni01C8uni01C9uni01CAuni01CBuni01CCuni01CDuni01CEuni01CFuni01D0uni01D1uni01D2uni01D3uni01D4uni01D5uni01D6uni01D7uni01D8uni01D9uni01DAuni01DBuni01DCuni01DDuni01DEuni01DFuni01E0uni01E1uni01E2uni01E3uni01E4uni01E5Gcarongcaronuni01E8uni01E9uni01EAuni01EBuni01ECuni01EDuni01EEuni01EFuni01F0uni01F1uni01F2uni01F3uni01F4uni01F5uni01F6uni01F7uni01F8uni01F9 Aringacute aringacuteAEacuteaeacute Oslashacute oslashacuteuni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208uni0209uni020Auni020Buni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217 Scommaaccent scommaaccentuni021Auni021Buni021Cuni021Duni021Euni021Funi0220uni0221uni0222uni0223uni0224uni0225uni0226uni0227uni0228uni0229uni022Auni022Buni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233uni0234uni0235uni0236dotlessjuni0238uni0239uni023Auni023Buni023Cuni023Duni023Euni023Funi0240uni0241uni0242uni0243uni0244uni0245uni0246uni0247uni0248uni0249uni024Auni024Buni024Cuni024Duni024Euni024Funi0250uni0251uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni0259uni025Auni025Buni025Cuni025Duni025Euni025Funi0260uni0261uni0262uni0263uni0264uni0265uni0266uni0267uni0268uni0269uni026Auni026Buni026Cuni026Duni026Euni026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276uni0277uni0278uni0279uni027Auni027Buni027Cuni027Duni027Euni027Funi0280uni0281uni0282uni0283uni0284uni0285uni0286uni0287uni0288uni0289uni028Auni028Buni028Cuni028Duni028Euni028Funi0290uni0291uni0292uni0293uni0294uni0295uni0296uni0297uni0298uni0299uni029Auni029Buni029Cuni029Duni029Euni029Funi02A0uni02A1uni02A2uni02A3uni02A4uni02A5uni02A6uni02A7uni02A8uni02A9uni02AAuni02ABuni02ACuni02ADuni02AEuni02AFuni02B0uni02B1uni02B2uni02B3uni02B4uni02B5uni02B6uni02B7uni02B8uni02B9uni02BAuni02BBuni02BCuni02BDuni02BEuni02BFuni02C0uni02C1uni02C2uni02C3uni02C4uni02C5uni02C8uni02C9uni02CAuni02CBuni02CCuni02CDuni02CEuni02CFuni02D0uni02D1uni02D2uni02D3uni02D4uni02D5uni02D6uni02D7uni02DEuni02DFuni02E0uni02E1uni02E2uni02E3uni02E4uni02E5uni02E6uni02E7uni02E8uni02E9uni02ECuni02EDuni02EEuni02F3uni02F7 gravecomb acutecombuni0302 tildecombuni0304uni0305uni0306uni0307uni0308 hookabovecombuni030Auni030Buni030Cuni030Duni030Euni030Funi0310uni0311uni0312uni0313uni0314uni0315uni0316uni0317uni0318uni0319uni031Auni031Buni031Cuni031Duni031Euni031Funi0320uni0321uni0322 dotbelowcombuni0324uni0325uni0326uni0327uni0328uni0329uni032Auni032Buni032Cuni032Duni032Euni032Funi0330uni0331uni0332uni0333uni0334uni0335uni0336uni0337uni0338uni0339uni033Auni033Buni033Cuni033Duni033Euni033Funi0340uni0341uni0342uni0343uni0344uni0345uni0346uni0347uni0348uni0349uni034Auni034Buni034Cuni034Duni034Euni034Funi0351uni0352uni0353uni0357uni0358uni035Cuni035Duni035Euni035Funi0360uni0361uni0362uni0374uni0375uni037Auni037Buni037Cuni037Duni037Etonos dieresistonos Alphatonos anoteleia EpsilontonosEtatonos Iotatonos Omicrontonos Upsilontonos OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsi IotadieresisUpsilondieresis alphatonos epsilontonosetatonos iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigma1sigmatauupsilonphichipsiomega iotadieresisupsilondieresis omicrontonos upsilontonos omegatonosuni03D0theta1Upsilon1uni03D3uni03D4phi1omega1uni03D7uni03D8uni03D9uni03DAuni03DBuni03DCuni03DDuni03DEuni03DFuni03E0uni03E1uni03E2uni03E3uni03E4uni03E5uni03E6uni03E7uni03E8uni03E9uni03EAuni03EBuni03ECuni03EDuni03EEuni03EFuni03F0uni03F1uni03F2uni03F3uni03F4uni03F5uni03F6uni03F7uni03F8uni03F9uni03FAuni03FBuni03FCuni03FDuni03FEuni03FFuni0400uni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Duni040Euni040Funi0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0450uni0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Duni045Euni045Funi0460uni0461uni0462uni0463uni0464uni0465uni0466uni0467uni0468uni0469uni046Auni046Buni046Cuni046Duni046Euni046Funi0470uni0471uni0472uni0473uni0474uni0475uni0476uni0477uni0478uni0479uni047Auni047Buni047Cuni047Duni047Euni047Funi0480uni0481uni0482uni0483uni0484uni0485uni0486uni0488uni0489uni048Auni048Buni048Cuni048Duni048Euni048Funi0490uni0491uni0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni049Cuni049Duni049Euni049Funi04A0uni04A1uni04A2uni04A3uni04A4uni04A5uni04A6uni04A7uni04A8uni04A9uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04B4uni04B5uni04B6uni04B7uni04B8uni04B9uni04BAuni04BBuni04BCuni04BDuni04BEuni04BFuni04C0uni04C1uni04C2uni04C3uni04C4uni04C5uni04C6uni04C7uni04C8uni04C9uni04CAuni04CBuni04CCuni04CDuni04CEuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni04FAuni04FBuni04FCuni04FDuni04FEuni04FFuni0500uni0501uni0502uni0503uni0504uni0505uni0506uni0507uni0508uni0509uni050Auni050Buni050Cuni050Duni050Euni050Funi0510uni0511uni0512uni0513uni0531uni0532uni0533uni0534uni0535uni0536uni0537uni0538uni0539uni053Auni053Buni053Cuni053Duni053Euni053Funi0540uni0541uni0542uni0543uni0544uni0545uni0546uni0547uni0548uni0549uni054Auni054Buni054Cuni054Duni054Euni054Funi0550uni0551uni0552uni0553uni0554uni0555uni0556uni0559uni055Auni055Buni055Cuni055Duni055Euni055Funi0561uni0562uni0563uni0564uni0565uni0566uni0567uni0568uni0569uni056Auni056Buni056Cuni056Duni056Euni056Funi0570uni0571uni0572uni0573uni0574uni0575uni0576uni0577uni0578uni0579uni057Auni057Buni057Cuni057Duni057Euni057Funi0580uni0581uni0582uni0583uni0584uni0585uni0586uni0587uni0589uni058Auni05B0uni05B1uni05B2uni05B3uni05B4uni05B5uni05B6uni05B7uni05B8uni05B9uni05BAuni05BBuni05BCuni05BDuni05BEuni05BFuni05C0uni05C1uni05C2uni05C3uni05C6uni05C7uni05D0uni05D1uni05D2uni05D3uni05D4uni05D5uni05D6uni05D7uni05D8uni05D9uni05DAuni05DBuni05DCuni05DDuni05DEuni05DFuni05E0uni05E1uni05E2uni05E3uni05E4uni05E5uni05E6uni05E7uni05E8uni05E9uni05EAuni05F0uni05F1uni05F2uni05F3uni05F4uni060Cuni0615uni061Buni061Funi0621uni0622uni0623uni0624uni0625uni0626uni0627uni0628uni0629uni062Auni062Buni062Cuni062Duni062Euni062Funi0630uni0631uni0632uni0633uni0634uni0635uni0636uni0637uni0638uni0639uni063Auni0640uni0641uni0642uni0643uni0644uni0645uni0646uni0647uni0648uni0649uni064Auni064Buni064Cuni064Duni064Euni064Funi0650uni0651uni0652uni0653uni0654uni0655uni065Auni0660uni0661uni0662uni0663uni0664uni0665uni0666uni0667uni0668uni0669uni066Auni066Buni066Cuni066Duni066Euni066Funi0674uni0679uni067Auni067Buni067Cuni067Duni067Euni067Funi0680uni0681uni0682uni0683uni0684uni0685uni0686uni0687uni0691uni0692uni0695uni0698uni06A1uni06A4uni06A6uni06A9uni06AFuni06B5uni06BAuni06BFuni06C6uni06CCuni06CEuni06D5uni06F0uni06F1uni06F2uni06F3uni06F4uni06F5uni06F6uni06F7uni06F8uni06F9uni07C0uni07C1uni07C2uni07C3uni07C4uni07C5uni07C6uni07C7uni07C8uni07C9uni07CAuni07CBuni07CCuni07CDuni07CEuni07CFuni07D0uni07D1uni07D2uni07D3uni07D4uni07D5uni07D6uni07D7uni07D8uni07D9uni07DAuni07DBuni07DCuni07DDuni07DEuni07DFuni07E0uni07E1uni07E2uni07E3uni07E4uni07E5uni07E6uni07E7uni07EBuni07ECuni07EDuni07EEuni07EFuni07F0uni07F1uni07F2uni07F3uni07F4uni07F5uni07F8uni07F9uni07FAuni0E3Funi0E81uni0E82uni0E84uni0E87uni0E88uni0E8Auni0E8Duni0E94uni0E95uni0E96uni0E97uni0E99uni0E9Auni0E9Buni0E9Cuni0E9Duni0E9Euni0E9Funi0EA1uni0EA2uni0EA3uni0EA5uni0EA7uni0EAAuni0EABuni0EADuni0EAEuni0EAFuni0EB0uni0EB1uni0EB2uni0EB3uni0EB4uni0EB5uni0EB6uni0EB7uni0EB8uni0EB9uni0EBBuni0EBCuni0EBDuni0EC0uni0EC1uni0EC2uni0EC3uni0EC4uni0EC6uni0EC8uni0EC9uni0ECAuni0ECBuni0ECCuni0ECDuni0ED0uni0ED1uni0ED2uni0ED3uni0ED4uni0ED5uni0ED6uni0ED7uni0ED8uni0ED9uni0EDCuni0EDDuni10A0uni10A1uni10A2uni10A3uni10A4uni10A5uni10A6uni10A7uni10A8uni10A9uni10AAuni10ABuni10ACuni10ADuni10AEuni10AFuni10B0uni10B1uni10B2uni10B3uni10B4uni10B5uni10B6uni10B7uni10B8uni10B9uni10BAuni10BBuni10BCuni10BDuni10BEuni10BFuni10C0uni10C1uni10C2uni10C3uni10C4uni10C5uni10D0uni10D1uni10D2uni10D3uni10D4uni10D5uni10D6uni10D7uni10D8uni10D9uni10DAuni10DBuni10DCuni10DDuni10DEuni10DFuni10E0uni10E1uni10E2uni10E3uni10E4uni10E5uni10E6uni10E7uni10E8uni10E9uni10EAuni10EBuni10ECuni10EDuni10EEuni10EFuni10F0uni10F1uni10F2uni10F3uni10F4uni10F5uni10F6uni10F7uni10F8uni10F9uni10FAuni10FBuni10FCuni1401uni1402uni1403uni1404uni1405uni1406uni1407uni1409uni140Auni140Buni140Cuni140Duni140Euni140Funi1410uni1411uni1412uni1413uni1414uni1415uni1416uni1417uni1418uni1419uni141Auni141Buni141Duni141Euni141Funi1420uni1421uni1422uni1423uni1424uni1425uni1426uni1427uni1428uni1429uni142Auni142Buni142Cuni142Duni142Euni142Funi1430uni1431uni1432uni1433uni1434uni1435uni1437uni1438uni1439uni143Auni143Buni143Cuni143Duni143Euni143Funi1440uni1441uni1442uni1443uni1444uni1445uni1446uni1447uni1448uni1449uni144Auni144Cuni144Duni144Euni144Funi1450uni1451uni1452uni1454uni1455uni1456uni1457uni1458uni1459uni145Auni145Buni145Cuni145Duni145Euni145Funi1460uni1461uni1462uni1463uni1464uni1465uni1466uni1467uni1468uni1469uni146Auni146Buni146Cuni146Duni146Euni146Funi1470uni1471uni1472uni1473uni1474uni1475uni1476uni1477uni1478uni1479uni147Auni147Buni147Cuni147Duni147Euni147Funi1480uni1481uni1482uni1483uni1484uni1485uni1486uni1487uni1488uni1489uni148Auni148Buni148Cuni148Duni148Euni148Funi1490uni1491uni1492uni1493uni1494uni1495uni1496uni1497uni1498uni1499uni149Auni149Buni149Cuni149Duni149Euni149Funi14A0uni14A1uni14A2uni14A3uni14A4uni14A5uni14A6uni14A7uni14A8uni14A9uni14AAuni14ABuni14ACuni14ADuni14AEuni14AFuni14B0uni14B1uni14B2uni14B3uni14B4uni14B5uni14B6uni14B7uni14B8uni14B9uni14BAuni14BBuni14BCuni14BDuni14C0uni14C1uni14C2uni14C3uni14C4uni14C5uni14C6uni14C7uni14C8uni14C9uni14CAuni14CBuni14CCuni14CDuni14CEuni14CFuni14D0uni14D1uni14D2uni14D3uni14D4uni14D5uni14D6uni14D7uni14D8uni14D9uni14DAuni14DBuni14DCuni14DDuni14DEuni14DFuni14E0uni14E1uni14E2uni14E3uni14E4uni14E5uni14E6uni14E7uni14E8uni14E9uni14EAuni14ECuni14EDuni14EEuni14EFuni14F0uni14F1uni14F2uni14F3uni14F4uni14F5uni14F6uni14F7uni14F8uni14F9uni14FAuni14FBuni14FCuni14FDuni14FEuni14FFuni1500uni1501uni1502uni1503uni1504uni1505uni1506uni1507uni1510uni1511uni1512uni1513uni1514uni1515uni1516uni1517uni1518uni1519uni151Auni151Buni151Cuni151Duni151Euni151Funi1520uni1521uni1522uni1523uni1524uni1525uni1526uni1527uni1528uni1529uni152Auni152Buni152Cuni152Duni152Euni152Funi1530uni1531uni1532uni1533uni1534uni1535uni1536uni1537uni1538uni1539uni153Auni153Buni153Cuni153Duni153Euni1540uni1541uni1542uni1543uni1544uni1545uni1546uni1547uni1548uni1549uni154Auni154Buni154Cuni154Duni154Euni154Funi1550uni1552uni1553uni1554uni1555uni1556uni1557uni1558uni1559uni155Auni155Buni155Cuni155Duni155Euni155Funi1560uni1561uni1562uni1563uni1564uni1565uni1566uni1567uni1568uni1569uni156Auni1574uni1575uni1576uni1577uni1578uni1579uni157Auni157Buni157Cuni157Duni157Euni157Funi1580uni1581uni1582uni1583uni1584uni1585uni158Auni158Buni158Cuni158Duni158Euni158Funi1590uni1591uni1592uni1593uni1594uni1595uni1596uni15A0uni15A1uni15A2uni15A3uni15A4uni15A5uni15A6uni15A7uni15A8uni15A9uni15AAuni15ABuni15ACuni15ADuni15AEuni15AFuni15DEuni15E1uni1646uni1647uni166Euni166Funi1670uni1671uni1672uni1673uni1674uni1675uni1676uni1680uni1681uni1682uni1683uni1684uni1685uni1686uni1687uni1688uni1689uni168Auni168Buni168Cuni168Duni168Euni168Funi1690uni1691uni1692uni1693uni1694uni1695uni1696uni1697uni1698uni1699uni169Auni169Buni169Cuni1D00uni1D01uni1D02uni1D03uni1D04uni1D05uni1D06uni1D07uni1D08uni1D09uni1D0Auni1D0Buni1D0Cuni1D0Duni1D0Euni1D0Funi1D10uni1D11uni1D12uni1D13uni1D14uni1D16uni1D17uni1D18uni1D19uni1D1Auni1D1Buni1D1Cuni1D1Duni1D1Euni1D1Funi1D20uni1D21uni1D22uni1D23uni1D26uni1D27uni1D28uni1D29uni1D2Auni1D2Buni1D2Cuni1D2Duni1D2Euni1D30uni1D31uni1D32uni1D33uni1D34uni1D35uni1D36uni1D37uni1D38uni1D39uni1D3Auni1D3Buni1D3Cuni1D3Duni1D3Euni1D3Funi1D40uni1D41uni1D42uni1D43uni1D44uni1D45uni1D46uni1D47uni1D48uni1D49uni1D4Auni1D4Buni1D4Cuni1D4Duni1D4Euni1D4Funi1D50uni1D51uni1D52uni1D53uni1D54uni1D55uni1D56uni1D57uni1D58uni1D59uni1D5Auni1D5Buni1D5Duni1D5Euni1D5Funi1D60uni1D61uni1D62uni1D63uni1D64uni1D65uni1D66uni1D67uni1D68uni1D69uni1D6Auni1D77uni1D78uni1D7Buni1D85uni1D9Buni1D9Cuni1D9Duni1D9Euni1D9Funi1DA0uni1DA1uni1DA2uni1DA3uni1DA4uni1DA5uni1DA6uni1DA7uni1DA8uni1DA9uni1DAAuni1DABuni1DACuni1DADuni1DAEuni1DAFuni1DB0uni1DB1uni1DB2uni1DB3uni1DB4uni1DB5uni1DB6uni1DB7uni1DB8uni1DB9uni1DBAuni1DBBuni1DBCuni1DBDuni1DBEuni1DBFuni1DC4uni1DC5uni1DC6uni1DC7uni1DC8uni1DC9uni1E00uni1E01uni1E02uni1E03uni1E04uni1E05uni1E06uni1E07uni1E08uni1E09uni1E0Auni1E0Buni1E0Cuni1E0Duni1E0Euni1E0Funi1E10uni1E11uni1E12uni1E13uni1E14uni1E15uni1E16uni1E17uni1E18uni1E19uni1E1Auni1E1Buni1E1Cuni1E1Duni1E1Euni1E1Funi1E20uni1E21uni1E22uni1E23uni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E2Euni1E2Funi1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3Buni1E3Cuni1E3Duni1E3Euni1E3Funi1E40uni1E41uni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49uni1E4Auni1E4Buni1E4Cuni1E4Duni1E4Euni1E4Funi1E50uni1E51uni1E52uni1E53uni1E54uni1E55uni1E56uni1E57uni1E58uni1E59uni1E5Auni1E5Buni1E5Cuni1E5Duni1E5Euni1E5Funi1E60uni1E61uni1E62uni1E63uni1E64uni1E65uni1E66uni1E67uni1E68uni1E69uni1E6Auni1E6Buni1E6Cuni1E6Duni1E6Euni1E6Funi1E70uni1E71uni1E72uni1E73uni1E74uni1E75uni1E76uni1E77uni1E78uni1E79uni1E7Auni1E7Buni1E7Cuni1E7Duni1E7Euni1E7FWgravewgraveWacutewacute Wdieresis wdieresisuni1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8Duni1E8Euni1E8Funi1E90uni1E91uni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99uni1E9Auni1E9Buni1EA0uni1EA1uni1EA2uni1EA3uni1EA4uni1EA5uni1EA6uni1EA7uni1EA8uni1EA9uni1EAAuni1EABuni1EACuni1EADuni1EAEuni1EAFuni1EB0uni1EB1uni1EB2uni1EB3uni1EB4uni1EB5uni1EB6uni1EB7uni1EB8uni1EB9uni1EBAuni1EBBuni1EBCuni1EBDuni1EBEuni1EBFuni1EC0uni1EC1uni1EC2uni1EC3uni1EC4uni1EC5uni1EC6uni1EC7uni1EC8uni1EC9uni1ECAuni1ECBuni1ECCuni1ECDuni1ECEuni1ECFuni1ED0uni1ED1uni1ED2uni1ED3uni1ED4uni1ED5uni1ED6uni1ED7uni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EDEuni1EDFuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE6uni1EE7uni1EE8uni1EE9uni1EEAuni1EEBuni1EECuni1EEDuni1EEEuni1EEFuni1EF0uni1EF1Ygraveygraveuni1EF4uni1EF5uni1EF6uni1EF7uni1EF8uni1EF9uni1F00uni1F01uni1F02uni1F03uni1F04uni1F05uni1F06uni1F07uni1F08uni1F09uni1F0Auni1F0Buni1F0Cuni1F0Duni1F0Euni1F0Funi1F10uni1F11uni1F12uni1F13uni1F14uni1F15uni1F18uni1F19uni1F1Auni1F1Buni1F1Cuni1F1Duni1F20uni1F21uni1F22uni1F23uni1F24uni1F25uni1F26uni1F27uni1F28uni1F29uni1F2Auni1F2Buni1F2Cuni1F2Duni1F2Euni1F2Funi1F30uni1F31uni1F32uni1F33uni1F34uni1F35uni1F36uni1F37uni1F38uni1F39uni1F3Auni1F3Buni1F3Cuni1F3Duni1F3Euni1F3Funi1F40uni1F41uni1F42uni1F43uni1F44uni1F45uni1F48uni1F49uni1F4Auni1F4Buni1F4Cuni1F4Duni1F50uni1F51uni1F52uni1F53uni1F54uni1F55uni1F56uni1F57uni1F59uni1F5Buni1F5Duni1F5Funi1F60uni1F61uni1F62uni1F63uni1F64uni1F65uni1F66uni1F67uni1F68uni1F69uni1F6Auni1F6Buni1F6Cuni1F6Duni1F6Euni1F6Funi1F70uni1F71uni1F72uni1F73uni1F74uni1F75uni1F76uni1F77uni1F78uni1F79uni1F7Auni1F7Buni1F7Cuni1F7Duni1F80uni1F81uni1F82uni1F83uni1F84uni1F85uni1F86uni1F87uni1F88uni1F89uni1F8Auni1F8Buni1F8Cuni1F8Duni1F8Euni1F8Funi1F90uni1F91uni1F92uni1F93uni1F94uni1F95uni1F96uni1F97uni1F98uni1F99uni1F9Auni1F9Buni1F9Cuni1F9Duni1F9Euni1F9Funi1FA0uni1FA1uni1FA2uni1FA3uni1FA4uni1FA5uni1FA6uni1FA7uni1FA8uni1FA9uni1FAAuni1FABuni1FACuni1FADuni1FAEuni1FAFuni1FB0uni1FB1uni1FB2uni1FB3uni1FB4uni1FB6uni1FB7uni1FB8uni1FB9uni1FBAuni1FBBuni1FBCuni1FBDuni1FBEuni1FBFuni1FC0uni1FC1uni1FC2uni1FC3uni1FC4uni1FC6uni1FC7uni1FC8uni1FC9uni1FCAuni1FCBuni1FCCuni1FCDuni1FCEuni1FCFuni1FD0uni1FD1uni1FD2uni1FD3uni1FD6uni1FD7uni1FD8uni1FD9uni1FDAuni1FDBuni1FDDuni1FDEuni1FDFuni1FE0uni1FE1uni1FE2uni1FE3uni1FE4uni1FE5uni1FE6uni1FE7uni1FE8uni1FE9uni1FEAuni1FEBuni1FECuni1FEDuni1FEEuni1FEFuni1FF2uni1FF3uni1FF4uni1FF6uni1FF7uni1FF8uni1FF9uni1FFAuni1FFBuni1FFCuni1FFDuni1FFEuni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni200Buni200Cuni200Duni200Euni200Funi2010uni2011 figuredashuni2015uni2016 underscoredbl quotereverseduni201Funi2023onedotenleadertwodotenleaderuni2027uni202Auni202Buni202Cuni202Duni202Euni202Funi2031minuteseconduni2034uni2035uni2036uni2037uni2038uni203B exclamdbluni203Duni203Euni203Funi2040uni2041uni2042uni2043uni2045uni2046uni2047uni2048uni2049uni204Auni204Buni204Cuni204Duni204Euni204Funi2050uni2051uni2052uni2053uni2054uni2055uni2056uni2057uni2058uni2059uni205Auni205Buni205Cuni205Duni205Euni205Funi2060uni2061uni2062uni2063uni206Auni206Buni206Cuni206Duni206Euni206Funi2070uni2071uni2074uni2075uni2076uni2077uni2078uni2079uni207Auni207Buni207Cuni207Duni207Euni207Funi2080uni2081uni2082uni2083uni2084uni2085uni2086uni2087uni2088uni2089uni208Auni208Buni208Cuni208Duni208Euni2090uni2091uni2092uni2093uni2094uni20A0 colonmonetaryuni20A2lirauni20A5uni20A6pesetauni20A8uni20A9uni20AAdongEurouni20ADuni20AEuni20AFuni20B0uni20B1uni20B2uni20B3uni20B4uni20B5uni20D0uni20D1uni20D6uni20D7uni20DBuni20DCuni20E1uni2100uni2101uni2102uni2103uni2104uni2105uni2106uni2107uni2108uni2109uni210Buni210Cuni210Duni210Euni210Funi2110Ifrakturuni2112uni2113uni2114uni2115uni2116uni2117 weierstrassuni2119uni211Auni211BRfrakturuni211D prescriptionuni211Funi2120uni2121uni2123uni2124uni2125uni2126uni2127uni2128uni2129uni212Auni212Buni212Cuni212D estimateduni212Funi2130uni2131uni2132uni2133uni2134alephuni2136uni2137uni2138uni2139uni213Auni213Buni213Cuni213Duni213Euni213Funi2140uni2141uni2142uni2143uni2144uni2145uni2146uni2147uni2148uni2149uni214Buni214Eonethird twothirdsuni2155uni2156uni2157uni2158uni2159uni215A oneeighth threeeighths fiveeighths seveneighthsuni215Funi2160uni2161uni2162uni2163uni2164uni2165uni2166uni2167uni2168uni2169uni216Auni216Buni216Cuni216Duni216Euni216Funi2170uni2171uni2172uni2173uni2174uni2175uni2176uni2177uni2178uni2179uni217Auni217Buni217Cuni217Duni217Euni217Funi2180uni2181uni2182uni2183uni2184 arrowleftarrowup arrowright arrowdown arrowboth arrowupdnuni2196uni2197uni2198uni2199uni219Auni219Buni219Cuni219Duni219Euni219Funi21A0uni21A1uni21A2uni21A3uni21A4uni21A5uni21A6uni21A7 arrowupdnbseuni21A9uni21AAuni21ABuni21ACuni21ADuni21AEuni21AFuni21B0uni21B1uni21B2uni21B3uni21B4carriagereturnuni21B6uni21B7uni21B8uni21B9uni21BAuni21BBuni21BCuni21BDuni21BEuni21BFuni21C0uni21C1uni21C2uni21C3uni21C4uni21C5uni21C6uni21C7uni21C8uni21C9uni21CAuni21CBuni21CCuni21CDuni21CEuni21CF arrowdblleft arrowdblup arrowdblright arrowdbldown arrowdblbothuni21D5uni21D6uni21D7uni21D8uni21D9uni21DAuni21DBuni21DCuni21DDuni21DEuni21DFuni21E0uni21E1uni21E2uni21E3uni21E4uni21E5uni21E6uni21E7uni21E8uni21E9uni21EAuni21EBuni21ECuni21EDuni21EEuni21EFuni21F0uni21F1uni21F2uni21F3uni21F4uni21F5uni21F6uni21F7uni21F8uni21F9uni21FAuni21FBuni21FCuni21FDuni21FEuni21FF universaluni2201 existentialuni2204emptysetgradientelement notelementuni220Asuchthatuni220Cuni220Duni220Euni2210uni2213uni2214uni2215uni2216 asteriskmathuni2218uni2219uni221Buni221C proportional orthogonalangleuni2221uni2222uni2223uni2224uni2225uni2226 logicaland logicalor intersectionunionuni222Cuni222Duni222Euni222Funi2230uni2231uni2232uni2233 thereforeuni2235uni2236uni2237uni2238uni2239uni223Auni223Bsimilaruni223Duni223Euni223Funi2240uni2241uni2242uni2243uni2244 congruentuni2246uni2247uni2249uni224Auni224Buni224Cuni224Duni224Euni224Funi2250uni2251uni2252uni2253uni2254uni2255uni2256uni2257uni2258uni2259uni225Auni225Buni225Cuni225Duni225Euni225F equivalenceuni2262uni2263uni2266uni2267uni2268uni2269uni226Auni226Buni226Cuni226Duni226Euni226Funi2270uni2271uni2272uni2273uni2274uni2275uni2276uni2277uni2278uni2279uni227Auni227Buni227Cuni227Duni227Euni227Funi2280uni2281 propersubsetpropersuperset notsubsetuni2285 reflexsubsetreflexsupersetuni2288uni2289uni228Auni228Buni228Cuni228Duni228Euni228Funi2290uni2291uni2292uni2293uni2294 circleplusuni2296circlemultiplyuni2298uni2299uni229Auni229Buni229Cuni229Duni229Euni229Funi22A0uni22A1uni22A2uni22A3uni22A4 perpendicularuni22A6uni22A7uni22A8uni22A9uni22AAuni22ABuni22ACuni22ADuni22AEuni22AFuni22B2uni22B3uni22B4uni22B5uni22B6uni22B7uni22B8uni22B9uni22BAuni22BBuni22BCuni22BDuni22BEuni22BFuni22C0uni22C1uni22C2uni22C3uni22C4dotmathuni22C6uni22C8uni22C9uni22CAuni22CBuni22CCuni22CDuni22D6uni22D7uni22D8uni22D9uni22DAuni22DBuni22DCuni22DDuni22DEuni22DFuni22E0uni22E1uni22E2uni22E3uni22E4uni22E5uni22E6uni22E7uni22E8uni22E9uni22EAuni22EBuni22ECuni22EDuni22EEuni22EFuni22F0uni22F1uni22F2uni22F3uni22F4uni22F5uni22F6uni22F7uni22F8uni22F9uni22FAuni22FBuni22FCuni22FDuni22FEuni22FFuni2300uni2301houseuni2303uni2304uni2305uni2306uni2307uni2308uni2309uni230Auni230Buni230Cuni230Duni230Euni230F revlogicalnotuni2311uni2318uni2319uni231Cuni231Duni231Euni231F integraltp integralbtuni2324uni2325uni2326uni2327uni2328uni232Buni232Cuni2373uni2374uni2375uni237Auni237Duni2387uni2394uni239Buni239Cuni239Duni239Euni239Funi23A0uni23A1uni23A2uni23A3uni23A4uni23A5uni23A6uni23A7uni23A8uni23A9uni23AAuni23ABuni23ACuni23ADuni23AEuni23CEuni23CFuni23E3uni23E5uni2422uni2423uni2460uni2461uni2462uni2463uni2464uni2465uni2466uni2467uni2468uni2469SF100000uni2501SF110000uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250BSF010000uni250Duni250Euni250FSF030000uni2511uni2512uni2513SF020000uni2515uni2516uni2517SF040000uni2519uni251Auni251BSF080000uni251Duni251Euni251Funi2520uni2521uni2522uni2523SF090000uni2525uni2526uni2527uni2528uni2529uni252Auni252BSF060000uni252Duni252Euni252Funi2530uni2531uni2532uni2533SF070000uni2535uni2536uni2537uni2538uni2539uni253Auni253BSF050000uni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254Buni254Cuni254Duni254Euni254FSF430000SF240000SF510000SF520000SF390000SF220000SF210000SF250000SF500000SF490000SF380000SF280000SF270000SF260000SF360000SF370000SF420000SF190000SF200000SF230000SF470000SF480000SF410000SF450000SF460000SF400000SF540000SF530000SF440000uni256Duni256Euni256Funi2570uni2571uni2572uni2573uni2574uni2575uni2576uni2577uni2578uni2579uni257Auni257Buni257Cuni257Duni257Euni257Fupblockuni2581uni2582uni2583dnblockuni2585uni2586uni2587blockuni2589uni258Auni258Blfblockuni258Duni258Euni258Frtblockltshadeshadedkshadeuni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259F filledboxH22073uni25A2uni25A3uni25A4uni25A5uni25A6uni25A7uni25A8uni25A9H18543H18551 filledrectuni25ADuni25AEuni25AFuni25B0uni25B1triagupuni25B3uni25B4uni25B5uni25B6uni25B7uni25B8uni25B9triagrtuni25BBtriagdnuni25BDuni25BEuni25BFuni25C0uni25C1uni25C2uni25C3triaglfuni25C5uni25C6uni25C7uni25C8uni25C9circleuni25CCuni25CDuni25CEH18533uni25D0uni25D1uni25D2uni25D3uni25D4uni25D5uni25D6uni25D7 invbullet invcircleuni25DAuni25DBuni25DCuni25DDuni25DEuni25DFuni25E0uni25E1uni25E2uni25E3uni25E4uni25E5 openbulletuni25E7uni25E8uni25E9uni25EAuni25EBuni25ECuni25EDuni25EEuni25EFuni25F0uni25F1uni25F2uni25F3uni25F4uni25F5uni25F6uni25F7uni25F8uni25F9uni25FAuni25FBuni25FCuni25FDuni25FEuni25FFuni2600uni2601uni2602uni2603uni2604uni2605uni2606uni2607uni2608uni2609uni260Auni260Buni260Cuni260Duni260Euni260Funi2610uni2611uni2612uni2613uni2614uni2615uni2616uni2617uni2618uni2619uni261Auni261Buni261Cuni261Duni261Euni261Funi2620uni2621uni2622uni2623uni2624uni2625uni2626uni2627uni2628uni2629uni262Auni262Buni262Cuni262Duni262Euni262Funi2630uni2631uni2632uni2633uni2634uni2635uni2636uni2637uni2638uni2639 smileface invsmilefacesununi263Duni263Euni263Ffemaleuni2641maleuni2643uni2644uni2645uni2646uni2647uni2648uni2649uni264Auni264Buni264Cuni264Duni264Euni264Funi2650uni2651uni2652uni2653uni2654uni2655uni2656uni2657uni2658uni2659uni265Auni265Buni265Cuni265Duni265Euni265Fspadeuni2661uni2662clubuni2664heartdiamonduni2667uni2668uni2669 musicalnotemusicalnotedbluni266Cuni266Duni266Euni266Funi2670uni2671uni2672uni2673uni2674uni2675uni2676uni2677uni2678uni2679uni267Auni267Buni267Cuni267Duni267Euni267Funi2680uni2681uni2682uni2683uni2684uni2685uni2686uni2687uni2688uni2689uni268Auni268Buni268Cuni268Duni268Euni268Funi2690uni2691uni2692uni2693uni2694uni2695uni2696uni2697uni2698uni2699uni269Auni269Buni269Cuni26A0uni26A1uni26A2uni26A3uni26A4uni26A5uni26A6uni26A7uni26A8uni26A9uni26AAuni26ABuni26ACuni26ADuni26AEuni26AFuni26B0uni26B1uni26B2uni2701uni2702uni2703uni2704uni2706uni2707uni2708uni2709uni270Cuni270Duni270Euni270Funi2710uni2711uni2712uni2713uni2714uni2715uni2716uni2717uni2718uni2719uni271Auni271Buni271Cuni271Duni271Euni271Funi2720uni2721uni2722uni2723uni2724uni2725uni2726uni2727uni2729uni272Auni272Buni272Cuni272Duni272Euni272Funi2730uni2731uni2732uni2733uni2734uni2735uni2736uni2737uni2738uni2739uni273Auni273Buni273Cuni273Duni273Euni273Funi2740uni2741uni2742uni2743uni2744uni2745uni2746uni2747uni2748uni2749uni274Auni274Buni274Duni274Funi2750uni2751uni2752uni2756uni2758uni2759uni275Auni275Buni275Cuni275Duni275Euni2761uni2762uni2763uni2764uni2765uni2766uni2767uni2768uni2769uni276Auni276Buni276Cuni276Duni276Euni276Funi2770uni2771uni2772uni2773uni2774uni2775uni2776uni2777uni2778uni2779uni277Auni277Buni277Cuni277Duni277Euni277Funi2780uni2781uni2782uni2783uni2784uni2785uni2786uni2787uni2788uni2789uni278Auni278Buni278Cuni278Duni278Euni278Funi2790uni2791uni2792uni2793uni2794uni2798uni2799uni279Auni279Buni279Cuni279Duni279Euni279Funi27A0uni27A1uni27A2uni27A3uni27A4uni27A5uni27A6uni27A7uni27A8uni27A9uni27AAuni27ABuni27ACuni27ADuni27AEuni27AFuni27B1uni27B2uni27B3uni27B4uni27B5uni27B6uni27B7uni27B8uni27B9uni27BAuni27BBuni27BCuni27BDuni27BEuni27E0uni27E6uni27E7uni27E8uni27E9uni27EAuni27EBuni27F0uni27F1uni27F2uni27F3uni27F4uni27F5uni27F6uni27F7uni27F8uni27F9uni27FAuni27FBuni27FCuni27FDuni27FEuni27FFuni2800uni2801uni2802uni2803uni2804uni2805uni2806uni2807uni2808uni2809uni280Auni280Buni280Cuni280Duni280Euni280Funi2810uni2811uni2812uni2813uni2814uni2815uni2816uni2817uni2818uni2819uni281Auni281Buni281Cuni281Duni281Euni281Funi2820uni2821uni2822uni2823uni2824uni2825uni2826uni2827uni2828uni2829uni282Auni282Buni282Cuni282Duni282Euni282Funi2830uni2831uni2832uni2833uni2834uni2835uni2836uni2837uni2838uni2839uni283Auni283Buni283Cuni283Duni283Euni283Funi2840uni2841uni2842uni2843uni2844uni2845uni2846uni2847uni2848uni2849uni284Auni284Buni284Cuni284Duni284Euni284Funi2850uni2851uni2852uni2853uni2854uni2855uni2856uni2857uni2858uni2859uni285Auni285Buni285Cuni285Duni285Euni285Funi2860uni2861uni2862uni2863uni2864uni2865uni2866uni2867uni2868uni2869uni286Auni286Buni286Cuni286Duni286Euni286Funi2870uni2871uni2872uni2873uni2874uni2875uni2876uni2877uni2878uni2879uni287Auni287Buni287Cuni287Duni287Euni287Funi2880uni2881uni2882uni2883uni2884uni2885uni2886uni2887uni2888uni2889uni288Auni288Buni288Cuni288Duni288Euni288Funi2890uni2891uni2892uni2893uni2894uni2895uni2896uni2897uni2898uni2899uni289Auni289Buni289Cuni289Duni289Euni289Funi28A0uni28A1uni28A2uni28A3uni28A4uni28A5uni28A6uni28A7uni28A8uni28A9uni28AAuni28ABuni28ACuni28ADuni28AEuni28AFuni28B0uni28B1uni28B2uni28B3uni28B4uni28B5uni28B6uni28B7uni28B8uni28B9uni28BAuni28BBuni28BCuni28BDuni28BEuni28BFuni28C0uni28C1uni28C2uni28C3uni28C4uni28C5uni28C6uni28C7uni28C8uni28C9uni28CAuni28CBuni28CCuni28CDuni28CEuni28CFuni28D0uni28D1uni28D2uni28D3uni28D4uni28D5uni28D6uni28D7uni28D8uni28D9uni28DAuni28DBuni28DCuni28DDuni28DEuni28DFuni28E0uni28E1uni28E2uni28E3uni28E4uni28E5uni28E6uni28E7uni28E8uni28E9uni28EAuni28EBuni28ECuni28EDuni28EEuni28EFuni28F0uni28F1uni28F2uni28F3uni28F4uni28F5uni28F6uni28F7uni28F8uni28F9uni28FAuni28FBuni28FCuni28FDuni28FEuni28FFuni2906uni2907uni290Auni290Buni2940uni2941uni2983uni2984uni29CEuni29CFuni29D0uni29D1uni29D2uni29D3uni29D4uni29D5uni29EBuni29FAuni29FBuni2A00uni2A01uni2A02uni2A0Cuni2A0Duni2A0Euni2A0Funi2A10uni2A11uni2A12uni2A13uni2A14uni2A15uni2A16uni2A17uni2A18uni2A19uni2A1Auni2A1Buni2A1Cuni2A2Funi2A7Duni2A7Euni2A7Funi2A80uni2A81uni2A82uni2A83uni2A84uni2A85uni2A86uni2A87uni2A88uni2A89uni2A8Auni2A8Buni2A8Cuni2A8Duni2A8Euni2A8Funi2A90uni2A91uni2A92uni2A93uni2A94uni2A95uni2A96uni2A97uni2A98uni2A99uni2A9Auni2A9Buni2A9Cuni2A9Duni2A9Euni2A9Funi2AA0uni2AAEuni2AAFuni2AB0uni2AB1uni2AB2uni2AB3uni2AB4uni2AB5uni2AB6uni2AB7uni2AB8uni2AB9uni2ABAuni2AF9uni2AFAuni2B00uni2B01uni2B02uni2B03uni2B04uni2B05uni2B06uni2B07uni2B08uni2B09uni2B0Auni2B0Buni2B0Cuni2B0Duni2B0Euni2B0Funi2B10uni2B11uni2B12uni2B13uni2B14uni2B15uni2B16uni2B17uni2B18uni2B19uni2B1Auni2B20uni2B21uni2B22uni2B23uni2C60uni2C61uni2C62uni2C63uni2C64uni2C65uni2C66uni2C67uni2C68uni2C69uni2C6Auni2C6Buni2C6Cuni2C6Duni2C6Euni2C6Funi2C71uni2C72uni2C73uni2C74uni2C75uni2C76uni2C77uni2D30uni2D31uni2D32uni2D33uni2D34uni2D35uni2D36uni2D37uni2D38uni2D39uni2D3Auni2D3Buni2D3Cuni2D3Duni2D3Euni2D3Funi2D40uni2D41uni2D42uni2D43uni2D44uni2D45uni2D46uni2D47uni2D48uni2D49uni2D4Auni2D4Buni2D4Cuni2D4Duni2D4Euni2D4Funi2D50uni2D51uni2D52uni2D53uni2D54uni2D55uni2D56uni2D57uni2D58uni2D59uni2D5Auni2D5Buni2D5Cuni2D5Duni2D5Euni2D5Funi2D60uni2D61uni2D62uni2D63uni2D64uni2D65uni2D6Funi4DC0uni4DC1uni4DC2uni4DC3uni4DC4uni4DC5uni4DC6uni4DC7uni4DC8uni4DC9uni4DCAuni4DCBuni4DCCuni4DCDuni4DCEuni4DCFuni4DD0uni4DD1uni4DD2uni4DD3uni4DD4uni4DD5uni4DD6uni4DD7uni4DD8uni4DD9uni4DDAuni4DDBuni4DDCuni4DDDuni4DDEuni4DDFuni4DE0uni4DE1uni4DE2uni4DE3uni4DE4uni4DE5uni4DE6uni4DE7uni4DE8uni4DE9uni4DEAuni4DEBuni4DECuni4DEDuni4DEEuni4DEFuni4DF0uni4DF1uni4DF2uni4DF3uni4DF4uni4DF5uni4DF6uni4DF7uni4DF8uni4DF9uni4DFAuni4DFBuni4DFCuni4DFDuni4DFEuni4DFFuniF000uniF001uniF6C5uniFB00uniFB03uniFB04uniFB05uniFB06uniFB13uniFB14uniFB15uniFB16uniFB17uniFB1DuniFB1EuniFB1FuniFB20uniFB21uniFB22uniFB23uniFB24uniFB25uniFB26uniFB27uniFB28uniFB29uniFB2AuniFB2BuniFB2CuniFB2DuniFB2EuniFB2FuniFB30uniFB31uniFB32uniFB33uniFB34uniFB35uniFB36uniFB38uniFB39uniFB3AuniFB3BuniFB3CuniFB3EuniFB40uniFB41uniFB43uniFB44uniFB46uniFB47uniFB48uniFB49uniFB4AuniFB4BuniFB4CuniFB4DuniFB4EuniFB4FuniFB52uniFB53uniFB54uniFB55uniFB56uniFB57uniFB58uniFB59uniFB5AuniFB5BuniFB5CuniFB5DuniFB5EuniFB5FuniFB60uniFB61uniFB62uniFB63uniFB64uniFB65uniFB66uniFB67uniFB68uniFB69uniFB6AuniFB6BuniFB6CuniFB6DuniFB6EuniFB6FuniFB70uniFB71uniFB72uniFB73uniFB74uniFB75uniFB76uniFB77uniFB78uniFB79uniFB7AuniFB7BuniFB7CuniFB7DuniFB7EuniFB7FuniFB80uniFB81uniFB8AuniFB8BuniFB8CuniFB8DuniFB8EuniFB8FuniFB90uniFB91uniFB92uniFB93uniFB94uniFB95uniFB9EuniFB9FuniFBD9uniFBDAuniFBE8uniFBE9uniFBFCuniFBFDuniFBFEuniFBFFuniFE00uniFE01uniFE02uniFE03uniFE04uniFE05uniFE06uniFE07uniFE08uniFE09uniFE0AuniFE0BuniFE0CuniFE0DuniFE0EuniFE0FuniFE20uniFE21uniFE22uniFE23uniFE70uniFE71uniFE72uniFE73uniFE74uniFE76uniFE77uniFE78uniFE79uniFE7AuniFE7BuniFE7CuniFE7DuniFE7EuniFE7FuniFE80uniFE81uniFE82uniFE83uniFE84uniFE85uniFE86uniFE87uniFE88uniFE89uniFE8AuniFE8BuniFE8CuniFE8DuniFE8EuniFE8FuniFE90uniFE91uniFE92uniFE93uniFE94uniFE95uniFE96uniFE97uniFE98uniFE99uniFE9AuniFE9BuniFE9CuniFE9DuniFE9EuniFE9FuniFEA0uniFEA1uniFEA2uniFEA3uniFEA4uniFEA5uniFEA6uniFEA7uniFEA8uniFEA9uniFEAAuniFEABuniFEACuniFEADuniFEAEuniFEAFuniFEB0uniFEB1uniFEB2uniFEB3uniFEB4uniFEB5uniFEB6uniFEB7uniFEB8uniFEB9uniFEBAuniFEBBuniFEBCuniFEBDuniFEBEuniFEBFuniFEC0uniFEC1uniFEC2uniFEC3uniFEC4uniFEC5uniFEC6uniFEC7uniFEC8uniFEC9uniFECAuniFECBuniFECCuniFECDuniFECEuniFECFuniFED0uniFED1uniFED2uniFED3uniFED4uniFED5uniFED6uniFED7uniFED8uniFED9uniFEDAuniFEDBuniFEDCuniFEDDuniFEDEuniFEDFuniFEE0uniFEE1uniFEE2uniFEE3uniFEE4uniFEE5uniFEE6uniFEE7uniFEE8uniFEE9uniFEEAuniFEEBuniFEECuniFEEDuniFEEEuniFEEFuniFEF0uniFEF1uniFEF2uniFEF3uniFEF4uniFEF5uniFEF6uniFEF7uniFEF8uniFEF9uniFEFAuniFEFBuniFEFCuniFEFFuniFFF9uniFFFAuniFFFBuniFFFCuniFFFDu1D300u1D301u1D302u1D303u1D304u1D305u1D306u1D307u1D308u1D309u1D30Au1D30Bu1D30Cu1D30Du1D30Eu1D30Fu1D310u1D311u1D312u1D313u1D314u1D315u1D316u1D317u1D318u1D319u1D31Au1D31Bu1D31Cu1D31Du1D31Eu1D31Fu1D320u1D321u1D322u1D323u1D324u1D325u1D326u1D327u1D328u1D329u1D32Au1D32Bu1D32Cu1D32Du1D32Eu1D32Fu1D330u1D331u1D332u1D333u1D334u1D335u1D336u1D337u1D338u1D339u1D33Au1D33Bu1D33Cu1D33Du1D33Eu1D33Fu1D340u1D341u1D342u1D343u1D344u1D345u1D346u1D347u1D348u1D349u1D34Au1D34Bu1D34Cu1D34Du1D34Eu1D34Fu1D350u1D351u1D352u1D353u1D354u1D355u1D356u1D538u1D539u1D53Bu1D53Cu1D53Du1D53Eu1D540u1D541u1D542u1D543u1D544u1D546u1D54Au1D54Bu1D54Cu1D54Du1D54Eu1D54Fu1D550u1D552u1D553u1D554u1D555u1D556u1D557u1D558u1D559u1D55Au1D55Bu1D55Cu1D55Du1D55Eu1D55Fu1D560u1D561u1D562u1D563u1D564u1D565u1D566u1D567u1D568u1D569u1D56Au1D56Bu1D5A0u1D5A1u1D5A2u1D5A3u1D5A4u1D5A5u1D5A6u1D5A7u1D5A8u1D5A9u1D5AAu1D5ABu1D5ACu1D5ADu1D5AEu1D5AFu1D5B0u1D5B1u1D5B2u1D5B3u1D5B4u1D5B5u1D5B6u1D5B7u1D5B8u1D5B9u1D5BAu1D5BBu1D5BCu1D5BDu1D5BEu1D5BFu1D5C0u1D5C1u1D5C2u1D5C3u1D5C4u1D5C5u1D5C6u1D5C7u1D5C8u1D5C9u1D5CAu1D5CBu1D5CCu1D5CDu1D5CEu1D5CFu1D5D0u1D5D1u1D5D2u1D5D3u1D7E2u1D7E3u1D7E4u1D7E5u1D7E6u1D7E7u1D7E8u1D7E9u1D7EAu1D7EB dlLtcaronDieresisAcuteTildeGrave CircumflexCaron uni0311.caseBreve Dotaccent Hungarumlaut Doubleacute arabic_dot arabic_2dots arabic_3dotsarabic_3dots_aarabic_2dots_a arabic_4dots uni066E.fina uni066E.init uni066E.medi uni06A1.fina uni06A1.init uni06A1.medi uni066F.fina uni066F.init uni066F.medi uni06BA.init uni06BA.medi arabic_ring uni067C.fina uni067C.init uni067C.medi uni067D.fina uni067D.init uni067D.medi uni0681.fina uni0681.init uni0681.medi uni0682.fina uni0682.init uni0682.medi uni0685.fina uni0685.init uni0685.medi uni06BF.fina uni06BF.init uni06BF.mediarabic_gaf_barEng.altuni0268.dotlessuni029D.dotless uni03080304 uni03040308 uni03070304 uni03080301 uni03080300 uni03040301 uni03040300 uni03030304 uni0308030C uni03030308 uni030C0307 uni03030301 uni03020301 uni03020300 uni03020303 uni03060303 uni03060301 uni03060300 uni03060309 uni03020309 uni03010307 brailledotJ.alt uni0695.finauniFEAE.fina.longstart uni06B5.fina uni06B5.init uni06B5.medi uni06CE.fina uni06CE.init uni06CE.medi uni0692.final.alt uni06D5.finauni0478.monographuni0479.monographiogonek.dotlessuni2148.dotlessuni2149.dotlessuni1E2D.dotlessuni1ECB.dotlessdcoI.alt arrow.base uni0651064B uni0651064C uni064B0651 uni0651064E uni0651064F uni064E0651 uni0654064E uni0654064F uni07CA.fina uni07CA.medi uni07CA.init uni07CB.fina uni07CB.medi uni07CB.init uni07CC.fina uni07CC.medi uni07CC.init uni07CD.fina uni07CD.medi uni07CD.init uni07CE.fina uni07CE.medi uni07CE.init uni07CF.fina uni07CF.medi uni07CF.init uni07D0.fina uni07D0.medi uni07D0.init uni07D1.fina uni07D1.medi uni07D1.init uni07D2.fina uni07D2.medi uni07D2.init uni07D3.fina uni07D3.medi uni07D3.init uni07D4.fina uni07D4.medi uni07D4.init uni07D5.fina uni07D5.medi uni07D5.init uni07D6.fina uni07D6.medi uni07D6.init uni07D7.fina uni07D7.medi uni07D7.init uni07D8.fina uni07D8.medi uni07D8.init uni07D9.fina uni07D9.medi uni07D9.init uni07DA.fina uni07DA.medi uni07DA.init uni07DB.fina uni07DB.medi uni07DB.init uni07DC.fina uni07DC.medi uni07DC.init uni07DD.fina uni07DD.medi uni07DD.init uni07DE.fina uni07DE.medi uni07DE.init uni07DF.fina uni07DF.medi uni07DF.init uni07E0.fina uni07E0.medi uni07E0.init uni07E1.fina uni07E1.medi uni07E1.init uni07E2.fina uni07E2.medi uni07E2.init uni07E3.fina uni07E3.medi uni07E3.init uni07E4.fina uni07E4.medi uni07E4.init uni07E5.fina uni07E5.medi uni07E5.init uni07E6.fina uni07E6.medi uni07E6.init uni07E7.fina uni07E7.medi uni07E7.init Ringabove uni2630.alt uni2631.alt uni2632.alt uni2633.alt uni2634.alt uni2635.alt uni2636.alt uni2637.alt uni047E.diacuni048A.brevelessuni048B.breveless uni2E18.u51@%2%%A:B2SAS//2ݖ}ٻ֊A}G}G͖2ƅ%]%]@@%d%d%A2dA  d   A(]%]@%..%A  %d%@~}}~}}|d{T{%zyxw v utsrqponl!kjBjSih}gBfedcba:`^ ][ZYX YX WW2VUTUBTSSRQJQP ONMNMLKJKJIJI IH GFEDC-CBAK@?>=>=<=<; <@; :987876765 65 43 21 21 0/ 0 / .- .- ,2+*%+d*)*%)('%(A'%&% &% $#"!! d d BBBdB-B}d       -d@--d++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++singularity-1.00/singularity/data/themes/default/fonts/acknowtt.ttf000066400000000000000000000344101367731414700257210ustar00rootroot00000000000000FFTMUQ 5HGDEF244GPOSDvLu5( GSUB4lOS/2LVcmapjlzgasp4glyf i&head!46hhea%ET$hmtx[|loca maxp/Lx name"*a/pFpost(Qb1vhea5d$vmtx[yg5HJ_<+22ff 0 @ffff3/HPfEd@ ZTffff3fff3f3333f33LfL3M333ftX ~ ""Z  ""A`ާ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ardeixpkvjsgwl|cnm}bĹyqz"Lj *6B`t0@Rn.DXn$:Pj,>Zj~&.6>FNV^fz,L^z0<Nh  0 Z  ( N p " B ^ z   6 V x   8 T v  2Tv:Nd~&Hf~&@` (0HPhp| *FZb=353MM=3353L暚!5##5#535#53533533#3#'353MMMMMMMMMMMMMMMLMMMMMMLMMLL5#5!5!53533!!#3͚3MMMMMMMMM3353##3#5##53535#5#5#MMMLMMMM͚MMMLMMMLMM3MM1535#53533!3#!##5MM͙3LMMMMLMMMM=3暚3 35#5353#3MMM晙MMMM3 1535#533#MMMMMMM=35#53353353#3#5#MMMMMMMMMMLMMMMLMMMM3 %#5#535333MMLMML53M3=!3LL15353#####53535353MMMLMML3MMMLMMMMLM1!35͙3Z33 5!!!!5!53333MMMM5!#3!5!5#535MM333MLMMLM !5!533533͚暚 =!!!!5!5333MMMM 1!!!%353͙MMMM5!#͚3M3 !!%#3=#33MMM !#5!%#3͚3M153'53暚5353M3353##33#5#5#535MLLMMMM3MMMLMMMMLMM33=!%5!33MMMMM35333###53535#5LMMLMMM3MMMLMMMMLM 5!!53553͙3MLMMM !!!!53535̚MMMMLL 7#!#5'35͚MM 1!#33535MM͙L3MMMM!!!333MM 1!3#35MMMM3 1!!3#!͙3MMLMM 7#!!3͙MML 753!!!353͙LMM 7#3353#5 5!#3!535͚33MMMM15333M37#335353##33#5#5LMMMMMMMMMMLMMMM13!3M7#3335353#5##5LMMMMMMMMMM7#33353#5#5LMMMMMM1!35͙3 7#!%35͙MM 1!##535͚MM3 7#!#3#5'35MMLMM =!!!!5!5333MMMM5!##͚3MM313333=3353###5#5MMMMMMM7#3353353#5#5#LMMMMMMMMMMM=3353#3#5##535MMM暚LL=3353###5#5MMM暚LL5!###3!5353535MMM3MML3MMMLMMMMLM33!!33MM533333#5#5#5#5LMMMMLM3MMMLMMMMLM31535#5!3MM 7#53533#5MMMMLLLMML35!3MMM=3暚$%&'()*+,-./0123456789:;<= 35#535!#3MMM3LMMf3 5!3#!5353MM͚3MLM37#53533353##5#5MMMMMMMLMMMLLMMM153533MM5#3533!!#3MMMMMMM%35#15###3#!5#535#5MMMMMMMMMMMMLMMMMLM73#35#73535##5#35LLMMMMMM3MLMMMMMMM3535#5#53353##3##5MMMMMMMMMMLLMMMM=353 5!!!!5!=#3333MMMMML=3353L暚35#535!53#5!!!#3暚MMMM3MLMMMM 53#53535MM3MMMMM37#535##335335#535#LLMMMMMLLMMLMMMMLMM=!#5͚L=3LL%35#!53#5!!!7535#35'#33MMMMMLMMMMMMMLMM35!3MM33#75#MMMM =3533##55!MMMMLLMM 535#535###75#LLLMMMMMMMMM 535#53335#5#MMLLMMMM5353#MLMMMMf 53333!#MLM3MM #5#5#535!3MMM3LMMM3=3Mf5353MMMMM53M453'35M4皚M3 53#3535#5#3#3535#5#MMLLMMMMLMMLMMLMMLM%#53535#####3#35333MMMMLMMMMLM晙MMMML3MMMMM3!!#35#5#;5#535#####3#353533MMMMMMMMLMMMMLMMMMMMML3MMMM!;3##53535##5#5#33#3#353MMMMMMLMMMMLM3MMMMMMMMLMMM 5!#!!53333LMM3MM7#35#5333#5'35MMMMMMMM7#35353#3#5'35LMMMMMMM3#'#3533#5##5#;5#MMMMMM3MMMMM3#33#535###5#335#MMMMM3MLMMMMM3M 7#!#5'35%53353͚͚MMMMMM 7#35!3#5'35'35M3MMMMM7#!!3#!!5'35͙33MMLMMMMf 535#!!!#L3MMMM135#5333!3#!MM͙3MMMMMMLMM135353#3!3#!LM͙3MMMMMMLMM1!5!535#5!5#5##5##735#͙3MMMMMMLMMMMMMMM 1!!3#!53!53͙33MMLMMMMMM535#5333#3!535MM33MMMMMMMM535353#3#3!535LM33MMMMMMMM3#!5#535#5##5##735#͚MMMM3MMMMMMMMM 5!#3!535'53353͚33MMMMMMMM =35!3#!5335#3MMMMLMMMML 3#5#5#5315##35333#535#MMLMMLMMMMMMMMM3MMMMM 135#533335MM͙MMMM3 135353#335LM͙MMMM33#!#5##5##735#MMMM3MMMMMMM3#!#535###5135#MMM33MMMMMM 1!35%53353͙͚3MMMM  #135#;5#7#3535#35#5##35#335MMMMMMMMMMMMLLMMMMMMMMMMMMMMMLMMMMM !53!735'35MMLMM3MMMMM1!###;5#5#3͚MM3MMM#3535###!3ML3MMMM 1!#5####735#MMMMMMMM 13335335333MMMM#53535###333535353MLMMMMMMMMLL 7#333#'5#MMMLMMMMLMMLL #!3#535#5MMM3MM535#5333!5!55#MM333MMMMMMMM535353#3!5!55#LM333MMMMMMMM%#53%!!!#5##5##735#33MMMMMMMMMMMMM%#53!!!#535###5135#33MMMMM3MMMMMMM 5!!5!55#53353333MMMMMMMM 535!3!5!5'355#M3M333MMMMMM %!!5!5!5!!3573533MMMMMMMMf 535#!!!#L3MMMM7!!35#5333%3533MM͙MMMMMMMM7!!35353#3%3533LM͙MMMMMMMM3#!5#5##5##!5!35#3MMMM͙3MLMMMMMM 7!!!%35%5335333͙͚MMMMMMMMM3 335#533#MMMMMMMMM 5353#3#MLLMMMM3 ;35##75#1#3MMMMMMMMMMM3 ;35##15#MMMM =35!3#!5335#3MMMMLMMMML33#535###5#335#MMMMM3MMMMM3M 135#533335MM͙MMMM3 135353#335LM͙MMMM33#!#5##5##735#MMMM3MMMMMMM3#!#535###5135#MMM33MMMMMM 1!35%53353͙͚3MMMM =!'5353LLLLLMMMM !53!735'35MMLMM3MMMMM1!###;5#5#3͚MM3MMM#3535###!3ML3MMMM 1!#5####735#MMMMMMMM 13335335333MMMM#53535###!!!3ML3MMMMMM 333###75#MML͚MLMLL 15!5!53353533533͚3MM暚MMMM!#3263#"&=###; 2&OLQ..=8=33MMM=3#5MLIJ /732654&#".#"326#"&54632>32#"&0 $.* 1G1%.+ 148#1D=0"98$1D<1"7,#!,,,#!++,*H7:F)--+J7:E( 5!!5!55#333MMMM %!!3#3%35'35MMM͙MMMMLMMMMMM&' 7!!!%3533͙MMMM) 15!5!5!353͙MM3MM+13-./f #!###fM333#!#͚33234 7#!3#3#5'35MMMMMLMM6789f 133333LM331535#53353#3#5#LMMLMM 15!5!533533͚MM暚=(R+ X P ${  $ $ >  eGMA FONTS [e-mail] kentpw@norwich.netGMA FONTS [e-mail] kentpw@norwich.netAcknowledge TT BRKAcknowledge TT BRKRegularRegularFONTLAB30:TTEXPORTFONTLAB30:TTEXPORTAcknowledge TT BRKAcknowledge TT BRKVersion 2.55Version 2.55AcknowledgeTTBRKAcknowledgeTTBRK3  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghjikmlnoqprsutvwxzy{}|~     .0160 sfthyphenmicrouniFF41uniFF42uniFF43uniFF44uniFF45uniFF46uniFF47uniFF48uniFF49uniFF4AuniFF4BuniFF4CuniFF4DuniFF4EuniFF4FuniFF50uniFF51uniFF52uniFF53uniFF54uniFF55uniFF56uniFF57uniFF58uniFF59uniFF5A$,}~ ,DFLTfrac, ~ DFLTɉo1=22 1f3333331Jsingularity-1.00/singularity/data/themes/default/fonts/superstar_info.txt000077500000000000000000000107301367731414700271560ustar00rootroot00000000000000Superstar. A gem sticker based typeface. I actually got the design from actual stickers like this, so... ...anyways, here are the charsets. '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Original Style Charset (superstarorig_memesbruh03.ttf): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% MB03 Style Charset (superstar_memesbruh03.ttf): ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                  ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~             7          ~                                                                                                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O Q R S T U V W X Y Z [ \ ^ _                       ! " & 0 2 3 9 : < > D p t u v w x y  ! ! ! ! "! &! .![! \! ]! ^! " " " " " " " " " +" H" `" d" e" "% % % % % % % % % % % % j& 0  '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% NOTE: It is highly recommended to use the MB03 version (superstar_memesbruh03.ttf) for your own work. NOTE: These fonts are 100% free for personal AND commercial use. This applies to all other fonts made by me (memesbruh03). That's right. No need to ask me for permission to use this. Feel free to use this for anything you want! '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2018 memesbruh03 https://memesbruh03.neocities.org/ aaronchand84@gmail.comsingularity-1.00/singularity/data/themes/default/fonts/superstar_memesbruh03.ttf000077500000000000000000002502641367731414700303430ustar00rootroot00000000000000`DSIGDGDEFDOS/2P.`cmapLDHcvt "gaspCglyfcT(Thead?*: 6hheai$hmtx:X locaY 0| maxp nameӄD(post0ݞL 3 Ph[2ttf@ \ @@ 3h  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghjikmlnoqprsutvwxzy{}|~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgAmacronamacronAbreveabreveAogonekaogonek Ccircumflex ccircumflexCdotcdotDcarondcaronDcroatEmacronemacronEbreveebreveEdotedotEogonekeogonekEcaronecaron Gcircumflex gcircumflexGdotgdotGcedillagcedilla Hcircumflex hcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJij Jcircumflex jcircumflexKcedillakcedilla kgreenlandicLacutelacuteLcedillalcedillaLcaronlcaronLdotldotNacutenacuteNcedillancedillaNcaronncaron napostropheEngengOmacronomacronObreveobreve Odblacute odblacuteRacuteracuteRcedillarcedillaRcaronrcaronSacutesacute Scircumflex scircumflexTcedillatcedillaTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuring Udblacute udblacuteUogonekuogonek Wcircumflex wcircumflex Ycircumflex ycircumflexZacutezacuteZdotzdotlongs Aringacute aringacuteAEacuteaeacute Oslashacute oslashacute Scommaaccent scommaaccent Tcommabelow tcommabelowdotlessjfirsttonechinese questiongreektonosdialytikatonos Alphatonos anoteleia EpsilontonosEtatonos Iotatonos Omicrontonos Upsilontonos OmegatonosiotadieresistonosAlphaBetaGamma DeltagreekEpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsi IotadieresisUpsilondieresis alphatonos epsilontonosetatonos iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdamugreeknuxiomicronrhosigma1sigmatauupsilonphichipsiomega iotadieresisupsilondieresis omicrontonos upsilontonos omegatonos afii10023 afii10051 afii10052 afii10053 afii10054 afii10055 afii10056 afii10057 afii10058 afii10059 afii10060 afii10061 afii10062 afii10145 Acyrillic afii10018 afii10019 afii10020 afii10021 afii10022 afii10024 afii10025 afii10026 afii10027 afii10028 afii10029 afii10030 afii10031 afii10032 afii10033 afii10034 afii10035 afii10036 afii10037 afii10038 afii10039 afii10040 afii10041 afii10042 afii10043 afii10044 afii10045 afii10046 afii10047 afii10048 afii10049 acyrillic afii10066 afii10067 afii10068 afii10069 afii10070 afii10072 afii10073 afii10074 afii10075 afii10076 afii10077 afii10078 afii10079 afii10080 afii10081 afii10082 afii10083 afii10084 afii10085 afii10086 afii10087 afii10088 afii10089 afii10090 afii10091 afii10092 afii10093 afii10094 afii10095 afii10096 afii10097 afii10071 afii10099 afii10100 afii10101 afii10102 afii10103 afii10104 afii10105 afii10106 afii10107 afii10108 afii10109 afii10110 afii10193 afii10050 afii10098WgravewgraveWacutewacute Wdieresis wdieresisYgraveygrave hyphentwo afii00208 dbllowlinequoteleftreversedminutesecond exclamdbloverline zerosuperior foursuperior fivesuperior sixsuperior sevensuperior eightsuperior ninesuperior nsuperior zeroinferior oneinferior twoinferior threeinferior fourinferior fiveinferior sixinferior seveninferior eightinferior nineinferior afii08941pesetaEurouni20B8uni20B9uni20BAuni20BBuni20BCuni20BDuni20BE afii61248 afii61289 afii61352uni2120Ohm estimated oneeighth threeeighths fiveeighths seveneighths divisionslashbulletoperatoruni22F2SF100000SF110000SF010000SF030000SF020000SF040000H22073blacksmallsquareH18551 blackcircle openbullet musicalnoteideographicspaceuniF000uniF001uniF002"\hhp@.'?!#########55555555553333333333'3555555######3333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3#5533'#55555533@@@@@@@@@@@@@@@@@@@@@@@@@@ #5535533#!#5535533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#'%#5###5#5535#55353335333#3#'5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@37;5##5#5533355##5#555353353333##5#333###75#5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7;OS!##5#555353333#!#553535353535353533#######%5#%###5#555353333#'5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)-1!#5####5#55535#555353333#3533#3%5#5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #5535533#@@@@@@@@@@@@@@@@3#5#55555553533#3@@@@@@@@@@@@@@@@@@@@@@@@@@3#55355555#55333#@@@@@@@@@@@@@@@@@@@@@@@@@@@'%#5###5###55355#553335333533#3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7#55##5533553333##@@@@@@@@@@@@@@@@@@@@@@@@ 3#5535533#@@@@@@@@@@@@@@@%#####55333333@@@@@@@@@@@@@@@@3#5533@@@@@@@@@@#3#553535353535353533#######@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'/!####5#555555535333333#'355##5535##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3#555555#553533@@@@@@@@@@@@@@@@@@@@@@@@5!######555535335335#####5535333333#####33333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3!####5#553333355##55335#####5535333333#3#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'!#5####555535353535333#'355##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5!####5#553333355#####555553333333#####33333#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'1!####5#55555553533333####33333#'355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%3#5553553535#####553333333###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#-5!####5#55535#55535333333#3#'355###335###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'1!####5533335####5#555535333333#355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7#5533'#5533@@@@@@@@@@@@@@@@ 3#5535533##5533@@@@@@@@@@@@@@@@@@@@@@@7#5#5#555353533##33@@@@@@@@@@@@@@@@@@@@@@@@@@%#####55333333'#####55333333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7#553535#5#553333##@@@@@@@@@@@@@@@@@@@@@@@@@@@@)3#5533'#5535335#####5535333333###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@]a###5#5#555555553535333333333####5#5###55555353333355555#5######33335#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%/!#555#####555555535353333335#5##3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!+3!#####5555555553333333#3#'355###335###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-!####5#555555535333333##5###333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!#####5555555553333333#'355555###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1!######5555555553333333#####3333####33333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'3#5555555553333333#####3333####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5!####5#555555535333333##5###3335##553333#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-!#5555#####5555555553333355533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%!#####553355555##55333333##33@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%!###5#55333355555##5533333##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1!#5#5#5###5555555553335353533###333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!######5555555553333333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/75###5555555553333535353##5555#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!5#5#5#5###55555555533333555533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!####5#555555535333333#'355555###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)3#5555555553333333#####355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#5!#5####5#555555535333333#3%35#533555###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'1!#5#5#5###5555555553333333#3355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7!####5#55333335##5##5#55535333333##5###33333#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3#5555555##55333333##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-!####5#5555555533333555555533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+35#5#5#5555553333535555533###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!#5###5#5555555533353355555533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3!#55#5####5553535#5#5553333535533##33@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#3#5555#5#5555333355533##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!######55535353535####553333333####3333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3##555555555333#3@@@@@@@@@@@@@@@@@@@@@@@@@@@#!#5#5#5#5#5#5#5#55333333333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3##55355555#55333@@@@@@@@@@@@@@@@@@@@@@@@@@@#5####5535353333@@@@@@@@@@@@@@@@@@@@@@@#######5533333333@@@@@@@@@@@@@@@@@@@@@#5#5#553333@@@@@@@@@@@@@@@@@%/!#555#####555555535353333335#5##3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!+3!#####5555555553333333#3#'355###335###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-!####5#555555535333333##5###333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!#####5555555553333333#'355555###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1!######5555555553333333#####3333####33333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'3#5555555553333333#####3333####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5!####5#555555535333333##5###3335##553333#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-!#5555#####5555555553333355533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%!#####553355555##55333333##33@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%!###5#55333355555##5533333##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1!#5#5#5###5555555553335353533###333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!######5555555553333333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/75###5555555553333535353##5555#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!5#5#5#5###55555555533333555533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!####5#555555535333333#'355555###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)3#5555555553333333#####355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#5!#5####5#555555535333333#3%35#533555###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'1!#5#5#5###5555555553333333#3355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7!####5#55333335##5##5#55535333333##5###33333#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3#5555555##55333333##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-!####5#5555555533333555555533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+35#5#5#5555553333535555533###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!#5###5#5555555533353355555533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3!#55#5####5553535#5#5553333535533##33@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#3#5555#5#5555333355533##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!######55535353535####553333333####3333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3#5#555#553553533##33@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#5555555555533@@@@@@@@@@@@@@@@@@@@@@@@@@@@3#5535535#55#553333##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%##5###55353333533#@@@@@@@@@@@@@@@@@@@@@@@@#55555533#5533@@@@@@@@@@@@@@@@@@@@@@@@@@75#5#5553535333###333##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!######55355#553553533333####333###3333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#'%#5#####553555#5533333533#3'5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-#5#535#535#5#5555333355533##3#3#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #5555533#5555533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3;?####5#55335#555#55535333333##5###33333#'35###375#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#5533!#5533@@@@@@@@@@@@@@-Kg######5#5#555555553535333333333##'353555555#5######33335##5#555535333##3533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ %)!####5533333'#5###55555353333'5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3%#5#5###5#5#555353533##33555353533##33@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%#55####55333333@@@@@@@@@@@@@@@@@@@@-Kgk######5#5#555555553535333333333##'35##55###555555#33337555555#5#####33333#3'5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#######5533333333@@@@@@@@@@@@@@@@@@@@@@##5#555353333#'5#@@@@@@@@@@@@@@@@@@@@@@@@'!#####55333333'#55##5533553333##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#%####555353535###5533333##33@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#7###553335##55335###5533333#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#55353533##@@@@@@@@@@@@@@@@@@)3#55555555533333555533##5###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!#5555555###555##5#5555353333333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7#5533@@@@@@@@@ #553533#@@@@@@@@@@@@@@7#55555#553533@@@@@@@@@@@@@@@@@@@@@@@@ #)!####5533333'##5#5555353333#'55#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7#553535#5#553333##@@@@@@@@@@@@@@@@@@@@@@@@@@@@;M!#5###55553335533!#553535353535353533#######'##555#553533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=O!####55335##5533333#3!#553535353535353533#######'##555#553533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@;W!#5###55553335533!#553535353535353533#######'####553335##5#5533333#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!)####5#5553533533###333533##5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1;#5#55333#555#####555555535353333335#5##3@@@@@`@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1;#553533##555#####555555535353333335#5##3@@@@@`@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@;E#5####5535353333#555#####555555535353333335#5##3`@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=G##5###55353333533##555#####555555535353333335#5##3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%/7?!#555#####555555535353333335#5##3#5533!#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+59!#555#####555555535555353333335#5##35#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AK!######555#####555555535353333333333#####3333####33333355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5#5535#5#555555535333333##5###333533####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1=!######5555555553333333#####3333####33333#5#55333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1=!######5555555553333333#####3333####33333#553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1G!######5555555553333333#####3333####33333#5####5535353333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@19A!######5555555553333333#####3333####33333#5533!#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%1!#####553355555##55333333##33#5#55333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%1!#####553355555##55333333##33#553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%;!#####553355555##55333333##33#5####5535353333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%-5!#####553355555##55333333##33#5533!#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!5!#####5555#5535553333333#'355555###33##3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/G!5#5#5#5###55555555533333555533##5###55353333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/;!####5#555555535333333#'355555###3#5#55333@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/;!####5#555555535333333#'355555###3#553533#@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/E!####5#555555535333333#'355555###3#5####5535353333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/G!####5#555555535333333#'355555###3##5###55353333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/7?!####5#555555535333333#'355555###3#5533!#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%#5####55355#553333533#3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'-3!##5###5535#55555353333533#3#'55#'55#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-9!####5#5555555533333555555533##5#55333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-9!####5#5555555533333555555533##553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-C!####5#5555555533333555555533##5####5535353333@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-5=!####5#5555555533333555555533##5533!#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#/3#5555#5#5555333355533###553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+3#5555555553333333#####73555###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7o!####5#55333335##5##5#55535333333##5###33333#!####5#55333335##5##5#55535333333##5###33333#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%/;!#555#####555555535353333335#5##3#5#55333@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%/;!#555#####555555535353333335#5##3#553533#@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%/E!#555#####555555535353333335#5##3#5####5535353333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%/G!#555#####555555535353333335#5##3##5###55353333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%/7?!#555#####555555535353333335#5##3#5533!#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+59!#555#####555555535555353333335#5##35#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AK!######555#####555555535353333333333#####3333####33333355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5#5535#5#555555535333333##5###333533####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1=!######5555555553333333#####3333####33333#5#55333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1=!######5555555553333333#####3333####33333#553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1G!######5555555553333333#####3333####33333#5####5535353333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@19A!######5555555553333333#####3333####33333#5533!#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%1!#####553355555##55333333##33#5#55333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%1!#####553355555##55333333##33#553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%;!#####553355555##55333333##33#5####5535353333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%-5!#####553355555##55333333##33#5533!#5533@@@@@@@@@@@@@@@@@@@@`@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!5!#####5555#5535553333333#'355555###33##3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/G!5#5#5#5###55555555533333555533##5###55353333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/;!####5#555555535333333#'355555###3#5#55333@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/;!####5#555555535333333#'355555###3#553533#@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/E!####5#555555535333333#'355555###3#5####5535353333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/G!####5#555555535333333#'355555###3##5###55353333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/7?!####5#555555535333333#'355555###3#5533!#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3#55337#####55333333'#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'-3!##5###5535#55555353333533#3#'55#'55#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-9!####5#5555555533333555555533##5#55333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-9!####5#5555555533333555555533##553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-C!####5#5555555533333555555533##5####5535353333@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-5=!####5#5555555533333555555533##5533!#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#/3#5555#5#5555333355533###553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+3#5555555553333333#####73555###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+33#5555#5#5555333355533###5533!#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%/=!#555#####555555535353333335#5##3####5533333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%/=!#555#####555555535353333335#5##3####5533333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@;E####5#5533333533##555#####555555535353333335#5##3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%/E!#555#####555555535353333335#5##3####5#5533333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/9#5#553555#####5555555353533333#335#5##3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/9#5#553555#####5555555353533333#335#5##3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-9!####5#555555535333333##5###333533##553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-9!####5#555555535333333##5###333533##553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-C!####5#555555535333333##5###333533##5####5535353333@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-C!####5#555555535333333##5###333533##5####5535353333@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-5!####5#555555535333333##5###333533##5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-5!####5#555555535333333##5###333533##5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-C!####5#555555535333333##5###333533####5##3333535355@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-C!####5#555555535333333##5###333533####5##3333535355@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/E!#####5555555553333333#'355555###3###5##3333535355@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/E!#####5555555553333333#'355555###3###5##3333535355@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!5!#####5555#5535553333333#'355555###33##3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!5!#####5555#5535553333333#'355555###33##3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1?!######5555555553333333#####3333####33333####5533333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1?!######5555555553333333#####3333####33333####5533333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1G!######5555555553333333#####3333####33333####5#5533333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1G!######5555555553333333#####3333####33333####5#5533333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@19!######5555555553333333#####3333####33333#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@19!######5555555553333333#####3333####33333#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@9#5#55###5555555553333333#####3333####33333##3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@9#5#55###5555555553333333#####3333####33333##3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1G!######5555555553333333#####3333####33333###5##3333535355@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1G!######5555555553333333#####3333####33333###5##3333535355@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5K!####5#555555535333333##5###3335##553333##5####5535353333@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5K!####5#555555535333333##5###3335##553333##5####5535353333@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5K!####5#555555535333333##5###3335##553333#####5#5533333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5K!####5#555555535333333##5###3335##553333#####5#5533333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5=!####5#555555535333333##5###3335##553333##5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5=!####5#555555535333333##5###3335##553333##5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=#5535##5#555555535333333##5###3335##553333###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=#5535##5#555555535333333##5###3335##553333###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-C!#5555#####5555555553333355533#5####5535353333@@@@@@@@@@@@@`@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-C!#5555#####5555555553333355533#5####5535353333@@@@@@@@@@@@@`@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+3!#555#####555555#5535333335333#35###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+3!#555#####555555#5535333335333#35###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%=!#####553355555##55333333##33##5###55353333533#@@@@@@@@@@@@@@@@@@@@`@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%=!#####553355555##55333333##33##5###55353333533#@@@@@@@@@@@@@@@@@@@@`@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%1!#####553355555##55333333##33###553333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%1!#####553355555##55333333##33###553333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@9###5#553333533######553355555##55333333##33@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%9!#####553355555##55333333##33###5#553333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-#5#55#553355555##55333333##33###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-#5#55#553355555##55333333##33###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%-!#####553355555##55333333##33#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%!#####553355555##55333333##33@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C!#########553355555##55333333##3333355555##5533333##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C!#########553355555##55333333##3333355555##5533333##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%;!###5#55333355555##5533333###5####5535353333@@@@@@@@@@@@@@@@@`@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%;!###5#55333355555##5533333###5####5535353333@@@@@@@@@@@@@@@@@`@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ =#553533#75#5#5###5555555553335353533###333#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ =#553533#75#5#5###5555555553335353533###333#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1!#5#5#5###5555555553335353533###333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+!######5555555553333333#553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+!######5555555553333333#553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'#5535###5555555553333333###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'#5535###5555555553333333###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-!######5555555553333333#5535533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-!######5555555553333333#5535533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'!######5555555553333333#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'!######5555555553333333#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'!######5555#55355533333###33333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'!######5555#55355533333###33333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/;!5#5#5#5###55555555533333555533#553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/;!5#5#5#5###55555555533333555533#553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/;!5#5#5#5###55555555533333555533#553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/;!5#5#5#5###55555555533333555533#553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/E!5#5#5#5###55555555533333555533###5##3333535355@@@@@@@@@@@@@`@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/E!5#5#5#5###55555555533333555533###5##3333535355@@@@@@@@@@@@@`@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/=!5#5#5#5###55555555533333555533#5535533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1!##553355555#####5555555553333333#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1!##553355555#####5555555553333333#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/=!####5#555555535333333#'355555###3####5533333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/=!####5#555555535333333#'355555###3####5533333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/E!####5#555555535333333#'355555###3####5#5533333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/E!####5#555555535333333#'355555###3####5#5533333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/;G!####5#555555535333333#'355555###3#553533#3#553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/;G!####5#555555535333333#'355555###3#553533#3#553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@;K!##########5#55555553533333333333#####3333####33333%355555###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@;K!##########5#55555553533333333333#####3333####33333%355555###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'1=!#5#5#5###5555555553333333#3355###3#553533#@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'1=!#5#5#5###5555555553333333#3355###3#553533#@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 3=#553533#75#5#5###5555555553333333#3#355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 3=#553533#75#5#5###5555555553333333#3#355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'1G!#5#5#5###5555555553333333#3355###3###5##3333535355@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'1G!#5#5#5###5555555553333333#3355###3###5##3333535355@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7C!####5#55333335##5##5#55535333333##5###33333##553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7C!####5#55333335##5##5#55535333333##5###33333##553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7M!####5#55333335##5##5#55535333333##5###33333##5####5535353333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7M!####5#55333335##5##5#55535333333##5###33333##5####5535353333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?#5535##5#55333335##5##5#55535333333##5###33333###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?#5535##5#55333335##5##5#55535333333##5###33333###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7M!####5#55333335##5##5#55535333333##5###33333####5##3333535355@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7M!####5#55333335##5##5#55535333333##5###33333####5##3333535355@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%#55355555555##55333333###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%#55355555555##55333333###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@33#5555555##55333333#####5##3333535355@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@33#5555555##55333333#####5##3333535355@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!3#555#55355##55333333##3#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!3#555#55355##55333333##3#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-E!####5#5555555533333555555533###5###55353333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-E!####5#5555555533333555555533###5###55353333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-;!####5#5555555533333555555533#####5533333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-;!####5#5555555533333555555533#####5533333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-C!####5#5555555533333555555533#####5#5533333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-C!####5#5555555533333555555533#####5#5533333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%59!####5#555555553553533333#'355555###35#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%59!####5#555555553553533333#'355555###35#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-9E!####5#5555555533333555555533##553533#3#553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-9E!####5#5555555533333555555533##553533#3#553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5#5#55#5#5555555533333555555533###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5#5#55#5#5555555533333555555533###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/E!#5###5#5555555533353355555533##5####5535353333@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/E!#5###5#5555555533353355555533##5####5535353333@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#93#5555#5#5555333355533###5####5535353333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#93#5555#5#5555333355533###5####5535353333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+33#5555#5#5555333355533###5533!#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/;!######55535353535####553333333####3333#553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/;!######55535353535####553333333####3333#553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/7!######55535353535####553333333####3333#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/7!######55535353535####553333333####3333#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/E!######55535353535####553333333####3333###5##3333535355@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/E!######55535353535####553333333####3333###5##3333535355@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3#555#5535553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@1##553355555555553333333#####3333#####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+59E!#555#####555555535555353333335#5##35#7#553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+59E!#555#####555555535555353333335#5##35#7#553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AKW!######555#####555555535353333333333#####3333####33333355###3#553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AKW!######555#####555555535353333333333#####3333####33333355###3#553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'-3?!##5###5535#55555353333533#3#'55#'55##553533#@@@@@@@@@@@@@@@@@@@@@@`@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'-3?!##5###5535#55555353333533#3#'55#'55##553533#@@@@@@@@@@@@@@@@@@@@@@`@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7E!####5#55333335##5##5#55535333333##5###33333##5535533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7E!####5#55333335##5##5#55535333333##5###33333##5535533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+3#5555555##55333333###5535533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+3#5555555##55333333###5535533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%!###5#55333355555##5533333##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#5####5535353333@@@@@@@@@@@@@@@@@@@@@@@@@#5#5#553333533##@@@@@@@@@@@@@@@@@@@@@@@#####55333333@@@@@@@@@@@@@@@@@###5#553333533#@@@@@@@@@@@@@@@@@@@@#5533@@@@@@@@@@##5#555353333#'5#@@@@@@@@@@@@@@@@@@@@@@@@ #5#55333@@@@@@@@@@@@##5###55353333533#@@@@@@@@@@@@@@@@@@@@@@@@@ #553533#!#553533#@@@@@@@@@@@@@@@@@@@@@@@ 3#5535533##5533@@@@@@@@@@@@@@@@@@@@@@@@ #5535533#@@@@@@@@@@@@@@@@#5533!#55533!#5533@@@@@@@@@@@@@@@@@@@@@@@@%/=!#555#####555555535353333335#5##3!#5535533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7#5533@@@@@@@@@1?!######5555555553333333#####3333####33333#5535533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-;!#5555#####5555555553333355533#5535533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%3!#####553355555##55333333##33#5535533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/=!####5#555555535333333#'355555###3%#5535533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#1!#5555#5#5555333355533###5535533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5C!##5555355#5##3###5535#5555353533333#3#5535533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?#5533!#55533!#5533#####553355555##55333333##33@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%/!#555#####555555535353333335#5##3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!+3!#####5555555553333333#3#'355###335###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3#5555555553333333#####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-!######5555553535353333'3555#5##3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1!######5555555553333333#####3333####33333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!######55535353535####553333333####3333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-!#5555#####5555555553333355533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)1!####5#555555535333333#'355###335###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%!#####553355555##55333333##33@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1!#5#5#5###5555555553335353533###333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+!#55555#5####5555553535353333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/75###5555555553333535353##5555#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!5#5#5#5###55555555533333555533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1!######553333333####55333335######553333333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!####5#555555535333333#'355555###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-!#5555555#####5555555553333333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)3#5555555553333333#####355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!######55353535#5#5#553333333###33##333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3#5555555##55333333##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#3#5555#5#5555333355533##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!%)!#55##5#55535335533333###5##5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3!#55#5####5553535#5#5553333535533##33@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1!#555##5#555553335555333555533###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5!##5555355#5##3###5535#5555353533333#3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%-5!#####553355555##55333333##33#5533!#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+33#5555#5#5555333355533###5533!#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%/=!#555#####555555535353333335#5##3!#5535533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1?!######5555555553333333#####3333####33333#5535533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-;!#5555#####5555555553333355533#5535533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%3!#####553355555##55333333##33#5535533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+5=3#5555#5#5555333355533###5533!#55533!#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%/!#555#####555555535353333335#5##3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!+3!#####5555555553333333#3#'355###335###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3#5555555553333333#####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-!######5555553535353333'3555#5##3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1!######5555555553333333#####3333####33333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!######55535353535####553333333####3333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-!#5555#####5555555553333355533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)1!####5#555555535333333#'355###335###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%!#####553355555##55333333##33@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1!#5#5#5###5555555553335353533###333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+!#55555#5####5555553535353333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/75###5555555553333535353##5555#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!5#5#5#5###55555555533333555533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1!######553333333####55333335######553333333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!####5#555555535333333#'355555###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-!#5555555#####5555555553333333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)3#5555555553333333#####355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!######55353535#5#5#553333333###33##333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!######55353535#5#5#553333333###33##333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3#5555555##55333333##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#3#5555#5#5555333355533##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!%)!#55##5#55535335533333###5##5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3!#55#5####5553535#5#5553333535533##33@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1!#555##5#555553335555333555533###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5!##5555355#5##3###5535#5555353533333#3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%-5!#####553355555##55333333##33#5533!#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+33#5555#5#5555333355533###5533!#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/=!####5#555555535333333#'355555###3%#5535533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#1!#5555#5#5555333355533###5535533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5C!##5555355#5##3###5535#5555353533333#3#5535533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@19A!######5555555553333333#####3333####33333#5533!#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!#55355####5555555##55333333##3333#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+3#5555555553333333######553533#@@@@@@@@@@@@@@`@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1!####5#555555535333333##5###33##333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7!####5#55333335##5##5#55535333333##5###33333#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%!#####553355555##55333333##33@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%-5!#####553355555##55333333##33#5533!#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%!###5#55333355555##5533333##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/9!#####5555####55553535353535333333#'355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7A!#####5555#####555555555333335553333333#'355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-!#5555####5555555##55333333##3333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1=!#5#5#5###5555555553335353533###333#553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1G!####5#553333355####5#55553333355533#####5#5533333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3#55###555555555333333555555533###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%/!#555#####555555535353333335#5##3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'1!#####555555555333333####33333#'355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!+3!#####5555555553333333#3#'355###335###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3#5555555553333333#####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)9#55######5553555355555333333355555###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1!######5555555553333333#####3333####33333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@M!#5#5#5###555#####55353535#5#5#55333335553335353533###333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3!####5#553333355##55335#####5535333333#3#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/155555555533353535353##5555####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/E155555555533353535353##5555########5#5533333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1!#5#5#5###5555555553335353533###333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+!#55555#5####5555553535353333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/75###5555555553333535353##5555#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-!#5555#####5555555553333355533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!####5#555555535333333#'355555###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-!#5555555#####5555555553333333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)3#5555555553333333#####355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-!####5#555555535333333##5###333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3#5555555##55333333##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1!####5#553333355####5#55553333355533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!%)!#55##5#55535335533333###5##5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3!#55#5####5553535#5#5553333535533##33@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3#55######555555555333335555555333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'!#555####5#5555533333555533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A!#########555555555333355555553333555555533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@G#55#########5555555553333555555533335555555333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#-!#####5555555##55333333333#'355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5?!#55555555533!#####5555555553333333#'355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)!#####5555555553333333#'355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1!####5#553333355##55335#####5535333333#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3C!####5#555###5555555553335535333333#'355555###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'1!#555#####55355#555535333333355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%/!#555#####555555535353333335#5##3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'1!#####555555555333333####33333#'355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!+3!#####5555555553333333#3#'355###335###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3#5555555553333333#####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)9#55######5553555355555333333355555###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1!######5555555553333333#####3333####33333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@M!#5#5#5###555#####55353535#5#5#55333335553335353533###333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3!####5#553333355##55335#####5535333333#3#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/155555555533353535353##5555####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/155555555533353535353##5555####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1!#5#5#5###5555555553335353533###333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+!#55555#5####5555553535353333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/75###5555555553333535353##5555#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-!#5555#####5555555553333355533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!####5#555555535333333#'355555###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-!#5555555#####5555555553333333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)3#5555555553333333#####355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-!####5#555555535333333##5###333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3#5555555##55333333##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1!####5#553333355####5#55553333355533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!%)!#55##5#55535335533333###5##5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3!#55#5####5553535#5#5553333535533##33@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3#55######555555555333335555555333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'!#555####5#5555533333555533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A!#########555555555333355555553333555555533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@G#55#########5555555553333555555533335555555333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#-!#####5555555##55333333333#'355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5?!#55555555533!#####5555555553333333#'355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)!#####5555555553333333#'355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1!####5#553333355##55335#####5535333333#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3C!####5#555###5555555553335535333333#'355555###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'1!#555#####55355#555535333333355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@19A!######5555555553333333#####3333####33333#5533!#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!#55355####5555555##55333333##3333#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+3#5555555553333333######553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1!####5#555555535333333##5###33##333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7!####5#55333335##5##5#55535333333##5###33333#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%!#####553355555##55333333##33@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%-5!#####553355555##55333333##33#5533!#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%!###5#55333355555##5533333##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/9!#####5555####55553535353535333333#'355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7A!#####5555#####555555555333335553333333#'355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-!#5555####5555555##55333333##3333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1=!#5#5#5###5555555553335353533###333#553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1G!####5#553333355####5#55553333355533#####5#5533333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3#55###555555555333333555555533###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#3#555555555333335533#####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#3#555555555333335533#####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/;!#5###5#5555555533353355555533##5#55333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/;!#5###5#5555555533353355555533##5#55333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/;!#5###5#5555555533353355555533##553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/;!#5###5#5555555533353355555533##553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/7?!#5###5#5555555533353355555533##5533!#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/7?!#5###5#5555555533353355555533##5533!#5533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#/3#5555#5#5555333355533###5#55333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#/3#5555#5#5555333355533###5#55333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 7###553333@@@@@@@@@@@@%######553333333@@@@@@@@@@@@@@@@@@%#########553333333333@@@@@@@@@@@@@@@@@@@@@@@@@%#########553333333333@@@@@@@@@@@@@@@@@@@@@@@@'#######5533333333#######5533333333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #5553533#@@@@@@@@@@@@@@@@@ #5535533#@@@@@@@@@@@@@@@ 3#5535533#@@@@@@@@@@@@@@@@ #5#555333@@@@@@@@@@@@@@@@ #5553533#!#5553533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #5535533#!#5535533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@ !#5535533#!#5535533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@3#55555##5533553333##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%3#55##55335##5533553333##33##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7#5#5#5535353333##@@@@@@@@@@@@@@@@@@@@@@@@!#5533!#5533!#5533@@@@@@@@@@@@@@@@@@@@@@7;OSgk!##5#555353333#!#553535353535353533#######%5#%###5#555353333#'5###5#555353333#'5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#55353533##@@@@@@@@@@@@@@@@@@@#55353533##!#55353533##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7#5#5#555353533##33@@@@@@@@@@@@@@@@@@@@@@@@@@@7#553535#5#553333##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!#5533!#55337#55555533!#55555533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#######5533333333@@@@@@@@@@@@@@@@@@@@@@#3#553535353535353533#######@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#7##5#555555353333#'5555#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%#55###5555535333355#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%7###553335###5555533333###333#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!7##5#55555535333##333#'5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7#55535535###5533333##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!7##5#555555353333#'5#75#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!7##55335##5#555353333#5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%#5555###555555553335533@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#3##5#555555353333#'5555#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3#55555#553533@@@@@@@@@@@@@@@@@@@@@@#!####555353535###5533333##33@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#3###553335##55335###5533333#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!#55###5555535333355#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%3###553335###5555533333###333#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!3##5#55555535333##333#'5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3#55535535###5533333##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!3##5#555555353333#'5#75#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!3##55335##5#555353333#5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-3#5#5535555553333333#####3333####33##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@;######5535#5535#553553533333####333###333###3333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@9C!#5533!#555#553333#!#5555555553333333#####355###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@9####5#55#5535#553553533333####333###333###3333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!#5555###5533333333##########5533333333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5!##5###5535##55333335#####5533333333#3####333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)!###555#5535#5535333#3#353533##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1;?!#####5#5555#5#55535333333333######3333335####33'5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1!#5555###5555###55555353355533333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%-3#5#5535555553333333#####33##35###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C!#########553555555353353335333###555###555#3333333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7;Q!##5#555353333#!#553535353535353533#######%5#%###5#55535333##33@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%)!##5#5#5535555353333###3533#5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/=SY!5#5#5#5###55555555533333555533!####5533333'##5#5555353333#'55#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'E%5###55555553333535353##55###55335##55535333##33#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'A%5###55555553333535353##55##55555##55333333##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5!##5555355#5##3###5535#5555353533333#3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'-!#####5#555555353333333#####333335##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=ASW!##5#555535353533#!#553535353535353533#######%5#%##555#553533%5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@EI_c555333535353535353533##35353533####5#5555#######55#%5#%#5#5535##553333#%5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@EIae555333535353535353533##35353533####5#5555#######55#%5#%#5##555553333##33#%5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=A]a!##5#555535353533#!#553535353535353533#######%5#!#5553535###5533333###%5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+!###5#5555353335###5533333#'355##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-!######5555553535353333'3555#5##3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!#5555555####5555555#5533333333#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/!######55353535#5#5#553333333###33##333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%######553333333@@@@@@@@@@@@@@@@@@@#3#553535353535353533#######@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7#5533@@@@@@@@@)!#55#5##553333355355533333######@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!%#####5#555353333333#'5##5#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1##5#5553335555555555353333##55##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/%##5###55353333533###5###55353333533#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!7#5#55335##553335333##33###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)!#####55333333'#5#5#555353533##33@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@)!#####55333333%#553535#5#553333##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@E######5#5#55##55335535353333333#######3333333#######3333333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#########553333333333@@@@@@@@@@@@@@@@@@@@@@@@!#555555555533@@@@@@@@@@@@@@@@@@@@@@@@!#555555333333####@@@@@@@@@@@@@@@@@@@@@@@@!#5555####55333333@@@@@@@@@@@@@@@@@@@@@@@@#####555555333333@@@@@@@@@@@@@@@@@@@@@@@@#####553333555533@@@@@@@@@@@@@@@@@@@@@@@@'?!#########55555555553333333333'3555555######3333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%#####555555333333'355##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%#####555555333333@@@@@@@@@@@@@@@@@@@@@@@@'7!#5#5#5#5#5535353535333333####'35355#5###3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7#5#5#5535353333##@@@@@@@@@@@@@@@@@@@@@@@@@%###5#55553533333#'355##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!3#5#553535555353333##5##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-!#####5#55555535335535333##333##33#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@E!#####553355555#####3333######55555555533333333333##33@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C!######5555555#####3333######55555555533333333333333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-!#####5#55555535335535333##333##33#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@E!#####553355555#####3333######55555555533333333333##33@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C!######5555555#####3333######55555555533333333333333@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$\p ,8,  d  P , l ` @X(xX4,d< |\xdL(Ld L !D!!"d"#L#$$`$$%0%0%t%&0&''L'())l)*++L++,L,,-8---.,../0H11x223@34556867X7899::;;(>??@@A@ABHBCD8DElFFG<GHdHIJ(JK<KL@LMDMNxOOPTPQDQRLRSpTTxTUdUVW0WX\XYlYZ[,[\,\]d^^_,_`@`axbbc,cd4de|f(fgh,hiLijdkkllm$mn,no,op ppqXqrsst0tu4uv vlvw<wxxtxy4yzLz{d||}4}~~D44\,p l<H D8`4,l|\d,,lDP\ X ,<P`0l<tH\@04\dl< xH T4D0¬0ðDļXdD ȤɈ ʌ8̬$ͤ|ϜЄ$јpPӼ$ԐPռ4֬ נ@ذHٰ$8۬$ܤ|ޜ߄h@ ` |ptT8<p@$<`l<| Lxh\hhX``TX Xt$x L     4  tX@$plL4X8x<h,l TQ_< O&_OMU@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Vnn7    n   *     $ 6: <p   n > P ^ 2018 memesbruh03 (https://memesbruh03.neocities.org/)SuperstarRegularSuperstar 2018 memesbruh03 (https://memesbruh03.neocities.org/)SuperstarRegularcreator:SuperstcreaSuperstarVersion 001.000 Superstcrea 2018 memesbruh03 (https://memesbruh03.neocities.org/)SuperstarRegularmemesbruh03:SuperstarSuperstar06/20/2018Superstarmemesbruh03memesbruh03Gem-sticker based typeface.100% free memesbruh03 materialSuperstarSuperstar 2018 memesbruh03 (https://memesbruh03.neocities.org/)SuperstarRegularSuperstar~7~ O\_    " & 0 3 : < > D p y !!!! !"!&!.!^""""""""+"H"`"e"%%% %%%%%%%%&j0 7~Q^    & 0 2 9 < > D p t  !!!! !"!&!.![""""""""+"H"`"d"%%% %%%%%%%%&j0H0xk}{72ܱbexrrnnnnhhfffffffdddb````^^^^^^^^\\\\\ZALOV^12:;<=>?@EFGJMNOPSTUVWXYZ]^_`ae   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`aqdeiwok>ujPMrQRgvEHGNl{ycnLAOFm|b  ]92fgx eMTpPQRyUSN~7~ O\_    " & 0 3 : < > D p y !!!! !"!&!.!^""""""""+"H"`"e"%%% %%%%%%%%&j0 7~Q^    & 0 2 9 < > D p t  !!!! !"!&!.![""""""""+"H"`"d"%%% %%%%%%%%&j0H0xk}{72ܱbexrrnnnnhhfffffffdddb````^^^^^^^^\\\\\ZALOV^12:;<=>?@EFGJMNOPSTUVWXYZ]^_`aesingularity-1.00/singularity/data/themes/default/images/000077500000000000000000000000001367731414700234625ustar00rootroot00000000000000singularity-1.00/singularity/data/themes/default/images/arrow.png000066400000000000000000000003401367731414700253170ustar00rootroot00000000000000PNG  IHDRh6 pHYs  tIME:mtEXtCommentCreated with The GIMPd%nbKGDDIDAT(c$Ā] h @J>9즠I<1 4HHB>iZFIENDB`singularity-1.00/singularity/data/themes/default/images/earth.jpg000066400000000000000000010105471367731414700252770ustar00rootroot00000000000000JFIFHH.Photoshop 3.08BIMxHH(FG(HH(d'`8BIMHH8BIM 8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@8BIM8BIMland_ocean_ice_20488BIM8BIM8BIM!UAdobe PhotoshopAdobe Photoshop 6.08BIMAdobed        ""    !1A"Qa2qBRbr#3CS$cs4T%Dt !1A"2QBRbraqҁ#3CScs$4 ?RRRRRxMB}1_#@&gخFB`bw,G6ۿ9?W`>xك; F5|LT?L vhڮK`2Q+F/ᕆ `dlw *wxZ$ & Q[9F9VGLEkDn*SNy{^2ۋ{dd,{uc)U͛sƌoб^kSc㵴[À }q&D-yz[&$`e>i_J`s_l6W_+goNko 2-7:&k8M:;E>4:uo}Ly72dq.%Yߚ͢I6'H0E,9jq 8|Rcv -ﳯ2{Ng[m;gd>7wVڀRVu\MrɋX},b]ӭ *rV plPX@!n>uX,e{5P9Bp]+\Ʌs]rlK_Xj-tRυu-d߽ΧAWk6ENZ 7gg'5"܌;kauhdeQ7Nd^e6k"R=4S*ZVqĖ1(L=퍥!Aț;,.%gU-x f A9kƀlz 55t\tNTyokgCuW5m QqVG:{LWrv;>:^svZ2" Z^Om!E'R ?uvK.!J7KV6lo[{}4PA u q{#mquy@ M>5]@ {F`@ŴO8}NoAWm, / B:hzֳ4yߗ?1w4mn6H d,u*c+F{+[k%F};hڥ)?Qr9!/O“Y}z6rm:8lm:|p"Ko04Yu5a- ki%k]Z ',wR ?wgzpiJudkw%~(7<2 58엑ga/$}1Hj;+_b^ջV\Ut1 = ̓8#_F* My-Tq(WAk8Ei.|hܲouf7fʀ q1q 9css}%;ILnv#wRgEqm&Xdve3kG#+ongGq54.NmS9vD?ZhKMYl+{֓ZzV5m_?|[11M$ln^mbm 1/öF@ёPxm>[<>xǼ4i tqiP]:ս5@VV#$W+\?}e{au;=1_Ts5?'ɾO'[Dg|qƂ\Y3e8~_7\ N7 ZJP'ٮYFYS5=jIp>g6CK\Z}Nj.ɖ_I~[nC yuOf&O/+mT4sR=W1 kv<|zħ˿a[;6FSLF~xS.o|}Ihv \To {Vl¶\WĨ99S1p6xѳaZ1u쥎xMQ8Tp,PRHlw(,ozs?EGJ"ZiO4QO]&L72n-[X+%*TWKs?j$>Lup'ٺz<2iE/W/|Nm;o6CHuv\yiQ+ 矋n5Zbz?coOo͟p&[F$m7jsk]LM.pmmmܱ"5x$!ѧf+ypeַWj,r1I 6мI׶+-~罯ViuQ}t׍|Jɑ Ky.q ,z[ WfK%hw^Khгektj&X8O9g+h˽lWmvuMsGZYSs$Ŗ@x4(cyHeOJͣ׷V\Q\tub0Gױy\ϰwoP9 ң:% =Ρ@(C̭hk+Lv݂ω 2"-Qе0CQ\hL`X PB hpb@ʥ%>( s%nl^F$n"} ˁx@Y[+i4ŵWʍZfڇt 5Zt8ۖ\$6j\j >wR7rԓ<]ihoŁ!͂}{~gizK3]#S{HhJ1.bvᮏk649)H6:;K^C- ,5czwAj֑4UWLJ#8#53f?OS)lr iSɣHo[y v̳ Jvé埓Ťv衞1A&.9fZa5|saXᬎUqzkg=X;R;i<9w}|Fȷ&Asj.dpn6}7Gs:W2 1}n:v~r|ݯ --tҞG[r]Û]+ZOjV|fi&E pak]mzN:&~&^sy;x$,ڦ@Eͫn.-ǤKk3|pV0x$5茂?%׏y/0<-%ݯ8%hwQc-rkǦӳ[52kG&stc45wZZǕYzK|q|,:\ψ|>]fdr5n@-& Hn#i;;x ݯX?J~rdjm\̛ kuGѵ4`FlsWGѥN[ql|ad~įfxGbK !l=ʸJ'mO[ CE3cCIŵ&cҍ=26sHK]ydo'.xPCL _*+[rfIhֺF9iŠ_t2 AytbatzInzj#mn k\i45Ǘ.- n.zQG+^1ST%$ hc[7LӮjk9~\5[ΜRQpꦥf۟8縕-oL9{D]ŷv4]EBsZt߫t-oyOq6XnH7{Z>6Ѭ(RMbe/qc^U\  9iyљ)42:7ILUqhsYS#4y hIi0$Rf}iջF١h ?5ƒ[k'e02)M/cC\NwY_*n4q#\)ަ>\m7N<2Gu{mYZLXYcZCuJٴhp卼7 IzSH qI-J0Poێk{=kuF2{X󗱋o͆hx+^~'RgÅ<ϪG s?ufl~g Cw=cCYiN9ymw]+ӛr[o&襔5+u}yؒ2C5\EW/g?.oMyacRyks\j8߼4~/\DZ Z[I/{ʟYiX~z=Ǖ׻Bۘ[qi W=yo};H: `X5VW2\АրHƵ+-/P`#a ;4_yV3۝Yq(•:m1&QkwQofEQd{bfk$Hr(5s4ms5cq~3]=ϛk$5kyqG 7NL/Ek^5mF/LY2Wc7jf̧ -ɲ vKF`qѵpzȞQ?_"6ÿBso3v2Ak5ms ] g3N_=>K<%|-/q!rk0FK̮$_;,sC^g7cμٲWypDg~Z3Duϱx'\msZ^j-y9lklq;廨ۭb| eYk$u^K]n?U<Ѻ-K"9n15s5rI0ѽm1p:>c[=Wαlͯ/[_{=7g{#'IoFw]/-]q.XXL" 9* kΥ+/ډ򧓏#E (ts Mݼո[1l&nnW7k/ ;vY-ksb5aŌS%kzoקWNfe2/If0g zxo|w< {otpրt+u|&ys[alZOPEpK;<-tlͤPCߣ Ror۵27-s pN9r1ˡ Zyclv+=yXZup= 𶦍5jI!k].>"}+Xڬj$%0Gj2e yuA5z(r֘/xY;QZsYivAi+Ļ Nxd3M{-nf^uQMJہs7Uꊍ<'L7rRt &:FxC+=E7A-HSU̷n|SۃK^E]^0j?5np e W˩i3y!kZ\ᤖ1.9Xr]?/޶wFJEԒ ӑ1)xeջC6;c sN-txuk^okm?Cv$c#ݛq/ym<^a|QoﲕkY eko&3{moecdK#M<~cΜzYwwx繷K)O5Mtͥb~|{͞loL=skc*G{I^^x4ԼFvU&gfwXƙS a8kzN%̷q1mp5~z i@Z$!&;R6\0R/{C|WF VRBiXEV=U3"q V㢾)j4]ͻl&F=H"4-/-a@hOp/|XykOfG3VWQtP8g\o ksjtf@ؘ׃5-q;W,^/E~R6k}1x=z˟sۧuu3Oeyz6;Ȼϔ/[u1X e;bs.>;Wv =ׯq{CW4gjz.tk_mLFFZ?әnm6K0Ye n.!-5Ѭ9K2S2Ǚ6gNM2Vrͣ\j7S{wq24ܾdno𫶙%Õ'<7AӸ5-1lstzw;/Yl%"34,͡VG}Λ^,uw9ct.l^•vixug/;-bk$WT/%ic}7oöF4M1dP}ťY:ϼW-pEAk& !L\ۮpUr70bvKC.} 7ۆpD1wÏ'[q޾|y;ikܭ ´k*&ycWYõOQ;vږnK2{L906~}y iw oG+kI/>ޒΙfcVֺ;{ŠH굤O/g']'%omS>Hfz.#o.#<ݝ,dn{ eE'f| AUYDVD @AakEA9O*|毛.6MgPlsy?y\Lgl?ch5D;}x\:fn ',Wl9ڰoe"#RO!v{T(`mr0y#KB\qQ@&L'L,ۀ][6c< ,pm[Զ3:YAip%6LW9c| ݥ=L4CR=SK+٧ס^^vj-גFNWbW"yGYqtm#S /i9ziSyvm: F5bi2pϲ--Mi]\6YZ%h6F4˿ l;uc`Fy2u~uzf/>[|7 t9QV7>GD\3G5,J7jvݢpn? szlfo;Mt| ,,o+cG,nk449n}lm#^pܝ(/76su5tK?=k^5׷Q-Xhc2u$8ICnpyB,ËRm>č;. \ƇktWk~0՚yfvI x5L(*2i9zܬN!"U2O1O(d7ŬV.QxLU <*ar`ʡTa2'a2`#9& ,4a%L5h90eRÂk) &De c++ܓ[I[w9$k&F[llq ;s_o;N7vgtv}wwm+].q^{mol3I#n[vzFqi!d3A݋Yv-t.`$3M7SL{Cf5=Yfg+u=w7K=ss)itoc of77K*L g=\vQ= 0w` P@Mr\ZJKUN.k^ux.GAkm5ykOMcjneIFwnSFlspz{@437+k]3>]{}zlѐl74q4 nl4nql] <_yKn  .)wVoOI|d}PHeNftij:`F&A%ěC#9jpm}ԏ1$oS-alm+= u ^ i_(vHXC~var΢5n_,qSjFmyɤ&ukA,=]nydmm#fsDZ_n.:iOU޲|Nw': -`^z9|:,]&.nyݎqrmn/k- IdbϽͮ]_9oPrh$|]z. +q Ng3]izu[_<~۟C2F% 4>X6=]?Kղk^=Zy2C5uF5tqu,}_t~r~w1ypߤ22RA-n83Xn <+4c.3E1\(LF}LaB+(AHg`W Uk &:3Èϒ@ӈ !蕾kuhw5fkGɎ1&9hyP75+s/kmh7WR]W75I}V'e*|ζ{c5~[zmnFn%8ZYrOЂ{K!x1>48}mnLCXOm%W*C=J+N̷_7 \_O%ɭKkuto3vJ+WM=)մgk\.~dy8$6̏ `᤿Ϳg|9d?=lz|xgkD!-$;H?w“{S|b$6+ˋ\yXӞ#^TFkFd͇oAuo\yA׵Ky#;Xhko6F3\=>AHÈ aRԱx$}M-2^ b%@ r1጑8O ȀR9PH4o.l. nsqUz L4"o-|74ϭh-c=,ۺˆ?4*ћV46;sp$H9?ԥg|kpAo!Rd6潜*{;bs.MZ:!xK裿 Vwo~n/&6邎:t<[tפDX&l IP8y4?Lm˥~|aK4p'YqI\7ţPyP5NZmFܙ5oӤ tѭl˰ntූ\:Sp'*f3݇#ho";T0XzQ\:A^f;1'}\{oFlAe$ 9\GkWic`\&PXIS ̦IT- cG0"f70eV4WrV, S\ekY$%CȧԗY{ݾVPRGئJ:3bRO ~,t,oXdG՞/ j7__;n-M؂*1rl@@@@@@@@@@@@@@@@@@@@@ in[2е;>MA[w:|d׭D{V+nqn\OexoIݭ/o?ome/;/ h_ 9"HHfb6_̻I{o^ϖ[t)X ֿWϫZ\ZY;87]k h [$GaYF˶PsZr8r{ݯrTwf޼bW듨io~sM5ĒtYO:;nFSI\9tHNi`W9XMZ*A5*49 x)UV<jk3UL.$Z8(q΃ \.uCMo\A-nkCڵR@RWA^sO u0%r m?yy:ιtvw=omi/f |_Ok ]oNd5p5ǷԹ/lGi|/\|f,-1U)M+ϷnN>`nWl{ۻ Yguk%qx7aݏk-"R~ w*n3Z[ %Ϲ`ݾ*xngñFFoG.FA&X4Ls=׳,rklX|<]ӀG=.if/7ϕg{]l=6WE#鷟W_DzZ!V.q2U$P/.>ϓeۋ(zRM^m ȱN?k|ȷAm\DqZZ~-+{[}o |%*O~~0W#϶08>G<82֓>4;Oj+>ƺ8|;ݶC;lz ǞӼ\GGn/.C+#-Mؘ{k5&Ǧ Vrm*?RT{ča9EO+&EyΖ89Vƞf~Dhiq*(n9^2k}|mu0iwhjj^iY `$Ju.isG{6;$nQ}ono\V׸_KdԱ=NA-ǖ=ʍ4֞NZ8r]˯\{8evw[{.Î{_N.S8pݺ؛!1 h PNqW>˧m[]ceZ]4'{Zp@w>%L6vhcw27L-jvyc>_뇘[6jƎ|rTKK xWv|j$剕#[wY)盿7 K}H\ha< ͮ9xn^م U@Q2((!KZ,h#%(P炍2W,fִ*ģX2Nggn[(;Sx~]~\98rG:vlvp4^8ù}x}fRi{Ԍ]k=d ]¢yͰvw61qX?7[LNw߾p0c{COBٿ7Ѯg [?ifyTSDMh y-\^ϟ,۷.kdL#kˆ# +oֽDֆk%\ڟKg|`c~f9nC铨9ZakkͻpY5bWOG#_kW9L=4B,TXP Ue`rU Y\ɃNdR10RkYMf}wGkja׉Yn$p PxދTU1R}QY=ާ÷]_m,nlƺbLc4[;_/nm mX\EހmW3W^=6?͒>濘ok]}^IoܗA^8 pA\Ua,b-M"Hu1^._[IwצsM1p6KWo844Z嵱^\gw#pQrӸ$$6(ZGoq.M̮QY$2>jq9ʀSd-ݝn{8`Piͧęf떓6#jQQVkd`(2?+aC]IW!P r/&WIeS浉鷫C/pAlqy<&Cgƻ{1y#==pfڜfh{Dz8[zmuVK[#[r#{Hk%ӕW+;W_?as&:r _4M{$=>|wͣ{CUy>a}iz:M|tb,왧Uw͏+Drq uMv/عwOrP O>nhauU L c쩁fnn+4;ȔC3gPl'=Eς4xo-+ǘF,h{+odOcyq'`\s%}7[˪M19,Y۝\XiPNU\Qhw ibV>FZG @@@4@@@Ah|FdLm.F9-X,m[̻qyv|{Ao`7F ]rIz98ufgvg,|\j\y;H>2~7:>}ߪ6W3PH0b^/.>|fx#*t 7Z{3{d` \A<ufsH}Gi_cyy}IEE0te6mn+mlϷm焑߅7vcŪ[JUt\*Q2TPZ^dTic;ue`s@*q; |FTU+LK]|s iw/W/:^޾^>f$@zne-QoM-oO|\oďyGfF-% Ҁ jը1t')bpp5Y JȢ!54yMo~L]+šx.u/m8M!$8GGMӡ>?&+˩wEŧ ?.(pk}wNvxU|/[H[@q6W>#^od7lۼ\G_ erEM&צkcydVP;@CR*#=oً瞼Sbz4,y q֚gJu8$QK]5Ze!2fPsY\" "-EP.S+K+Z\J&S2\"EEQSTB@ fVU RG+W ӎjݰ$2ZfY!k+aT[-QJԪ̌`FGU|kRoj(S' j>H*e,UmaVp 63#rӝԌFVVB3zG2k9S.-qu!5 ij|3Iv `3%V뺎 u]\=_ioWyDb fy zKp>'sϛakkt2 Eϩ5]_{S|:c%|(y_n鑘+*CAD%H(. @bUJXو4*amᄌm"=g.ܓ[:.D6Pֶ&Օ#Ŀ'} d 5v~\y4m6PD&qh$q%}OC9yv?.ٲBps_[}$_y[[-x8k/?Ɨˇ~F^R7@H_"wjrz%ξLM.2yJ+瘢`4>ļ{͸9SZ7ɷt 2!8}_ǥ77uߊ߱\y}lF~}txm5}ݙ.Ա̽ a}*5҇o?ߋNygf'6jqaW˯KsH Ns$l4ێ[Ս?h&#b`v jo+ nԃvKhelCdkMKIKwDm@AWHZ1xڃ>uպN6i Nt_UϿ-_:տ}euyw(oP^kͶz.ϟjxNؚ?cmC c#W SۼN7{[c6=-3lCvby6F##V5gkw `̇0C<7k$ݷܹFx\M:'76e۾Lr%,4S$yi#K5z;/]S}~&v"]~j8@|즦4QaO̽m~}2o0I_T80 5ƚMf#˶sdPqf˦V5E^FiJIVkHVDcQ0e6[2?jO$0)P0L.R(2 bJb/YM2ݷ.e4^-oFlK8vt- {΃_;moa sq,ek1\eYl'ҹܮnk>sXyymXD]=v?S_._+O^u%ͫt;I /s{]ɧ^55]='PKּ681ρKa}͛uOm :h8~k[ƻ}qXߤ4[K#U~^ 2#{"=B^@"nf{nFsXl<\yorOlA2o[rڽ}1rmc,=>nz:w3:-h\RE$QJ7lz}yl~sqK}i.߻ M?-ݦk0/xoc%WiJw7]~?y{bi.#lWG!S?[XqU'j[;<;+R@{a$ ( uy=_ i51yeڼչ^dŢjdt'C\W?YͿ$7Ǭۺ wUnQ'/.z[[i!A-{kŮW}r^&^lsi 5fZ76 x>/yۍȻݷQHMb!ءyן7yt[EoIWDSFzKo$mN}'kzwgqQiuOx]>M6YѾ[hDN,u+^O&wlNE{tO}n^9w/#~h^_Fη-O0/1nznA:gZ5 xjHŬ;~6еkc[W}u PE#[8EuI1ݿ,Dݰܶ0(qs[CJz[)ݕɹZ\58Fƽdn}Nmcm%n|l~lkw=0鍽8!m5~WOLo~_*iʹqXmWHag{i%QZܢwW9k=^Eosqӣ4;̷W[8 |v8jdqR ף̽|\K9r,Zy"c{/.iU|q'r A*f1ef`@ 3Z` ^) jp4U d/+zHaK1E9~s/77vMв~`dύL]8/6knޣl[xb`d~c>GUKz~%~g.rB;,O43zY~eL#9^'^W+ݽ |\N@ֻޕNoի2W7+MMo[uAylRFXcȵ=޷o˗7y -l6Gai{[얳㗓'̹o|olC\X9n^֥_G6vuӓͦ>.Hd`Φs?ڑ|ǾlfX7~ո69tH,os',_m~'yA$Y:(K^>D5"K{8-Fj}U UɅ'bͭH%٨Zu(0JL]<|#^&}>6o " QTsjEK\!EAA($ bB4d it̀Q@Ҙ2-f[#h=㫝6s-'MFU澯XoCo|6Hq?/6QY'¿%H3r L niWlg_sgq?Y zSOx52ׄRIK eFTʮ0^dqksyF3DLn%Ů5jOVߗdN.FI}]k̳oSŸ2rZ |n]el-M[h*m4^˾˳irB].%թ6ά5!ָ:V/h\jOj+)#{x.]W'llW+:_u 鴮̏vd᎖N@a bqL56Ba3'qĔU$`(ָJ5'gVbjЫ9l;Ũe%hS\3+<,Ϲ2LV״QKWw~_Yoiʀ&UNN?BaZH.W2:50cN.8vRɮf.4*Syqy :4cţ쪖gGNC$_*Y;8(u,F5#aZ& K(@0hwH:q 'sH |p3Y-^4Z^_[%4 C[ZN8z'½Zx~xۍ $eG=1百OY73[f;ȗO\}{RkVss[w[1{ZE50;Ѯ?c㯼ǿ7\]>L2|}ai9kc2d=ﮓ˻us[#O=nuw|et\-sߒs(M;O^K$ r5ڳafU(U09?\w J}*z gW~ǴzOv/ Jv5}:Nz}onG_[\qNf{k[?ʻL1]T[K0y?"EÝ7=+k@]5Ok/+Oa݃6mxc}dZ}pO4i] 1L%p.k.rͻ&I&8AQWTe2|J>[}Zהs51qmoKܱ|^,:&umKI h-Ie2>i<5~wxZF>%gu9i#s[5n雖.(&] զ.ss-{Sˣ_MA- <%b  ˦P{d5)AVk =)شgOxtD;p/?/>s;\74Yyf v9Kvuj÷SQxv䷻:;6;Sha)3Zg*tk?bW!p{+,,s_ZۋHeG944B-b(݄L6{+q2]t<o[ep]Y]M yǗ-U~46`ZGg;t|R8 74ji?RK;xZ!&9\vU˼ݩ4a{Eu8vijs6{\ =Sk:k^]ZVjOouD{A{iVy>'?Oq:GTOnhYQ~_Ygo-^fg Mg,M>ҳGZz7 ӔOkWn=K31\D G+i9-l;8++>Eq0M}g/'6GMe<bk]1ĆP=Q_-NܟΜ7=wm~?g{ycioSNw#j54Ḷ~e;2b+n#hvF3~.n=m???O2s'է0u3%Zu5_쯫yOǫO3mQ2kptfɜ^KtGIog/BW +˪ ]^_1nFy㮬cqo%_t~V^ZJJR88xη󤯫v nP[ 4xicV5O\->mH!6"NN|Oa{K0^_g3sq:I$o&.%}m6-%‚2[s͙8)bs-!q/7$B;x}-^.~36J] {pA`9}no> dNМa&f1*9*QB e0=(efqڳZ{.yE eJ+L.79|OA2/}F?勖E> ͥe. #z/n[1|?gW&ܺO^~λG-ܤJ.v|I:m~~sp..-Z|Uk}J?g*>BssPQcN?jnJڷ'nc!ݬ{0k^HJG<I5ZZ6m`mkpOQ}RϷ=Noghp&NSIo.}+~fˢ|ǥmfׇvk poCW-g;QZDiH]W :@UGz#**VИL@LGj )!E¥EAQQ($ v**( {0W Wl|_h(N4Ɱصm ^NVԐoKͦAJ/n21+`.y s(纍찎HgWoY}ў-t8 4sIkoɿnۚaD cF[4sV{5sl6飍44V>³9W;mOJ޼wneŠ ҬΝ{sx>yM)@^J,skGPIǀ?{YMRhҾկ{8~ً\rU NO6w.W.=mb_aL {&S 9o,x8ajk ])G 4d.Υaw}vm+~ƾ`y\8P9zY7o/S[iuhd,#2|9̃Eeftӵk ][aLş>kI֧XW+7덻7%&oeLy&;xgum/wߴ`WĊ|__Ƕ,뮻LI|[+;kj.Fה$(.ѧe?9RWR ߶,͵=RfT$G^~-f5>g]zx8+W=Oۇk77xуO0xpVk$׷Rty18I(9`ҳKzumynXl}EN}^~9~\7Js&yr/f6wHgnVЏұ|V]aFS$̔+\V)x+^]%b[ͻ- %&A@ϣyAqP`J,o#΢ W+5xȏN(]0ז;Ci eq}Rݕࣤ0χҦbcM}\$67V(ϋb*B๎ @1LM`!qO0i:z+Elw@<ÚakyjWg*UosDYӰz.Z4‚,B|OԘFƤ:6`C[ہY& +৉v4`&-xXF*rܤ}!0f$n `Oژ\u ),R5;U򇝏ٻAi ԑWC%4q.w+{GQ 95lr53O+91Y'O @塯ޏ8.!Ƣx{e~~NJ?M}6k`l[-Oiq-xY355eZo6^'{IXH)f3pۏiK>k+ ]ȩVuZ n sa'Y׭[lE. Cp yuiܽt^mw3:$O_w.mko} f-8/ouX.F4q arLNa^ y]P(H)y26]G}aV05` *\qL+p"q:H&WV8ׅ.P'R1V%(s4U~%~rk* e2jG2enZjԡy5*+!?OL'ft@C'TtY9T~,skXK^w\4-%C^B˞3t7w?,jh8 VUAcm8~g1؇GJx`[jG.[306`gqK#vHV08kץ_cVkVT<]O n=hV$cSkC_OoK2ys5[uI8#U__NܟkcՌ}'LV>/o&6i:60c#G *ymYGS^P MLyխwr q"ǯo=]KxNkxKؾw.qo붲o3&t[n5vm4IPZzN<{yw:1ɳ]?z׬1}Wz IA%잣9k_\~^^t!cM.޳9_/ѹþ:EaڮbCKj)ۊrz+oQ16ٽ SO0݋}O3ov~`}卣.]5k.^Wwqo_ZgZyRw2spֹMq.^O[Ԝvzݿklk9.5$Krmsu[͓99uv}m^ap3\e>K^Uӟb}ݿk3!ft \8r[vHd'i5m%jWq!֬9n_{y % -<ſ쵬Z5x]͓ΐ}v,;cg~;vF1aeRCWǍtɥ5xy~'g=~16VA'٭ܺ}}]=gm0عl$/k Eshh/^5Myk:)XhdWNY̹qۋ`MlY!е,X5ơUaF]JaVtUo.ITeǽkYd}C#;Yq[v6,j@x 궷}Mxom_et&} Z I55\w}q+&+o<>bڙkCZ1}'@NM^׋Wriz:WcòdQU0^Zmw) *ƌ}^mnk'6)[ #@+Wi;. `-޼?BT빦A{ک9 2鸊 rt7&Ζ)$:|$cIX#_i+W7a:b!ĐLct5hij++-nGSqo"V2NW^>}uK%r&N$qWiO/rQϟeO}./N[ic\[i4v`Bfc˶ӱWYoˊ3o ]N;Mt_[;48r5Y^w{N>'-C޿A] 2H Ϳ 뿇we_;ۍJoN=&4_ɫ8mح꼷Da\#gP~%r?~'I;(,s߃?bp}Fpwkq^3%y>˵|^ jFF&3.1'[rӂ тwuQk2zx/v޿{&c^9:"m5bv:wj++ѓ]R2D# r*n`s9i]tKmY{oQOeWlO-. `2mzWCu*dYY@&?//s93䥹l-W~]l׳zGt6L!deJQ~#3k3gK,.8r ۏi}XaI[nmIzkgg8򲵇ԾkK*Ze9fXt ,S A9J%*olѤ`^Aϰd^9Z򭟄W6,0-\vY2PvnѬ&[᫈R՛6\Bq9E%N~_%uiC#f 2ҔQ儿Q:I0Z@$sʹ\48(/* DYF72h 9wFP摚˽TA ĒXUF5Nf ji3k.gnҌ:O3.Q uj~rۓOqrHqjrU33&W橡(ikW ,mFuoYjF^[i 8271Nw +2Ә7ę<%@L"a,ôQ2[>-agbj'G1A2hr` x@ǵjldЦU05g+Cw&Nt |XU̒eU >8 $ŜWSm-˙xsGVK;mݽĆkOv:&̰;8E,VUHW:6[kK4;WL,Q%ƪ=4ir%4hym&}'HK ;5ulj湺Y~3cyȖ?ަUcՌծPQЫA-{糭 &k^/wN ƞW^+|jf2q-w^ˈ{»k)"duT"(1Č ˄: ^r>'W^;lHjxzƖ]L%aOIX؉kLV, jC4 ̙iS0N< 8ԤvNs"Bq];[7Ixml1q{޺f"c:؊ XpAGԺ ,2H1hrbC+ CA qUbfFd jqkviunN{M]k/qշ,/BHCڜi~Uxn'\{`P d)Zs}կ鶽g_q3ӎ#qz ܸ͖{xH2f2=}^owBi4Ye7MlO٤@ 4=mK}a!:]QNvrfrXJwc'AQ}/7]rZ_MuC-tdmܰخq|]߇Vgū67Q~o~SN6ۺa,p˒鸵LY{6l$aXߏǾ?|<[.3&1JY׏t=ϖ?=gUӓI<+w3v_2mL\ȥk .dA®/oL~foY>V6l?.Iٜ)-cA'x=][דizt)u淟~_ ě!to,k[Ć ;oW;Z귽'|xXLgd44s]m3ywNȊVRυWmop9i>8{&kt4o}50  kؼY_qtF_10 &NI qspMhvHj+ᨧmZuDz3_T7iKjgmM;_J$IWi+ܽ ,,`}ԡőAqϕ[g̭wik45>\6jOǪ kxZ<0RlMyfhoM8OZ[]^fysMYÕ>)"~'}x潜x;WA+ۃ:K ӱ\6#v< Lƃ<1&JeL6,l6#K^&Y7MhnPIo0=ɮJ̅ 0 fmuisNӻjLcy\zoS]B{gEA5m6ak+A UP L[HU2 - ࢨETi%AY0!k,a"*\kp2p-mu8Ngu|Q<:j/`.m6Gard`i.m]~2osn5"m!sNK_ ғ2-d5$0O^K^~[&P+ cA}\3Y}(MBԈKMUU ֘q)XN+@s্\[ƚVkkVk=_ r^UI3Mx=/Ͽٕ!-<*{ݯt)$lŹp ˷9#.-e )N ZdzP cJY. 0jbȫyI4YLF#1;a zj9TJI.8g#~HSe!$шڬFXn^|eK&5ƵAP-8ؙ_$8=$9oiYr\ 0?XS-eRq>jW, } LG ≔rW q!+cPj*`X*BHVuZgi S;T{Ua1]9+kHuUmqmNsAs# gL͊'s$K hWYһEqHغ:XP%,M-))x. ]\~y,LPuJl\^3GvnmAԸwn]Iht]JH> n260?;H=j6^ֽ" -qBSk쵋+\*EUۏmflIq\ֵ5 5f )ZY^h\r\+]m[*U;3I -Kr hg^}"HU Y2:鑘k,KS ݑR9;ki)^h qi+M muHƕGH\„ YNV)i^X_S٥œ kRrئ_Osi(/ۨ67O%\QbS%@H@_W ZahLk[X\?r԰c.v)wg]$0pjւNOҽ]-xŞK&\|ď}$ǯ)/ytoݓ Kb4$]ql?_wumM[ږq48Ux_%xo[:/V;hFkC@iLzTMF20.GÀ$+dn$093*eĐ?R\ #BA&YJ]8\.-@6BA.n5スӆwɆ9$ 1L+!qVk8lr%`q"΋*_+DVDƶFNsvۀok$o3W^]qklZ5N#sp$O7r6G_kv2hд_W_Ow??k>ckk[mlcP]2E,/v=sASw{.+yº%6z瓷9]+{i|͗lG5oN}6icnZ't45<1s\aYg}̎kqxcܩKjnk:!w^9:iǐJ048q_7_nv?'9&hks zOf3kcd=IwH鈐`Nfg_FKes'cz U~<-n_$դ~ޚMuKJGFIsHƭxuxPL^ֺFWޫ[1}ןm,_g^ό  E»}y&u.s|w}6oK!26G,e}_2zMfuww( ۥz]toki r%ѿ֋r-\90b\ٴӈLuZx)z{ |߻`(# |\k~ľ_7nNg H]Pִ5KiOymoW|</21-}|7v[՗֔@@@An1:p)]-.8WKyY2ߘ]<6\K\:mw7W];Go1onc.5ѢRPWio#}Kկ7gw]K"xlLjz]s3wp[G$6gQEkFjLkٜrʅT\'RQ@Pd` QصׂQxȝi}7qm?K zs̽w/.n[6<荚c5- NYü_{׮]ɒ\8dv/7:x[jiŇng6Nnfɤ\^[i^{w4a]pc f]% 8:3$mO3lWQKwȖ8OcK;0HB$i`wN6Ѳ;}-;ms.`}?&띻5Xzrs `TU YiGPQR @4$;26.թ$4 \UldRGOiۤ/^bV/j˄Zm,W/s/u%NCp^e^]-&r*k<QvˎN*Z.9uYkMGj@Fc/ӼxL-ߋkHIj<_Y ֵ4jsN {Sۑ_{VYX(hUYnE:-p at@eJQuFW[\p!s4Zcm{vu9˟99x.wFZ5öy[vc'rw^^M[Wt!FXW'68/ƜZ{ofK7k{})-VV5_jtf8&Q^ZtUrFM˽+YeʄWC+:9&WM)IQA45%Lu&Dt`Ø_;|G}լ7##`F@ aqg#*Cca?j,'UN2b\\odӳ1 T'RT5I㘖dV>k8L&T[\KtGy?ܭg;$u~bkZ] ]eiV֊c;QAN@jF ݁a8r]PP]% f,8eTNxqLB.YZYXw**4-`(enWLr0XHʦNa%qx+)\2Y9(<%12ce<$,ە (FBrQd VlڮC#.˥-Zt J3l. \*۷#Q1jWX{sK}+6eXZ0IXED\[Mҙi͕UDיLdh1#vlZ>2Ciެfd5nXS\yeh@%ji•mbsu*Gb7VG, TkuKA/kjcsS"+qh@4էb65e0>XVDS{ S$C+Y,7&iv`_pWYV)b\X㈭A(etⴲA)e@Z( sh \Nڙf. *5pLXZ\KLdUˆIeb~%240h.V5!/hyEy)Ŝ왵 z*/oi| #H̺mel7\6v͆:%nbciԣ}̻ZicH!|{j2}3X 4b^m1m72Jak[hR巭yf86w6HhҽsYu=vpx85葩Qk66X 2%r羓m}{Ml&J}Zs6i-\eS' wf.UhCS}6o-|ng{g7䊌x82ё̥Kq+k5VP4,.֎#ƴ sb)FW3tO.bG況-L%.HAZVGgŻ|ocuqpKoS\Ak+li& iorxÔy`].ɛ;uƇ:TSDɖfno:$2́C(=-i`':+Ct|{R6ܭHnYW;+  .  &TUmdfN5Iۇ(ꁍ(V퉖+ zCH zO=$sIFpƟ}K瞡wۋ-v_ׇLmvt6]~ISX}oyx}Vbk|[mm,ݮn=62*U涗]~:̼&[+M-?S)O}A='fm͐_Fgl%B1cֆ/ߟ|ɷwIwNAxyq欑?W5g|>{|vn9&e|tٟoZJr3k}ir ܷ(Y aA*b^N]x./&sG2j^~?Gŵ/ɻɴs߰ٝjFc^tyv hBo؛ !4]7WOz',n܇H1 я NjWVYY#e N5RL+|uA+ K^0oߺsKr;7[o"s% s^eˆWcy)l cyZCzM{n#Ͷso)kEZj0:Wyki#5yHa"0d" Nj)RCpWV qW 哨2H:½]rwm D/&Z/x:k'YwݾVy&xps 1M9tENWszŮsֺ~]A19 >re/F]= z>lחwg9u# /a{lJ~_3ljtו͕&\yvdE h|ni&,[mua(*(ֈ,וef*5T4tN5۷GTھ/smsO;k5OeZ?oXmj-a|61wך[մHoE/s~@ŷ9{Ζ׉'Q?Z㹓O+{]J`0k'L$HS'^r'U2x8XfS %2CڦVE+\i%0eZV@_L&c\n.- W$WԶ݂J{r_~K~_e  lm{3>7ǥi;oE,PT{3E*\8QoM.&nwc^c/Mk?:^`%0_]xI+je 1Uwg |NM/ʺkפQ4WfXz-q ҵ˼I :H(hE\rea wݕ*^DӴ$9fN-k{R[@dF!uik|w3 ѹdj>M6/&ޚYZa,x{jr8f>кo89:rٍ߼ûu ºjnԒN`-9svcvgl>.ZWOPN9vٛY#&+>AZ ;&a& 'aeCEUbF(; 05{HTn7fGt)EM:qY2CT@J!: +5p9aMFUW .HĶ1y Ld:}>FG:HkhՁ95eYn [Ah^Z -09f2Η ~/TW꜈*`®U\5 42 Qec$Wvkn9b4_J] Ţ +B3"­%;1 jL*]A%jQ2 ?DWu!RF&^f..!%XKF2=SZ{Sˆ%c\:N:kN⬶'PAՀ-}zFāִϗͩZiЦXg _%%cX%(O&Vܾd=+Yoɐ_Ɉ59LoZ<~ATYja15wn\KLP҇UєrF-CZ A핺4 2&tdJᑚ$vcHܹa4rmh ME;95=c 'ՠVp>T}A - 9i8UWĀW7O\#z϶Yc`WJڠVrQ2745z)t#B8+UiYdsfy( 퐌A>3LS '5ւHۀ8"v1jǿhbnS&XE.Z W>˶>#R ϶wxc3d#5esIͧxwopvތr̮$'Zə;qre4eܥiʖPU-״PzVv,bfG$O*<0וf~.һK2+=?ٮcצZ&ÍHaU'F` ˱i_@Α 2JLzkf?eн%Z=b֜s.|ulG~w2W5\w^Miqcn5N'8lkKqY?&Xj\5ٻ>Uh.鞿ٰ%ޣCAK/Lk\8sZr׿N]y&ur[f#?kRsz-v&0#F?iy7|ǻ}9oϜvM1kiE>2OMs?/tO卮^T]]i,ͧ1_kJO^{skc>v#k Kx `|:}W/UV~ lW83G>+{s'i_|獣. ~ .ꠀ|;]lG"i{$Y}k굫^l ya(KbK]vqe{vQeD0Tv !ECEUEXJ*Df7 n)3W咹c2S.U L/}rXV[5)jFT:HU2zTU@'4Zx̋:7dgfg )UE*A8_)EJ&j:>X|\@ gj\QkYk!5Θñh>s{|V{j4m%qru}TҼ7lth8Hai:UsgZG|;ä@r/q}KpFp-3tv0j^決qK/E߃|/7/'h1q+\|zknַTTUuch2 ޫmZn'_2 EZa{kZ. o{OjL{`.*SoEӮC3CE9s(!Wǰ' R[:j\NbkZhZw/WL,wCHjpb/bˆQ08ҸYL.m4`3~m\,~IWlbZ`;TXZ&]} YE\} a}  .'4L4v(qbpT@.9FQ@pjE3u[]09vDQYC(X凨E0#%=)I{̬ҘqiBRFjpb:oHHҹ]fhI{"ഽܮ9Vf\ɠ?سw 't_KI 723VIZ'֠>m8fNI mg I,NތD8*†@L囶@J8V(Q\+3nh\&(;  QR@Ө:D0TXR.kq 梢%:EEU(O֢_emlKy!:e@WM6*1W 2c'V#% .L0E8Eh0\(\W&PU29K L% *npLN,ºm9JY4i=Ojӣ|6[3AV  Q|ejb+v,N'd7 8H?gޟ*^=,h1Nj9he-8ӅT*'% ƀ[|+RTꩍڀDU{e1j4'j:c4yܫHHr\U[ZX=P%s_գT=f8k6X V_oN-|6^YL9`9M3jc]6#ps_X˦[pYٍ"Jaea`H 2{h)vHױc;W~>>v\㻛}KV7MzM(Wf|Xni;1Yy6V9uٴfsliv#h@k)ݧGm˭Hh33,ۆ+x Rles2[VwЮY_bKg)ZYL.] +G¶fa[Oi+0T?[g?y8g|tZ jWvLo-_bэ #2]ĊؗT;3Kl4s2vX R;gB䵕FA3 #K-D?MCu9i/w727+{~G-ub:/x4j.N}6~}}|HOc4 #>L.@{ԣ5VB$$)V8-7JfT12OpNw,T摊w:60i{>Xy&yJZ㏭N&Z5Ern5s)vs˪ִ7.-X{x6m.56;Cҹd\_x^;{ 5=+w2vclLi-=+WkwH՚7jG)]Q&J~nj <*K9`y{*|Sh{8Mreat%ƙ7vme٨1Ո.~%hKC.ykh[H A1&؆43զBh`viy/^fO?Z zܐ EUE0TNL͉AT(YDk5{닽"GH#[ցrӋ^<%[4;KKw5I0Qwռe2ټQU*n˘s7ӝGwYDǣ+q99ap_kObǒ8 Uhqp^Q7i\+46 `+8%K@]$bCl䰐d[#CgJ/a.`k,/:JN}@UZiL{VXTP2ߧ˒c~mZ2cZGMGZy ~@S:/}Co.[ tnjcھfkGn1 DTmkw[F TW]$QZquq‹&^mIsًpX3^C_{|,~֕ý}._)H.nyؿ=8/5r;i+uߒͷηF-H.51ZO^NjuX0kg7ףs< 0 u;p+V&*A 9juk8eLcpEu|ӡHyShcgԻeF)Ck9gKQp>լƲwHLۙ$TO$hÂd`0JffځBbGa˹0cڵ"j,Y-ǴeW;di?jvTEq*嬬K]DPUGP8OX> ӂ=(q= 2vbX5U Ddr&RnuaL3ɃN8v'csS'jdJ:2d/gC$s*eWI\)FJ [9Hiވ$~aAhxTYm)͚ӤgsCaQzLsjuUrۈtdѧf;;6\wo֖iwۆ82y\ߙbh>2ldklLW13Qh-e!F:bȴmuN8?_֠UѸU|V ,c9;1D__ckiv%ݦ=ߋnKgmw?2v4`9iUoMxvWˤ_ɨ}%}-t{5yN `ֹl} ˦\mOEl8e7~K7/ΞIwNKٞ_{~rmz+ؘJk9~ƚ|1{tm?K#P_uc@j{2:`{ #\ =K.͗ж6\Mny~w?vK6cY{o5n|tn\ DekM%ds/oK8:{o>k7[[mLOp17rG5϶z]|yI5nmOms]֘jѯIJ;V½Ny/'xͶ!!h4lJGOixct\[5_ mǮ-=ō jo}]][EojONw ?36;zM+y+귟2v_'-Z!7xCd,˯|YqMey ,\C"tݸ1i 4KVC#SOYomK!4oďwE_l*js4Zݪ΍y, f]B \LkZ+_gs߿~APF9WK\ J,pU (r NJ W&$q0tGNkOx}g6ifuN:90.nJ'w\txCu N_ZϓJ%eGuY..&/I8^γȌ$8.6ȬFgVw.b21,V̬ {vg<@^8+{#|.E7~|Ii=}7u髮vI.ӍRyS?&B Z3]uK\~z{{o$Sioe\Ӵ+ vm\oa_C^O=qgZ,;Bw2|묳66.sƫۿy6/u cXE2w[uں X2 ak11eGQt{'O$C*\"M\)^/0`Ȑ" 8"#R P qepP5 JeSPц% C 1*Wpw2 ;Qjhi))xfԶ! E4hM)Z&Zʏ26Y^W9t-vh}]nW QHaRh 5 L)0af bax 8)`If韴CL'uS >WږfQREob8q#*+س8CFS)k朩V&No6n޶ =N{07GSStz^'I[#,.aiyz1C(7!Џ ‰t<$#lma \;GɄ>wi,畎nc"{PhTn.ŽVtyɞ}5vӆJaR*([[PAP{UFY -tK`r ˅;5Z2wed8MT%lJƱwWǨ8[m~a241t`EM=IM\WMo8Z\s#/\#Hef\j? Wy9L2"cPZY3bdpa OwrF7= Rܵ&`V)M;ӏ-ni6Zm8^/_ɮ|wc'ńAd>ga(nm1 8t E*UR)`vv16݂=fWmz4z6Xđ;SW8D+] k,F{Ue0 iejuRT$q5ۈyʹpg_GGn>{yy&!kSW%omM}~vv/kigKj(q˜Yˣ˲3q! ~zɏxw9pTg dJ0Ymf\%3bTQ`Uex%: bn'Nķ&mhiISmWhZ@1^IKݲﮘa.ktEAA4U(%[U8A5EAj*Ɋ 3B` *23N#%0Hp)0Rc9HQ@NH/nyԙf6Hny6g:Gs yxy6ϗ䟙ֲV콎' a?R2#A:IpUdR&K+G-qraeg(iTlܱTZjGjӪj"ZP"LFZ QrqEūZ݃xF7GLZyr SLe62,V Q2C) B)TȆЮW*942i)EB'ӯL)ڳrh淔g}eb̤`u+Yʯ#"Qgރ P S(4էif* p ծK"&uM1atUiu(E Zs<df }mi RU3ֵOl$MT}\/ ǍTgčd,!5ө9#8dIWPpx:'ԺFpf'%J e* xX+C5cZxs.q5KnCqDSƋ\MK"8_^F6FcQo~JrsOe޼V]٢'KR1vΣ-ˊי϶:s@4\yxu߼zxc4:u^L0H&CA$t[j{Hm׽*ݷۮy~Ť|oCjهUvM4"=Ւ>ב><^4gɿ}.Ko%>~ ^SV"sYoQ@PurETQAfӂ P[ q3]WUi/7oԱGn˙lK;Vj˓ow_ïR+mI>#j^[w/,x`s uGZ寸*^(f% w<Ap.o.z7WSp K{q!YiNr1 jbqj @:Dz#\ d FֈF>"u sx2f =katDZZ"ٯ,2ݦH$ W{tCnu4 $9cCQĹt_WkCVTd;<3#}:[N}/#YeFJ4ׇjS9LQQt%[rEEt{z\8BFYLq!2*#49Zx_QۏY{{gso+l-yda*>Ysqì@v u;*_k~-Z3폌T/ͧ/]om׻FfF9K UQB1YU{+WU'H'vg4Ҕ#WeOwо74̛on*| ^ma =Jq@*1 23۠>plzoaVdua 4fNn>nuCMkLVRVWT{(sy/wݡM v&r_mö="wgЬ`$*$ jQ.U0rk.ƁC(*Tj#ISPE@&@E]qV3RhrDP*SJ55pb*TUjJ Ʌ QWiӉU*VJ[ djD)4Nu]5p䙌ΉPGֳɧK4 !Ĝ)E\7{=q%a:Z(1~Giq_JYk6ƺE kVv.w}`i@/}7)6gMG5}%kr۠.'T N,MX tCS ͺJثJ'$~\=5 _ڴ x7UOoN?oUp׈Z ?B+\Yvyk8]S8/=,_cM[S1 fj}}|cij ن>7+X3 贾slyx;8smg75k~ms;HvdS.>[mc.{MLmz(v-`h_^mo:k KY\8}K~ 5+'hn^OSo>UۏqD?BNc@T189K#8RYgF9"$Se[0EOĬZ.(F)J~ԠƗ>r҃e7[E@`T19`֕$XWxce[-)qYL#ca8f]4w~"`orxYH}PR:^ t]^50WU w>7>,JD֥K^pF+}*jB i[8UEe 4PRFLr"&~W@YkQBOФ[ m [{OS"b FVd6YPltET\#+么*3Uq s{20 8U#tZp& Ƈ*EEm0ΫIg4wőўؙL_Bu6iiJFkYaf40 7l\hH* c<UYm4ss4?m4>z@+S,WJjy!Y QrXE_!pTfi؂z$ {`읒_NW`pP4 z `A$TFo&Yj6dut zV3s b"Hȯ>y'm q<%ɐ_׊cYaraIkDpS[6uuTb2Z^g3pT]JFy\>i<q\ty\ǘ~MY׋hɬW XjHp4ۏl5] 6 sG)?ѧUB_UP*r,z[ ¸dJTU- BY֒*ZkLG]!” 9BͭHLGcUdTecx,z5:a]:3d\c=Ʀ3qˋuOk'[MsXw:}e;|xI;ֹܶi_Tz]~oY+vY$ X% ki\y1\_O⟋^nkvUcYͪk*V YYp#%`7~_o>`źbqkjijs//}j=`F983H|57ѥ$s}FjrMߓN۟q՚-ķ0kWiK~eZ :C@y 0uzB Ihk^-e먩Ԧ0cj L8<2#/bꎅ6ѧwQɛ{Mx\_F R&\Y[52WY%"8_4vW1ڮNʳ "${5Uʣ:%G8JaػibinqHY(E=8)1F'ʗon\N_8\ߣXBNKi&2x.leOpjq.^^_[koa mF&{W^fWM$faV{ڷg]};ͫޣ\d)n{ˉ׻^>g9Fq__N)5yc_srBI ٮ^lNvAk k+mÊb;MĬdq֤bpZ&Mfkapi$aWI㵟KG@쪰謒+5\ EJh:Bk| זg[ҀKg6sZ"Dq22, 5AP=IWk#R(L_$hӨU+=@TvіW< Y9A xEō`#ic9Ch@k+du:4"Avdi&75} pL$4}+63*k,4"O,و@;$ Zc]Xre{OVt.oMǗ){4vVې8}_Bd k`n@Y=44qnHkxTW>ŹW$GJS[e˯~aԹކ[,~ߥE˝qvKq+R!Gx*]L3WYAF֠%j!؟H^U<q˸ ^DK*V2B(ew#ik!pƹW~O΍-IJH[I?u^IYAQĮSCʹk+uXAkYlj1M T,)?F2[*F?J\p&3h\iC3(*\@2Z|p')TILvⴹd!2M %\SkR֙L[{c}wzWodu߅  bvW_\& Xpsy:6= iRϠ0؈ښ ۸))CVV9-fjXGSौKۥ2tm좈NVZATo#>E.j[ .d5J41S&3Y|E4"k׳,,k:\ˊղ< z*<8|9vx72CjQҒ@N >_c9lL(ҿwĤԻI:.^a\Vf1hkp58rݹjJ,w]/3ɖfhzf20*]9.I+&Z x zHQSd~Z]$pJ!4fQ2LbS}#iOo'+J V֧-a0 +GO9~z}7?_Mi{M**^6CӌWMg_3js,uGL q Y%qsKE^VXv8K ap]8i jo<:o{i}g797XƇ`_+~]v.Y;7X$o]5 ITݸ^-$]V{/)r_7{|z8c2\]084, dy Ҵ6Q=17 F wLe%״qX9%k=AA\ kB}^"6Ӵpv(2LAxY)=iUv2Qo(r=gc]HU5- qUL4%"J@ |TĽ~;ѰGesP֓BAk;&1Aʾ~R;{gL}=ʬvYƽ65kFT\2Yaqm\@o Hގ0d +J#5|OAj5YKZIK+*XD5PTIp3t#xq=aepaNkR4 YA (>N*+B( 16 =Ks^֦FV^vnvd/W5;b3ZiUj\;FK<6A+rY9Iz1uq;l$0p^)qV˺*`~f//lm<v=mdb1q=>vý-:bkJWߙm|oGn~&G Cuu1uMw֔ =V`5A˵sfYC1f]й U>R92P]|4^_Y8.oаaLgwҝإ%~*VδwrW|KP@K3X?^TO%ӍÝ$5.q$I^4LkǞmrgsukӬU1W Hu#yC'|u i0ۚ |N q౴F h;UEKۥ[Uc]VFv%k ؒRYF^Yyhn)Rgڳ)J6ʍi?Kfε7v31$~yW96Kq{ kدVnA3֩L{V+1VZ=_o{m++pH{2$T(1N+vfi>S-MVZUPFHA(!EJ Q5Ԡo3psJ/ƣfQ?;>pmAػoŮOG2;lBP׊Qؾ?[v/\_bm!k+#M<,uW^;rƽUq\]gVl{V2x?C)n]&: "ioɣlw0H(D jfjVܓOu>7GC[incb4oR7ۺYxZ~Z ^>h$(A8YjS()+3T7j D}JṭgGEp5e}h -ֵ_2OYCZx6?:@njMj;^n8rVk`8 ~3\ fQf84 ۏks 57;IY~պkCN_On wl^-}k{'hXb(k*Tv)Qjzԟj!Ť^@KM 4(M}wm.O75Ʊ٭'f\szu[6:-&m^!VÊ7/6M&%fN^xyޜ6 nT)+nAtZzmqD-_)6[{\Y}K,:mWEOM.s`838F#*~Fm(iQTc:~匽5v$1ШA²GiOEZLp 9doWLc.2[|qSAbܘemXBZ>RKkQp-뚸k A)uKui@srïmbZvVİFc XASV[@8W *JLayi$bTrEjAh5mRo$9U$L+j_0MZp-3393㷊cՇXchPPujt0 wm᫸Q K㒔^ܼ4kijKv4 ;22@3̭HVjp\7'm#hhU7Ӹ4JdV1p๘cK"im[P?g (״wsU]Z/nQ&muPݘ.k̝l$)+귃ON*&S(~4i@ěߕdzϿ6:Iv}Ih9 GWտ4/ͷ%M1ٿolYRn`pb: 3Lc.if[1$`?JUeÁR+\rg,H)1Te2a-#*Uq8"e8wkMb ]3R6Y EI"*WQļFeJ͹csiZ¬t~TfG]ԎcSBV%"5kV7,ܺ\[˯?,NGM^Evjt3dݤd1P4ߺКԇ8p55˽\=58Q$ec, w6d-L5@pw6|W7ogGbL`QuxvS~r]o&ٙkn&.S^A9񽚷_,ͤ<(ax<^ma}aҽYfi΅2׫$Pr/\G;p«Yw,]oF:k NUXtKds|8s* ћAGRgNne7$F'R>+o_ϓo 6a",:221Jfڹ%_CFFt~jx{L٤nqcLpL^iNb3k+AŠV*UohS rϭ`no]q2dW]UQpj@AڢUDҨ*G@@A(%TB"PTAppU*5&L$.ups.}i{'/ceac 6j/ۧۯ:s}moFd:.{+w˨cket4wOYߕGXyo9y]7+5贈-Š9\]qU|M0qVp͙k3iyaȑŘoX^ \iSI^sjvr z|#U_y3r8 E)O5j#r"HmhN-{KӫGX2l]tWUlGMcn+hĄ\3Ig<mӹo)gV.C^Ա4xVZR=8ZV`R&;hÄ.2ꤖg0piܒ-ZHN@,] 8tmIsNh-1镴'>RFTs%$zK g/ ' p~׀\镘hqQ9Aإk- @ުmx'>76dd{C18ٯEg'^Osui=.IcZ-=8ߦ y. {vӋfKWk.{k=M+FFh%'~V)AtObehH#c k @HY\IQI,/3+R&B洊{3Is#@$saWqྷvgkg;jOѩs6W2ή.&_kݮ}çZh{1*sAجLcs<2JjW,7`ʘd'%R%fuV 1?:H OuT\jZ¥QpMUJg"Z3*lT$.H jFX *qjD,=szE$,<"7;vI]6yKtEJW_-]]Opk+˽%}-8M\ʖχ5|_Ϯo:1QLmƼ\}>~鼻._}FuYnFӟ5kߤzo._=q꺺EG/_sŖ;r5Ҵ#R4%PqF|E _,:MFC4V78#L ƆC9)-tmpAo&Y8%;5yOzq0(n^%oтarBN!'Q}I6[9EI+ZVĒ8ޝ+w@r0լ>Է5GAs7T55p8Ub*=q( ZrTYvA 9f%EGjF{{hF{\iZVGB 2VjEO8ALFыU| "}jձ,\ٺma%ɸLq2UUd TЀ >f;- 8G>hEA4s˅Sv4*IZ8LpҖֲ kQc^KV܎P0ikZщu,ǦբȬ[aQ5S1&eԴTMrr&= j#+pm^|=:K\k9Rֵ.8qkd֎9[+i˹/m209Ƃ$mXuθ4Hy[>K-Tppbޛb]ekl{5J3x:qٷo!K[2+7޺5lb4#=-'viM-Nk޳.ķobNjHT0˗:*?IrչS}b0t Z:5wA@m~ 8aqdån,jO #)AhHn u  thf5 4 bPq8zҒ^oe  j(M*Q22S,ЬM2G@Ԓ.^h\VS85ԍS?J^? |_3k$sىujڜj#6;[N1cp^ɴ<ͦ+`N{\ƍ:O.?+?cLSY)܉Yָتg ]J&G+ã 2䇁1+-) >LqƫVL)v pHMT0 4 QQ *jUPBH@Uq*)D  *QDeAK]+m̚2P } s}?ۥoWFCt KqMe[89ѻS ܫx'/}<{%a[[Q銑;(_]Otn//&iOvq/o+P/;Ct_ђH3m)ۂv2s yN9LkZҿԷ:ѽsvɌҴ<+_бkrk+V}*Zx`1i/;ˎ{:AҙL# m+V Hk`LF%(4e@_2r[תЛPz%XMjO&{F.VYC0kjBޓm|Ͻ^mqi14˹{?f~eWּޗM:yk7uRfBL=ujvA>?U]ih; b^ܳ'vsN-|;(§~ONY翿mƼ08$/zoY9'u~;Qi]Zmq)JM*rͼEca%Q\HƵU.UxӋMT:%bsXˤc,\0URIǽE\+]tL@hoz9QJ!]` eL"**CUeqQ(Qc8kʱ*,َYh $VozA.Ǜ+i`Du<7idBўϤ]ç鮸sOtֶGWOf 9>E=voӅMyW]'gVkMyΖf7Qܿ_bq̺y.iz [I>(=_'[5_|7]bGe 9Ʀf-kmMfR2;r4(g.;XS? XD_o҆m YkdReh44]LzkFP4\Rh=,,mtWk)hm#'qQk@'eXkx 4Ȏ*## 䇴inaͤ+r;H}8L,T}He'i'2fTP) ,"=MI{a7]7#0ZH2AqL ·$KyCi3YTB<ꭋP(Ȑڪkl#0(*UnFvZh5<paf1oޟtnFiV-@?g b]oԸSS]_ojJ׎X7o/˾Z:ΒALϩt q[l㳆> tǷ*93qI&ۯ]s$yq4厭[/GYt|p*X*x١m3Gb sF;tM aS+-;18cH?]co{)zErRFV]&\2g:\6.8q*+#c`]bUtZ.~˼ջ.05Zɮws?8ƠOf%^uVgI[G*ȴPOrRRlN iv)094,ݒ66-i+7l,1N#^}7[vwoՓŚjvߥjơzy9.Z#%NL=YMdގryW1ֽpd|b̽9i.5럵+pQŻZA:=릮[":S|bGe\^*VZd6lF4to SIwGUY^EbvH MAVuee*QJPSM& 0Wp$ *QE U k "QRDj9 8AbpEn[hm+My&6N7[B)*bqn|^iՖ~p\e>/Fiͧ]?x]__; Xcҷ}\pz2޶b]AL~eUW&{7Hp*61 +D Nk t>Ϥͭץ_ҘgqcϡZ҄i痮uMm.kK1f v(BM(M+Ny%d JrWh"Ёb90M• ,Mw0mnFƩ+zۅ !H5 -dIizTjVj \>3y٧3$ŃCPWv~^qP \k!3 ]^jpv#ҽ~3;8RMx|-lZo ^=~g}՛\tpi hq_ eLqX2`jR_әĨN|]aRed]&=FK`k4\Kak['şDdX;6m:ë I}Ohrדf; ^)r#<=Oa];)f%2Z 5|B1=g H-1 kEk[mC x& 4l^9$F;] # GO*23^¢NSJ`WYd  X h8j%oU`I%f晰H GxEܭ8%K4{hU^;⺽6+;Pj-fZX"絆RfxY~;'ORѹs|l.iAoǕvjok;}_g釥$(G7|oS}ltӏ[mǼݮ' I QYZfk94nW^hyb.8L=[cGuwٯtdf0^\3M2I263| ڥci^-FW67Ey1ՂZl{wxp`l9A"ᚫNgL6$w 1[kG+q"h뮒7 -Wj+ؓJ҈cL*( SwY֦):R@ZgwC%Cj=!rog(9}+ۖkI-WŔH&'F$`hR5$S޵,q) 7?JuVgVNF4VRiYhT2^LshedǗ} zh[Әo̜wi{}=!@hEzF07:ǁiؾ=?{/lW,!޳ڷGJ;[ںKvl[۱\G>g^&{yvyvaX[RU+\19.{,k [N!uQ3ZcdnDAئٙ=J*=[xZ{gNY\q9Vza떿Di'M0I* *U @QQD 3G3u&|瑀_"*4E *58fU|c |AYմpbsqYȢ(QTBrB , PD\ TA IUޢchxJz/ǟ<{?kUH~WN[˽=iAmM9ߕ9U$t׭}bo"]\ 6;:p\0i4n`1s ,Ñ$0rvt:ѡl\UˬZxyMh8*I[#Zڽ`\6.ӽ]\M$w88{afձeHqѓv%nC0Ʃj,mQ,iZP;94V\h2:TW˞2>,XK\N'$f!nTaykk\VG6)T+Z=F(Y8JK@Á4äq7̸}Q?~wkyuv }^F0L-+^kxVVэ$7IS s vx}F~K5(tb%:4%n#㕭4XT)0.n%tz^*E3S)"}9+q5\(YE3L7W lYLp=~\5/¼/5np {׷ΚM;{~/G}FTJxPVHEE8/_y o9rkqN\5jo.^??y&1ȑn|2Zy&;Ik Aiiۦv ._I\t&Vfr=75 M2=܅O+鮺|:l& !}H ՞oIt^}Y6v=hxl4p9É+_O]s_ɪZxsqjʗ\({VV1uR8}8)#WnHFշ)3Ս(`,WMXrXtTiE2׈Z"^pL*VCDJJOB4{%h+v;G#jtrޘn9"8I}eBkH}⣬T YkB0,E|Jw^ȮepYڔeJ\XVjR<8+ 9%?HZmи8\qk=6y^gm^aARSߑmmZ .|8ݮ$ $jqrʒ<6W:`;a19`x>ռ =pu-tK0h߼[ @@sNJiZo nfC'PS_ͥYs൴s,P E+_iU0+a=]LVVRYͩhQ԰[Q:}+::}nHh*1p炭Em0055RkQ :+a agVjf.p+LYn?h@Z;͔XQaCVl#.+Z랑і;g<8fx]y\gf tj ^542E+˯̓3GkHYbkx7묵ÓqVE)5i>w/ԵצnO&d`yדGn>n]wX؍1 `YE tE}U+(7-~n[m 1eVF[}K:x -e1я~#f ^t-p+67+]uL%ak]6y9_᯽m]Dqh ?^L/:>Zgy7AsaN =' cWe.K\hEI^-Ѹ9(0W{ ]WI` 9rLjɷ8H:Us1EW {znl-md essfk_eY\EXA4I ٝɴ۳~l=dvY4F.] pԵŃ{:[RASjtà #/BFyq*`Eish 075ǧG 3 ,x"(vV\HdE.Cj]6^&il٫[:銸2XYms/0]zF^o&qy羗KޛI{9 }\h\\V(8 1iaW6,KӠC$AskcP5UZϸ\LངaBh+qcJzKl쉐ݹr@-5'|ߕy+Fxpw"t܈jmn/HYR0vb]{!!*M|@i˟F ሢӆڰ[ºIU5qf ;G1"jd`V4ƿ&W-b` ׄaDfB\ _zUgŘAGCZujL旟Cg(v{ {uKW a_SLr JpD$Tm ŕhsg} -^ yz4.޺Ӽteθ sY9 esX\@SwV-$xs Vݶ0kSQ\6q$H%Đ \kL1Os2]{*m2f .jk[ifh-5GVkr7#kHC2=7Q{1X{ͧj W ]Ҭ+ν8դn/X%H^R.:Hg޳k5θ.<˕ aCũ;\H<Ō%&8a4ݝaʠ45&4bW-Z8ԃ\-XQg16"F 8q]8&3MfkwK"m3+_IӽoqjuƩ eV~Ɍ,mUfkxi^K9}~/<gV{ĐA%Mo[_QݙʺPh`}oOx-+*9ŪvkKVjy e$ֹ.n$@OM[ZpQuiא,s]]I>9 %!81<љݧk[עk]ۺ8 u۬ ~&.ۇ&H@1<+7׸ڱ%ԠإՄm.h3ŷ63|L2,Ԛ=!{4o=o%k;I-|oM#J+2N$roІ[w QkZf2ԭ-Tp\lhΫ^)O{*>jCҝ1nLwuYc nR?zݙg d8==Lo}_sۤt,cl[R&y<4g[ \))Uq-x?Ǘûzײp8FT|=ߍ筒L$)5ҿ_=I<ݯOG|*هG 8PcW?S 8O־nK3Ur"8is}z|~/}.6u D@|彊zU'eprd- 89zI Szi5{[>[OulĢ09e-ŏW_fo'isFZ y8j?]%0y6>bfKӏ kZ9|>q7?-tq(ݗ6h[tlؗ6G¦Fzo}3~3_y&+YovؤHsE^Ct~Po=tKu}/:ka@0*O\pzuf'l[‚ ֞yaml8#&s6jh1H{TGb"id}j5ceUiŞ+vlj:I>7\Io:^P4sK[57+u^]澇 O<|[D#sO;X^gv{浲5aJ.i=1.CUMZ+Unq}e/(I@<}$\.,˴ḿѸ˜]+1X&RECRщ+VwhԮ?jnkːE24 zZ$)bZ [f.]F4zOC=x.k^tV9ZMd=Cxo{~-v:+e w6$a6pJksk(j8WCI_wwm?+_߸\H_G.>٪cnX]F(K y4ϬokjA^qN_Ż[m!8~'گlkSAΙ.sLo<֖{{j71׎mckiJgAiqڻwt-\i\,nG=#עΎ7K2wծuvP;)YQ^XR FMk>2mϗN׍ 8i_ǣ8q6;+u$1iyO-5;~,y>OK]?o3x,4kKZW=}o_w>I|?ѷFZ {^[٩lQ[#Jy+kz$P=8hv6١4•=ˤ^cʻml{&[D5WV]7[6umv&^/p]&iMOyxoJOEDץaa&79uͦ&> '", k_n*fe|3eڬ-ݮ#o+EHvIَ|ܮedW.ZrO/Wc=I7躎:qU,o2wM/#F `s ѧV& .wj]uKƎc{|lZbʓ$qƜ9J\wK{Ԗ:Z̭\#$1ӚԎvY5q4"i f#5rS+7h Sk9r᫺^9A+O-H{~V8#{;;+*xvϗn$wW/lF Fp9VRCf0‚p70\$%}E;k;ZU&1r']BF}F+FWF: kq]9Tf7D9@eYZ;UEF"bw=W:{ۻ' j+B~ͺ./=>6N%"VH8k?L^շn]LquF]8fqGk>Ks!|rx~v;WQ$w3}f]~rIO-\(@?jx?W.{hL#}CY ߯=:}-8jm?uzvS/: tz1\c@F*Tw.JVqvj,YbH#2v$JJ(4 @WA * C8bʨEz H [ؿBeQRUDQ@ (PAQD j@VeE[҂*W%Q`A\&QJ Tڈ0t!@ sU@CEJBSƼW [qV5]o6&gi]dL,m4CV޽^q ]AZPƒ>o BX%AZt..&S^V10K`8څce 22wg\JuPGLAZdlLyYUMr]:8#:B'k*c>77Oޭo]r{Ui+."&2j:7.- m,8TG}W>8[mqit|܅}ds=F hL%d𼽭BbѰ5JN+^,5ԩա-~\jLZ85cUcv+COM|8)TCA; 0ǵ'N#/}~:5v9?7IT{y{<=6w{Zt~AlFJDl?\:Nw Ʌ__^^^=~V>9SVIvYS4/|)Fyq9𸆊Už]>zuNyٟ^|[@OEk<~Yma epyrk\TNCTbݧ6ha;r{]S~"I_f4Qj*DI3gRFS"EIi)ʥfTYceK$iIӂe>VUejiuh)$ #]5W:"*xhV%\aR(PH@E*Z+QVت$;\IdMK-a5"ă\0pHTZVXĢ$DW"dïgẜ|58w_-.1,ZhkFU~Rnok-Q4V`o.|:cWMy׵[-K(ls6&QЬγmŋg-ȴkiMg.1nOj՚ *ؼX|i4$깿#{ &-chטw嵃@ }Eäm'~;{zDrz~=zk/|{v`9?t8{; FE@'[t|!s/p::O2Iy} X58~cmn/MVlx:U]}?-o_X{Hӈ+o7{-k2 Op='ߺ>禆w\2>_#O[Wota\4~5aCPCahs]B&LNڴՅ.$p{S"ۓa.${uף;2KXk5tx#OYLVFml[^ r8ݺ%\%ّ0ףT~(&Et,[]y=Gmg7%4;O/WMg ѻ"xyԾmz.qhtRM:b&"W859S #ԁZRz^iügXopL(A_M/ǵ^̻!ݙZmsLp_e~sοݮ\ >+,kpc#ENrK=>^OŽ0|Ka =:Rȑ?0T:_z?Ӥn>)H|,-|n3BYv}?ۯ|v:z9; u*0}O85;~zցIF2ߔtbKKJ,[g6R(jֺsߖg`bk1W{0:6ׂ͙t7fpk*E V@OЂFJxQ9 ,(QH UTMPTS+@TYU4ɉ_yXY)\J *ER-&PBj")T\0j  QXZZq@q H*5 hIQQT4PWRep5U QU:s}CYx9f=4P;pt5iݥZ컫 kXC\)jmN̥vuz!m WxľOhK5К:B Z()Le\9ZwZtk.x۱>'D1GBk+:'<6 cZinUvbIv<bu jRgZͦ}[2mVt;scikӮw.fpsj+ %cmkrW۵8uZ<kw/gv>Hf e q\n[h hW\$t5Y)4c@xeLPBApQRkn)ms&Dr>5@#D­hpDCP1׌dC` OpmYgfFYoEڱ^Ʊ5?R:3=-~O ؛]c>?˗lˮG+k]8继wkޥ ;/'~=R18` [O(Pg%j4C R;VCHZ("&$ںwoubsm ʅ}?It/m-UW}n6ϿZZݲ7;\yS%vсjr7>MFK5F=Yy:tLI:QV[Q'W!(YšTXHu2U0S&TEUj*Z\]0QVTM@T@8E\; -3+ep!"ZEU+%@i78C&L'UD¥ةFk!p ҳĤc$jjS d,ya^FOOy=f|[q_Haeô1_zk rƠvtףݺW d9rK)/^8婕:H=ZcO0 +֭uIiq0`>?.^5Ja۬}ۚ[Zzv׫Ͷ'wϷ5Y0` ¥K{~q}7kydvgо_b`.֗4TfwQ='c\M*߻ozs^=y{o/˭1l "c>ezM4gg W5\퍚D+;762p2qc\67ݾ.幸pb@Vw!/*^/\/#tR}7rf;,Ϳ8^Yxi+[yx˳/]01Mލ$ARmo&1X릵:@( «nҦiJ.ku^oֻnsmAipk:O+95^?~(,]Ukg&otFyjf7[ S76nirbӏquwvaؚ׈Zq8@.~klKCj-+lʟcN-2c$85eN#%~{>c6#M;B_Q߽n7]Tm4cIoUǯ[g=MXpT)_3gu MhkK]hhc0Xų$B *c}՟K0޲!h6h9Q̳޺y"kXc`1h>7sأc244^?u}/Ev฽xg |OMo$1 \B_zǟ)-: VWZ<]k0Ҭ<ip_yٯ_k]m Ot[IO73e|U\;oQlq}K`RN1?ʖ~ytk8j VGb85AqUyr6=5.)yGSuۇ=-w"NIiko/)ku!`OֹK]^K)# dW6@uhĞxۿ4mҸ2)׼Օ?]C 6mš㖫Ͼ}[rnv!Ҥ}kp4DPdƜ^e8fw_`{xoec8.Xl&t-J*?5M6w$ۚד29~cN{8Mi?VbK#ؚ$4h5kXxuxK^mxsZZkWSNʤ.oCq#bQōH,ygmuXɽQ4{뭅0W孯fM`9kOU>U1ݗ[#_C)¡ЏU+6؞9y$ù`C:>޻F6wbnl{#r:uOY]̷壘%SZ5kvH潭pZeu|4J TVTpM+`=f]ڌ-{5B^fWOV͈$cW¦ `1ϡIZ@>֠]#]ֶc#IVV T^ nVL @Xݑ K|4W+6: I~5m9I/liҕ&*e&[Ƈ:U_;4?3*]SM{JԑgN_.9<и󓌍|djh1B\!1;\m%ss5W+ |-.a4pZ} nv$9ĸU.lYOk48E2ٕGKVӹRx-l+9.L{p+&Zo$b,{jVBb5pbe^o̗7&yz1_w׎Y=&\/hrV3c8cڀr1X֡J6dR=}+z-v]mצ1D~y$F{k5H>Ŵ+&rGR+س X;幮V{'m\M#Z|tk-hW: %Rj E1࢕Պ/eUQP*E]+U (iD'Q G (FJگм!kڊUE5&L& )5&W "jJ ((QSUB (aa!bͧbT>N-$Tbu]V6$Њ1QSTMP( Q*Z%d5tl.z/LA^+}=>b\u{-.cs$4WCK[cm{oq ]='&E`s/8[hKWcO+ri:k&V+s.qjP{ThySZCƎaB@ggeY[;mx݃TnGCchi4^{:oRo6б+KGSL_{M5|kbзY."*Mp6+t}kfZѧH3j'gog12O3ilR6"ESL)[lNqⲱ#ZLT* 0\B*8,m Mp쪙cŅpk™-eJ,ej- 3Uɟk[> V`ȌXǣ^?øC=5Ɯ]طN>({w n>;gkyso3kw$-8MYp<;_*Iy+`h*@]L.Ͳ\MĆJq眺k[kq\(p/CTeV di+k6?],[c*Pتw䟟ɗ1[e c#Np֭rzK9,湝g|0 /_M/cpۛB$.毻6ۋvN9 `qMp+׿o=/oGӭw۶{j6Rp U^+|of.@'-K^}bvŭ-$>M@}=ۯ\y1(78"jIZW:MH]7F&2,K|+mO=kXVfjyҾ.ݞ:fnm[@XF`ckp^cm;H Ŝu׎;˸d p!ՠ=:{N_>3wgmCs_Jkz_:ٚIn lb).,/=q|^O4<"Gu d R |2{/ol[ &?ķXoJ]= +cr9C:*\[\ʲyZj{ؒHobu>*MTq}9A.l_gV L / 4cK3>N.ZB a4JԷckŚK\+Ɗ5M08Z`kL혚3Z駵] ^wYz7nHmh^\}YҳĮ]EB?O^ir+޷sU۫&mK#CYM3,WR ; Y=rF#^]=PF$YK~❙>_mR8[v%G87O|=Q&#'O,. >"Ac-a 4iΫr,Dz& sMHHsX*NzpYpˏUkSN*E-EZ 4YfȘoHN kRÛpEȅH)"2A;| t=U:5!2+cKH鍲 'vnuHթ!:VYF-ǏL.[.KA {oz shсIuzɗk1XkPxߣ2\G,n$&FxS!K)8=GW+;;Wgd6rLj;mՓu;Y1nkmW̽m].S]Oc ݎ3}3qn&kgki)qz1Z@Y[`=֯&'hې|evĒ=-}|xxw8ۭѐ3H4K5.HݚGݗtnys4ڼ ߓw4>^.6T5ƸW'_뇅Y_I+&=y'UJrheѧIkM}-ԯ/ӏ5w^֗֊ElͶ]B$=$19ɭ ngOu;i6l,]F]s(^ O7'/sLm};JTA!Ukx'IYb6ͻ$"\^p"m=U'^gw->R I "u=ev [p{/Gk|~skS5t\M^z ?%skq  Ñz{r PWWbq1ֽ@(?Radz+[%VK2^t[2(q?  M/;ׯ^kdg#~K].+w7ިcKM.f+=IͶ.64H Ck^sβi@\ HX27:W> maz].խV-uS; .U4;J)H&Og,\5-MtsG0?ZF6ٺVZEϽOr >LbaƊNYheGLCxckX/=.3CejE1en/0ZS+=w;tQk΄WSym5rjm|w=rKwӻS__pj SH$IϾnM0m}-iy$@ǁ끫Tn̳Z6VYKXH;C6aMf^țSYm~{{ZZ+\z^;YX^tw*[Ey% n ƔhL%kNZ%tLݚpl vr`z#k/DsZ\L`rxd}.hNرlj7:RIpNj+C}s :pWˢa / v#R+9\9>XK%eI>7Ԧ0y tq;L p5l|L]1+n{^1Z}-w|-ƐYz}]~|*][חqi+KdCmuR3N~K0|[\t88pjuq45+wгF@4p.o#.om5#s3nfqA]esڼM<52=Vݜ>{ʫ9Îֱ4!ēn\cc-:qvMF֊W|/=oxoYF`:=>)y~W{.2tp}V̒D:Q+NJmyo:-11=_~W[yI+8nv+}|zAyM>} Hijmu+f^?wۍ6J_k0@2PC-Yj",>)n=6BoWb{OgX=Cߛ`+Cq+ n#fQਖ਼ЦZni rTdSҲGZBrET3QR]\ɅJ ZO\T8(x**Ex P2 *5A8T(3Dǁ /24RV!EN M{J1UJ (TjS!ZIUW(!EB @@UaP*[(,eKbs+Uһ;^mjѢu׏~<}gvel iumvyn{y0#x.}lZg܃. )LzO;.QU=]XA$yMyF>wTk )6w1µ.'L9[%n9jRjYv_-m>#unD3TgGcݧt^oxkcSPGsxM;9c[H>sp|szo 5t/ o/FTϥyv|z5Zמ],t=Jt\{,n[Kp4-mfl(Z7 +Cjkn;>[M}~e۾>j'^n_ƾzq]}h7{v Ǖ˹4{KtOŷOvWV\t{/nͦ+[GGTMqѮ{<y6vkMi69gI' *N׷Mdy~o[:>J$|<ʪ #oA2u44҉li.ž||tf7rXx'P˙cgƽM792L,Ru:oz>2tuRgl5kήA&g:7tv?2ZIӉruO>;iL:w|;v\J#l\rHX5˗mq2'^O֭.zY$n&Sߍ<6\jA$amwn]72vE2] n$9x.ӏk=ݲ{ek"5= ^tWaj }o)Fa!7PEGmTS`)´>R-w؞LjMu~ ZU;Xywj 0 w]7Icm z;"^hF&Of==O,XxnMݕ]xٶ??ai|;#tZQ}rk>'[cvkK&"P uܶ͟v[NqMF|[k?^rcv}?gSa;\smK_R>ٿݯUcpvs;Z>^OU:˷owWZI!=T@5RּLqڻT"P/NX嶾x|kNx\ҩ%*0 Llqp' N坮Z\6_g-V.6]qe@ ih4jlto< wsO6b|XDm?V_YS+f^Wvm뇴Z^'j _mncsEjL}M?/Qr*rZ喁k@bZ7V 9K'c o bo\뎯c{o=L:Վ}Lʽ|MVmDр./ʸJ6)&n_egm%{vMM;La >wqm}Ԥ:F5rkOQ},<3E[uM*;Ʊ˦dbEDA+N$5RE=o+o'&[qo4Otns iWҵף2mBK:4+J?k7zXFcdv8껁ZXdQ@9FZkqnv7V HOgUlv[ډK@@)4{ Ŧx"me;* s3 Hףi}]y^FPe2 c4 ҵHUdԡ~ťldt ޠrYC#.PÚAt)X `]+#ւ0Wtw+.)Hv ~QP]YN`7EUAߧOYSk770;Piw=~i3g|3/uJZ*%RdPMUDZ (U3AeY*j8jP AQJ@@@A5A=|;\*Tjz/5ѓַKpCZ}Z{>K5vߍ7m̴ F'^>&ƺW08%[qd}d%_ˋ궭afWIema{[ԗwW\5/^Zh~N /ۺkoz+/:z2J{ c]~F#1k hziM)8sa5~Z]{6_kpAPSEKQyF̐ц {ox,nv{dEfǾh]^p9ᜌWomgz+fg~]_|,4Q5R*A `Bb/^xT]o;[si," =WƼkqi<sHwi{Vp.8ZVwcee8yQZߚ.ARaENjis[g|K^PBmbmw]Tcch.` /v{l|9Lix-%,> /Tcxr[l{9csH'좞N{xc~2*kr&؝HG-rs$SXr)4؉GQ⺸WPiZ{%q>ݸs&'ǟ,ߖ_d{߬W$`cUF5#U[Bg\Jm5ݾ<\ۍ{41Oy_ή3qf}9ǀ ν"-̍W[q3FT)k]e[Ix}O\+<~^~`4?R.-}_ ;$\p.޿]/z[,Ap\9\NkXS 2uZkJl]{[Ef. $R3‹6̟{}v ?7\gݞ_SEWt,8/=Y#b"rA!2afBY˩2x ԙ0Ha Zfd٪2QPJYTB QUQ Q(v(MxQg-aR2 )**(@A,!PJ* -2o n{ZCkCP<8N_O]}^_ ;=`G{q q>/gQKz-ZseIsڽmnc-ꜹøŮf#>õ{S ޶ۍڐ=M:-NwvX8>? k\qZ3uFH˘\P >K\,k*܏x{mܣ$;{Fv6{5vʂiku۪pyi{jCj**Hao[U#V5X'PWYcF[8pi=r_DX qofi8o0J *J集MB#ZZHj#b3ôe \j*9jWdV#I4X#,}Q c2*2}4VCPN1BU P;pEfm#E;2n;-bshkpz-n11wŏY'0QJׇYۇ]vo\׭&A*T aA:&%EBTPB 1y `%eE}w}qGpkxW~'%6o kI (qb{8:=? 'P'(W\z07p=mnMX4 }Fif^ֺ,O-~HX#rYyVjF'7~\7p`4.ř3ݻ)f# \ݰlMkYR,.x ;kӨ8Ǐk^mg}ÉJ]l5嵄m (O˿,m6Esnu98ܿ_Lr|˷|Syeӷ~y @xaFV{Չ&W\(t8sۏ]%urFFfi52 iP{jotv--sm •] wbss:'ss-ԎwW9ƤWYq/|i$o/NiM_hvvW:GJ==rY:Y qbk)W͑q2!GYՊWiswEZWxwk^[];Lo5Ww.xwy"̼)Gb2]#b `~mq6&][Plx&Nԝ;m ] pkN.ͼUV[ռW kµ9}Jx\ܴ$4g_Iږh̜(i*֖Qw` xu&jѴ]m"ʙax>|Գ$kb; 15OұN-$2uCӀ dzHWśZqLJD&S}+^S Cj>7DAk34_р\c[vmr[85-'QlG mis6|SR֌7I[\+o;inFWy eB\<] My{xizwRoǚVjWm7^YC ȦZ{(cwa2^:@1{˶Ae.$dQZk?W/Kr+h$Hgz.2=qO%e.ei/MN?kV-n6r.oZg!f K1ڵ'/#~15\W.ÁW y\ ><Rb%H\ϡLY+F&Cإcj{:yjM;R]L:,6 \L(TT4rU]_BX8@SL r[됂jJD"@A!b]L,S, uqW?oBLS_i'秋n}bkn6-mVHt:emL=nKsbӠIw.ys&lӼj\*{ze IMY֕ث-3869@U.Jכɒ14jVl疶۫i o5F|agkM5 Y6AsbK|fܥt$ɭmk쪖k]ZW:#h-Hݟc$:_P,4nKua.69mI*+Sj_ )#ԮIJL9o5Tj%NldԥF1=VZq1q v Z VUQPpZbdgǂADf1=J޺ݮ'ǘx^Hsyr} ZTQ HmxmCED*=_|?fӳc{8}L៚:_t>\m |X1?0+W+-z4ݙxZc\9Ϋq&cj;2Y= ~X9y8yxum7so$ 4:ZJpyuu\smm{|VqxphW>MݯY2C)xc`#92W&vzӶ=P٢)RӒu5 cи MnZ\V]/R;!ZLpTor^:YYGMN-].ί$_]Ho-$I]ӹak\wlz3ui[N@xV;+hI jlc/;y\nMh<_vJuYܽI5toJLnԃ9ԝ1[m% $ SN[ t@ē씲5.#bLڝOqgخ-zoǕÁJęki'IYi$-mъm' jZF޲.+ˋ ?R2ܶuHrRuK\d'\fvC:zpR꒲]l2=zj zΧ)m|9ҒHhGfݶ5%/ :sWnG9iekuoZyV&ހ:GUȲG7ymAd )ݝ?68.:wr_/lg;'OкMsKMО@|BnjkgWMގ>:%o)8JRfj`5&}yo /nzEE,nZbE(4"eF;WP4TPOY18_UfipfH+Ej"IuUKT:'6GRk^t҂vj-c&p:5jq[aʒX]%ZF$N:n=x7Okw%"ˮ lgUJy* Ӹ$qڰu$Б'V$Ulp-sq j[x*0b kَE!g%Ea1B); EԒ15+G8v ƱΣxW*ۊBF-^\sa'VĻ4NW)խ(p+^L`6hνLjEjqͩX^A^I&~'bV{Voۥy .'zm{ϋV&jݣ dmb6iq' \\u.[y]նpx۳.} +Sw;:qktޥWZmՖrKCkD=vq9oǎ{FFQ[}++Gp h@ <]&wCX66H9kz+~+Z Z-*3+'nc+WKيܽz7,.uJa&>2eIjV",9;$ֻmkPֺ[+Įz0S-LEYmk%ًw?pFgG '5vcӦ|&fkn(du7KR >^u@~`va{xcU2[ECecix ۮnհe:v zt3ghٞt[LJAn=<^{?WɽX"eIt;uԀrD켺OFRM s6 =G6Zu_{=YWv뉟b6Xa%wnUvg~dɫumNmZ(@¹&,kR^Op$j}uy\=Kb(1s }eO0I 048a6ק'6lONt{^gxԒѰ7Do#կV[tqi/D-oi _>rM .kh496\Z糜&tD`K+tcZtMɭ<&V[K?k ]j4l$9>!o'Z>M Q#K;\U vQ왒skW=-2#K+:kNx,R5fyB+Zp*_[h8*MuWK*#5Jγ+>V]YaOq4̔LkydFtbxmM,f9ܲp3#qnmnAjҋy-u$AR}'Ks?;k:`e:k.+ƋzR%gf/8p:|MyW>_W^QvcP u̺a* Zks{Z2[M9SKA7Y'~llr͆PKȞޞKv#\JoPJ UDT(%!F @TT ʡUPQU%E*T됀PAEB (p?*ۧs[A*[U>委+ö./mN{[[n62َdKig6[q-ŏ̲wwc˩kr:SpNN6=ov}}^o VXCV凉rR}M#riԨ+ŵjڿ_Pkf%տ7!-l$$юNlz=pp18pXj^>-D5Zgضɶ؏I!yiYʳ RHՎ-5Iћ'l5TjHݜStvl{Zmgs.fl{tQn}Ѫi__ yo|Qi&WymSnn!5ėكN^^o^>;xW)t Lx SesB'1V"Fm'wKA1-v7̽ɪCWyW_/VjƘU.ؑmsRjMrmиmtF: wvvj6/aq8p>rh41뜯=elǗ֚&84 ֦]m$r 7 ,mtĞ Z㶖[8,5 + OM`]uc}h\1]pr_tC4؆S =l5(㜍p.?amYq VJN[oGc>.{['ݭ#݊g}y5MO>,m\6V6os?_'{ɶv::0bi%ZY}๺qJ:ח uNK/f+p f߱uͭ{7 .a{}kեqv{^@wedɤnMw{/q}46Z(}g9 f.hn}.48 ܷ;5d\O| >%;5.^+Xd<ۘpϹcߤxv[=~}Vγk%SӹHR['VG\c\vv90YIpܵ&@[Rj'1fkueIԶHrBt.٭buO5~.-1mv.5kyIrw[-4 y:\n9f%4QWL9)ܶ l$qHQ.1{b5O,q"s|XxhKhaf0ֻOyԃ{YC\DqT}Ur}{l,wȅZ5#!ZѪZwSw GFcy ;O.,=TϐnXV9 kZ0Xpq#QiSVY6-dz_@Hƣ֜y4VW5J8LMiL`s'UJBuϵ [z fd\0uxuj;V|r[ {9OV&;^$Zn}RYC5:f4{?=nѡZn>|hG#~6nHw1ksk.u׫ڛi^f7#/yr`,ct 2RuaϾc jӉcbjMZ^諞MD77JNk*nW`K@d8 RؤyW1;ڬeCkQBԍp[Wp$ʾ޼IIg=Jìb{pXQRTwb~ZQ'AEA *A%Q %6*ImUQSU@ U֨A!EB됀PB FC\ إUUFh[lg?EIF88+I_wiCOosU>/?LzOoYa?ٯV8=O毟~W ::ጆ r_645ukn@e# vzG2akJiJ|CEDit#/o;1vM5oJX7Vti7Qvݮ];"c#*fW\2en~-KZjc]ΙU8>stF+vfn:=0HHytx[cwn]4 r@}_Ļu[_]3+&l|#dq'H;wO7x<8wi|?GaX@@V}^>^uPE.c6mvSv?JwR{5[gh .kK-PmHS3$y/Z^14fq]c\YFHʸOttz6`bq\.cks@b._b4{Nj"sֵMj2h*N8n^KȧqVI`qÊiL፲>8x rp2*OefۍӠk ux ktǷSA*:<{$[.6qõglkRS} zoNgRr*ش<,m k\{MU[XӦ7Q]u^oqCq:Y0sr殜w\o[e-\=д4k$sқjǵ#;~y1h%d;Kf2;Yf˒O7Q}>w/ۯú|Ks|i3̛q\85ƻm}_OѽőZ p%}Bmߩ5& tl`4Pm0]1 ZEBNlakYۖJ1Â.^{՛h-$vs?^5jl~E]+ͼ`nz ֶm{\79~龧χ43>1-uF/_tB4R^]+|>_cyNlȱft=>ix2۶y5 n.r4ne40:]W sVIY; ]((dHz3H^o{Ĺ]ZSݧ6g^KdsX2tHcuEM2ֻ8WVr^DߘT.x#>u{OX]CsԂցè6s[.[rZWVSKVr5.;_cqVilVp N\tW&Wl##YeJi4lJ|>l0_JZ1*R"t[t_l5i̩ZwP:^Iv 9 JX\!(ԡ4_G}Gݦxq7wfׯqxk(rم ZF͸KUA UPPH*J됀PB 26B2[KK~)wp,%=GG=ׇrmi.6wpy۽vJN9WĿ3ö~vגc>]DZ?doI84_ޢso}\ ^Fc,} CrK}C\'=Mo'{~y؛\jFXf9m|.lcH$Qz%Ѯҽrѡ8FicF#뵥&qt._k-:2kq.Rc˻kx. {yWիaIy 9^Z޲EVi 3=R9x6][`(+M*qNY/|S=|Vi.^dԜJyYH@@@@@A ФMF6R0žq]w̞s:tnX'V8Pk{Ǵ䝵v>fǘ݃ Bdu«Va*6 PS+=qk;.ueKAAsi{,^ q$y{O嵮=BFx])ZWtj?S7Y7;z~)ɶoëವڬxk44T2|[wGY۠Ї+z%8S̻okkqI|mrovP8iұWXͼB&Ik0pu!ry96nUJ\<}n+Ode_Ws!e%UZ6ihu}RRۆ!niN&[VIЮ{c{+4^i0kJRڗ;3]6l!Y@KRfɪ5\oBϵӵcņ At&%j\"֜pu.;^GR(+:~^q.Uͦ C Qy^n]1rٺhs=0m7ph'<'DRڍLv};s8kydßA[O3|m[/iz4~GԒ`]%؍'K _O-g>6^cϒyN)~ yGK<';_zo6]Cbewqky29}ףv 6SLkJ%sl﯏XAZ.^yoU?g}~{Lvy8y5-2 :s4͌sN}]mZ4/Ys~ {6}Ų+[VZt¾d7H-bq4F9=CW~>,׻~gڼl3LZD핚^|.fzo)97mye[(hiq4${KىjC-2AJ>h]z.;'Gd ,g.߻:G : fFQM4IMp\|%t:y2>+sVn6?vkG47?R{,Z ۬S45h?+fklv^;t,ﮘɹIIu\j ?Mz5cL2]$\/^;$Ea/xx4%qQ]叚q6yV-7^=MͰöқnktH%9[ۥo*|g%k?L_ul5ŮpG@9cviMzKن+눚ǹKcs#MNs|\cɿC7 'ui1Nsz_2NMNJĻpl]NV=kQPiìZg-E=R湮f:^mk 5Ï7&^mk/?]|S>\겴N憝Npsbm퐇8^ **xoy,Ln,Zc-qo 0)أ,2 v\Cc|fRGY5$ F\%M\W*F7_?]As+R&ZAUN5[Fh'U X7BV2j^mg>/~M<6h[m,m8+dpYNk}QA-SjUD P@@@@@A됀 @ ~VA AsO[k˯/移S[bmqnGݑ=~sywqycza{~M10ͩyW*&9)y1PS%'QmDAd>wޝɅu5#Q8GGyxwtձ<'i,;o[4hkGkovm3'I:D k^tRilc\W #bё;DFg\.3IiU:osؽ=g^npdۀΘpRI@\s!qڵv<#cnG˯G \I׻qt\ p%uul`qq[ӫ;V_.BW{-[}Tv\K6Tca"V./ֻ\W:钴,ucsoIBӐ ;{Vv{jS"* ѮE;qFrm8&tƺNޯCZ#KK+ɵհGEko݉W[ dW3Ǜ[~6`_ǒHrdk{$tZ(TmYU,eS8Z a+;mǚXr 2҇0;<6Hׇ .0H.2tn\}n.atde%e壄WQzu0bis8L7ש ͵48>.]t|t#٥w寝G~9 vH}[}~?c|aޮ6KwCIxp=wy4W]rofm*ɲ6_뷙~SuW)ړxhs%"|]m[0:I8R-|Wm[\ީk bj]]nbX @5 vT.{LCtGN>ĀW..k [!$W2S}&ݞQ+k\ף[<Mk;>L!kǭU}4߿k/`򅧛e"ktQ.k ;W_{k|n|{:|2߼Q/S{j߯s\Ko3׏%w1odf٭m ̿ۤd=W>Ö]:mż߮gTrm;cՎU̼r;7k*Zk ks<5Pٍ<͉6;i_mָ.48%`fևs Rlո` n?, 2`s%j^۱*[+8r7lbt#C5V.oKl/GIs NVWCyR׆1ҹYغY<(HIkp9уT-B]Kۤj1%josp$8߰u;F6.ɱOFf85@@rtltoZJ1h-ntj'VgKRu@2*cpKd V;6Y*Ja}w Lu q٩QX>,gg 50ZFh^KjQ9:&qWEn ᥮$`8vTZh9E% Vb p]CZWuB:׋njxqIG=}9UTUEB #xyhu8wY3yy.q`2S_,3E]'WOIuMv>|'y<:+YKaZiܾǵ.lv}j}-;\*&-|~+]-_޶[=m~f9] Wg6csVHJR5ǵҿeԺ4D n6bikr]\e7NgէI\1-7IiydՏr^IxҀ8WW޿˖Il#sGBcn]Svffnq<XihG] k[땮-UɶfeGFTWi%F7"8: a*$rA6mn$ֵܺNȏW@ڦv#~.{2kIW6׶{7u{ˋ[ 5%W]YM9rz=fz[}ӎ]ߥ|-ٶ4>s9o.[u}-\}? *L6RZO'+ 5|]\鯺ֻ^+}~suelQEeig}K2[m7RP ?R4ŭK3;̵(+G79d#FHMdb,&WL1KּN\n..1 tq(0EiOֱ#ףUpqJaI$ |F`ИcGbS++c~IȁOjkjc 秏쮳W]z-M$֥ORV#Ƌ_gzāKqZ2 KH;ϖ^ws@<↙QoNv5k'~3+pϵqqq:Ku%Q1#$L].^hkPhxSz-g LD&Td4Tf#t@EsfVktW>9+PA5 WcI} pz{V5nXĎq#P.QHiˆrۖ0j<Эi9BtuR8)E"y,KgJQS'u㼛Mun5O56p-Ac)㛏~z)9w\ht#As+_+gGOΆ;VFFh1._ɽkvԏ.I{CMID8jT됀PB A,PYRfN_ysͦ+OBɢG|!1ϔvIs|<$Z_org%&GK$_-z172 tonEW.N=wy=x:' Iҿ5˿3Oz\x~-mwBMГғhVǷ|z{ޟQRf<{#?yME}+$yv'%*h^_+㷮33A)k\H~.6x@@@A(A:[/a>/7o_éf=_<~I\jp__ (.\Uikr1.m9waI[0]_kfj.\m:&!´ "+k,Xڻ]e#Y1vPo QkKz:pmyX\M2Q4oʴc.=6TDZnWY[ 01Tbޮ6"cekC95on\KUvF!np\o# bZ{իf{#?w˷bN-py5r;䍢Ji'Zѱqt.˝ޱۓT)EmڗsI]W⧖-ɡƎN<ԺΝ;[NM[| ϬK=Fv&RuŞm 5?B˔ 1Y6jBs?൭k}Vl S0[ fpbՎӒx%3:|yunJWLZi[g=u܍puhSon;|\Yk,ߺ۾אٸ A/(]VWJսcI&uO267noA.7yh|rcֶՈk5M}c==\;Ԭ׸HxZS˗JǪGؠeáH: p;L$nNϵyB]{WW>Vm^F绞̿>gʽSƞm-gl<.>e).y\\ |}gnKm&KIn\7F{Mө{^uvpۊ^{ov38uwz_r q]0rQDCP|q5r:{Rs $Ml~z149oū{_}݌1^I䍱sKΚ}-}^o'X.agR0^/ Wm&tMBCT}\U)V鍠qW ,BSkih5 3GJZG'2g؈wGAGVW?ZWP&rǖ[ӱ`>ަd)˫[;tv0Ld˷UL_jv^C6<0\^_Z/?-;s Wj#3.DzڽzI-- `yquoh=ϨH]t:[&ˇN\Fl{QI#U{5:(NqW9x&bI)6CqUg?5ͼtbelQ"]oPd[_ ZF}`kU2*ܻ05>kQraCݥx$\X_JcU5bR:“YL{sn~l A0C[W|!&9^ָg\ N> ~jmѭ'v _, - q};{xkgGݼ.?U S Ɠf -qwt{%cpž_|w=+N"ksq_Gp=:[X䯤됀e1is!M}^o]neG1].4.,{@sCND Բ- PB $9\.+LuTȖȖ{ksMMA [E;f=VRoxߺi]H/hq՜OUoE!i':Iri˞-H#kpȏKt{^y;E JKmnm :,lmt{m_?_h@A!q ᜺PyvZ~S]y' u,Q=u\*ϱk7J(@Z=8|><[3b~9,yQE1:^.d}\6 x־xLv Jg.{hřսy[o6:Sſ\mu߼Y;tlW&F8z(ӗ$ׯ9U& lhֳE8`i*NV)ZָΦ$P?j&%bVl4]pmrH<586Bվ2߱t~ح+Hݢ6[F'9x'9;ۓ|]5܎ǤD{W+pZogP8 w5奐% vt,xkђ0p.Us wL )S(jіu*=::5^#z6w.=5h5꼲6zjsJTEUMr]qlL ZN};lqI蟄d49^\vf;in2@x ͩ;ZwUsc{ p5 I:8~aGF٣8Z Q@d8JWNҘ%:2:qZyk n*a4sN9\=˞:;nn^B0wsGI&vnCzO# xfAgҦ::Iesf=<5'׺69Y/[n O=kb{Y fœWM{uMu@HS,YTfm3IZ3?b!e.yI?g8k^nӴG`<4fmפoYկu0#\K znَdxa,[Pq5&<>Nn{Wr)K1cu7˧Zߛ^WfJXz7[[Ùs5~r3o>M]Emͽ4TCJ9 ܞg?T?c0npnW强>`a6 ؃i干>w f˦T#Y^ze !isK%`n$sVKH~\Z|jߵkbƗ?!Ҳ\hm3$6riZ30U\sڽޞKdnN#b/ ӪS-;ѤF,>KQڲ`^j;wٹu~W`A}3f,juy}W&˫Us?ų.qy.ve}a (*UAx1Mj\3f_amȷlq^sXReߨzm罭n?qb_g{w978^ck&GR]_[Ҿg=䷓wP0JS؏\V{L>W|͆E#6F)č  Amcj{.~ʯ>BXyH;1-[0m;[D c][L:} ai {*r6rtI.1UČϔϼi<Ƽwi;l\ tivo#ʾ%6>f?3y q - ]6>*}NOvy+ZueE_ElQ[^O//ޚ_/ҶaUFOKVz}$in_ hC +i3<:+!!?MkĮW:8aG55tqP獆GQ#5/n :h>Vh1Բ^0\w+]In:qp#C.o͑v9aHOSlNÙwa vT/FqѺxcNB]G?ڗ|`ۤg,Oao~IcoNn:C=ydv^>]]7\]Eɷg<Y2s@(/mnN[|?&[%qsɬpתQP=䖒 b48H+/4u됀nr}ZЍ/h#ʸ6g\7 ^HҔj_U5r:m-1zJ@@@@@@@@A!Q( ŎqSFbߕkZCOPFDQ~lmn~Y$m jA5?qm,pf@h)]&vyc%ejg:9-'EGgjƖ6uMk~96/~yͯ4X*M6=Ν|ߪmÉ=ߑLp' Ծ6кa vOkow)V~χq=5`@@A o۽i8kwxGEq3^b[W{|u,8۵{I$qͤ/k}~<m<^PcKK\mw~mVjv{ͦ v_$252ZRsn%F3Fз#M\ͻ[YƣܺHNE@#Ţ#+cs|z}on/16ŬǧKCG3kþu}/nMn_/Bsy_rqc_؜Fg }:=i#mVhuezHR\ί?6KQJ;xtҚ0|5\ӭjj; 6i[ۚm tc2J-hT 믟F8)wW\vRui^ImA8xtw``f%Yå UPBqf}ΡPpY3L5/AԥwY7Op5-r\;S,[sR6DLZ [Lv4ޕ͚\6GnӬb?%rz;ߋ}ޣW]xk~Wt7sgI=oYGn+wʅF r:70Bcm^~Z:o\8>3?/':/vQZ5M\ SN*^oS5~'|l@~=yaGWue 毓f[JK\mhK@skx[4]pa-J +7[ц]xdd5TTӳYkZZqs}~)ҳ7yj9,:/ Mp_:=[tÓ\udX: ׅ ]E8ytr<3'y11TQ-L755 keKѡ49,(rOFATVaθսQyT$MG=6~Tkg-Ӌq%~Y5ũQ,ӆ `ZI|ft{]iN4U>k&K3{_󗺦ײ+UB &!*?됀?ݶ4r 赛n홇%}J 81 UQ(2UhDшeh>N{r~/9b-7/٣fD޿)86oΚܳG\u3i\ꡁfrYY6:&5pu)wm-@"Kض;<~ i?Wϓ_on;%ߍ(jx=V o9kK?J׽ }x6ku-{k[æ<=wc$asWʹ~hm9m>Wwsoc[/B3Irᱞq(Wu9a|GL-wa]5muZFy{p`lMs1ο{W59 ʿ?f^Zw_߸h(?gW?[2  ;955}Kyxö|_K6wm7d\oa__,]S[U'ȆUeaH_ӕk?RiE Bfftu@WLc.q.Sin]2muW ez-q,^Bh >.\7xy6Tiy3Z&M;=yE+03m.*0kjtH^)o.ٹm:f&dkk3>z>Hu00jkuo zmͯ|upMvrym_gwO0cu\QMTNq$x}>v\:@@@@A!F!T{$y÷JLk98zmx'&֑E|?CChFPԭư\NjG+,44ݶl>dNaIsWW7Ӆ]8ԓu=Z~aY\k@Z( Y3;mY|I>ǃZ0-W=7'˯PA*(*[}k{=Huy-v{3@w+ Rk 32Րt8OVkAoÈRKW7DM6Lٰl86#˰Ҿo?Ӹ{~/S護nO/ߋ⟽¹tzܴW :~4ƍS.LaŒ8w)cY$f0i@,u:W;Tdi hEMꖦ*ATcrdQ-5#x6/ \ph~Mxph@@@@A ðy>ރ=.o6H?dØ۹^j8Wb-\jSr: ?/^؟୍{q?QN~"p}xhIĕ@N(:6bcbM,hG/''gjas}-ܝkJsu8ֵP%fCD" rAKY 3 /nag]1lmʹL/VY3@뷷 c-ejou?uz^;6vU`f5^>og~N;Ͼ_鬒`U,?m{axii@ Z5l.{hHG]=0ǿAjevkx|qQ9|{cRteDH.zu/4~]8pcf[3Z^;Z]ѣ;Ѭ^lvCaeq"]Lc`E?Z#,&8jUf%cjecup[5 Vz35q즖h x.gnK}ѷ6%V{ח}L|R>}^z#!YMF9izFcgpS]+^Xbuh q4 ̯>ҷ&Z49;ǞM,7^ji+KH@;Х9dzCaeGooz+@ڳIZsIr o} ym9; .~@,aUkSp Ủj!"8ĚP;Ks]>y$"iY:6k1|۞ͳۡFKgioFhuH0q4MF  N ]5Ku.߰-`h{p-/龞\>uO/&c3ϘwKS4;SxYMuq܂(U;e14 x'Lg-n,~I"ֺWvoݾ/ǾdĖ͓!V'Gc54غvbm6tӦ1& I=281ŕItUyo?V9ͬp8O`]87.lw|qSpd@oKu=\ k%P UAo{!ae>g폵trsnY,{ME1!zfojk`W?Rkut*kp\F;t[+qTT⤾8 iq9S HAK՝ltΖKZ]%sg2<d e9W>esni KhA_i[c-5iV=X^8ſbTJΖFN |;Mv>b8كBs.fcj됀hJPH*Z+*X=Wbrwkuwmcyә2J_rk݉չ5ƗI$Uyu\\xmFߙ!6MO55y'7w ab1o|?W?kbFp\ӏwRά4$汳 Kr[[_~k웕܏H@S8x|M/,Hhc8EV>W4i@gx6{i-cf m7 \hB (3݈\LK'+ ;xLEh;k#8`,u4jT.96`ki61ݫqZkeVe`z -qi\ˉ}.K]ђh(9wR?o5}ikm$4|{]7./ (s+:^Iͼt$Nhgz=r &޷Zr}aa޲6>4z+5>pߓ]XF bcl\1- >pFgCmc~k@gv~Ƭ{ԷOu;,zu%Z\4$)#WiqJ(Mtr˫hۇPʳpre8FyhI>k e9]ǁ +d y%Ztwk.q-mmdpv;ch 0tM2`!t~]^xV wd=RpY^ԻDQRWM|+ 9X=Fغc 볣gZ +غ@#4ֈsYqZtttlIi 㬗G=$}eXS=y91ʈqeO/Wy35]t s7Gq<{m;ђRHߓA9jV|;(\*MWv+C} Eu]y<6~ʷ;# 7Ҡ\7i<[/W6[7ŮBKҺ}dΘV\9d/i>v~{=ޞ>\Z\ Š8y)rcݯXVc_BqN6]h%JrtIp^Ӷ[6^e1啥([9[RW4<4RN+>]VkySVvVw.1iѮI[jhW7Yl{ϵ|yyg9;78OyD w6O<z/[y=]v^(!*} vdH+60ܽEs6MRur-Bg{غX/VZ#@֜*?P_OotǓrr|{5F@`ɡ}OϏB(UTW$G<} !ii7klV4<;I8MCO_s};^.\ާ|ZYs*Vɝ4*ܲn޳W^`45X]S۟|U:r=Rk_Fn4xOZ{U/gi[m1<8nqkDSUʷؿ&ϲ`jYxN8xýkV: Qm#nV6{ɜ 'G ͼ85r\ޝxe`hJ]r-wh8Wk.1_ky8qpkNbo)M^@q8V?6q'gyZ3+KSzf݅tñKwgcY|{:Y/wQ͎ͭ-A&%96$9 kقnJRMvß-usL .\t WW|,R@h(kxlQa Y)m@3'b9˕4āZkhΓew_!JΣ8&ξ߇^|/Ͽ/;+qm-zs0 -/̾oc${I$Ҏg߿m>_?~` ;䏄hKzN>..m޼$89}R>ik{$MN>-"S\Cnyƞf,͠MxaFwdBʃ0_Jŕޘ~bZ|R!, ,#n4=_I4mzt/}|߃okmD f<v\"-s8.YX&DָPNϭ]'$G4tU>`uAdGH15º9~8l-7--41p]y7ڽGp[A,8v7K/<=h#I%ѐ*jiV{ KzG9/s3WҹdZ rj|.oWVSZ**)||u5+&PB됀P @@@@@A(!A *MP(J-3ZP݇w6WvBᷧb3b\F {[WN?mvRX׺ՎkſӶmYkgzY{ճ^ r8 #Ը4kRMyVYӻegmd#'?V70GMsp7Fh;Y{v 5VFv.|{i2zWōvKdSsc7p5ii{+ tD(q]p֌pv)y˛ɀvk8rr}XK3$PܸK٥l@g]pk7HEk{xZOx}eףӯX(7xEΥν7zŎ-wo-z:|+_-g.n\*Fr;ïy9g?Mo_\8#{gx$Ằ.ҽsY:u3=uZ+_ Ӷg{+^o>7}maV,p:_Kfywv\9mo|{0GV'WӚaZA P@@@@@@@@A5@ U88ff_co]= Py_첒4P\a\kz=Ėkyh$z/1²)no,ܿ8 co'x^ʕcs skfr/&kzmeoqudt]SϦl_ 7J KZ)n=a.֙Xאki#Ł@ké#7{_t50 ̺`%'YM{vn? a_JN->nZ G3q{)PN3Kd~]Wcۮ250 ԏi˧<}&gTXq]=p:K CV=^J]ty'yF]ͯ@APZ3_KKϽu^Z=:LԿA 0!P@@@@@@@@@@@@@@@@@@@@@@A됀PB @A'$ DA *D! *($ *%A4TMQ+R1ku,? o|:W,egneu}Q_k~{Os?_,tz]bQh-8Kr:Z'r2o5>(ZCW{WNk:tN2b{kjf703Vυ8pi|o_|8MuIz߅?`Ztw؛}>M?_-;k[^k 5ah$5Go|^[M 18=5s׻ blC"%|ҋ8k)phNP@%-L.P[E0eQBJ@@@@@@@@@@@A(A5Up)ߕgy8iŵ5]K,{wɚq|W-Yߺ|u k|qDZ~wm|n#ik-Mr_cRK(Ep9׊Nj$W$lx%P$sVv@p[m py8jJ/C5b,T*an:r8caВZa̍&FR㉯jܮ;mq:uP[] ]A31"NOӒx$xH4I]6qo ּ(.I|A`9YaeGxҕVgvt F19DwrڿSWrkZq j,"}W;7C#m4ad <us+%JP-ƼNҸaʓwm֙se"e q*\T-5:hבbf#GSNĎz1yChs/vc8 Yp97]˵+Oq!r/Tdd=JiSLyow7k9[ikC}}: r>>]unoEoo`.tdIPMՉ+}O'/˸#N/f2v;V a,kKstۖpV"JI";t<Ƭ}GyO}~?uW,w]o{c]WI&˙#_kz[ݑp+ + x~g7?Fw7[#+oyynz}-Ϟ'foڞe8;VaIz6}wo1kK\O?&>̛8帷6KkP=+<[Q됀P (  *%DBPJQ@TMQ(E( !EH@(@A%P D3ApJaP-qi_.x0Zэƥc].Vumr;CZ~&/6s@}Cot嵈hFg+o{k]-HMkƾSLݾⲗ-+yή_C^I%?<<}2ci:\q'q_3w<ˮޞə#Z & /e}/E~Dys8b_Z-]bf'2=l}>?_ſ\2|ݱHhjr}S]nt_>,]2t{>׺?]ytߋY,/vr}Vl6ƎbS}2{xn>Mv^tC*EE{Uer0Zg,n, -*BJ@@@@@A(@A4UTKXj\ewߦDAӘn_O7ulg}t49Kyqk's'X A_f֒7L1'DI$0H,pX\Pv-aI?^8cKV԰0>bMIou㾬2CpZgPWҥLWm%1Hճm1!g f"$jt.5ur%\9Y4H!Ywfað4`N:V/Cɩ6O(v[G>)+RZ*z:|tt(iq$2` SN^gL25XTEa:fOjikؤk,m48neS!-2`Zr# zViϦq+8ss#n#Qoؼonv ) Gv);gJJNlUp;x8zV9S/@i&~p^JڼC]y8~csth {(&Z&P)Bs(P]NpqRPوӼfsH# tIÂnFT'C@FJJ[pEgеn tCL*hĝ+lkhVlGкg2{7J>i_Bʥviܯu廨5tsN-k7{O{g9};.. twML-~}\7M[k|Geؤ|b3,%==W6ԊFW~Kzi[fۦ;X͸}ܻm'qcpmau+9rKn7̖6JShxkпk?3ww_./ UTPQDDD2[N$lJ1Mwm#y΋W{ᮜ裨?贼o}?ƽ}}?Tv/Ӗ_q}w/l6r88Ԃ;g}?Zz;32I8;}vk>{rb[~v8d;7e~3KNzm3WOr$5.q+kbtt ݶ.%!Fjk9yy6ZӖtף\}YNۂe e0\yn9+\Hܰ^C#Pu_O;4˓8]X ϫhq Yz7k>G={縿<+}M1:Ou됀h Q(!DJ*DDD  U@@@A*DB  DY+GBq[uU(;V\TE݅ PaVÚiRz4jW-1j.)uſAvזm7׾{)ZCB hOzl1z}- s|+r[qnÇr甕s:[]~b~1hMS"J UP{*ߵB ׶/}Sqn{1yq\5n 8j׬^/K}||_S}#oGu ӫy}|TS8j ndkT{_(3 }H}KnY6ms5XoJ}y|t,]s)٧/7W6> yA%y$xGgSsD!#B[g|؟3/W_}U*?됀P*D@ A @U  F&ʖebA5Uvk5h!EB *TQQ#"PB D Q@TJ DDx*IZ ٕridٙDf%1Vԓ k-%sR;] ݝNH^^OKǴVl{;/36 `yxO߃}nzZXhM=#;r@l+IYGh T_$V"F:r?&/s׎Kl5$apԴ'3™f*ނۣ^8S{tNS_Grlݲ.y[,ؖ.ItM**[sxlUtklt d]ZRE7VJ myҢn#+>.KN( p+•8vjĘsIzaF9V}ȩuRT'.]Ղc N#$Cn\F wem3ʸۑbu:"M9fY1~#a?V yo,RpÏbܸtֲm 29q\dgbkӜpm^eOugd=2IZd:&<=oXl. 3ϊ:5Wwlk|Fd{ _*PC2@ld{5{:a5aI2i:x1SznٙqpF`Ufm߷op$vYk7fof.df&G}/2{7vϋX;Ja`XtM@(!T@Q8=8m1z͍}ttF <|Zqi!\g1U2 ,ڊ a!is&=K?'o_u-z O0BG8I.QvkAJeޠB@@@@@@@@@@@@@@@A(!E\  @@@B*QPMh (")D Q(!A (A!Q(& A%TYX*s*Z3]Ik;'Œ1 i,oYz@%1Xj{3H.c,WJBOZFdwm&\gjޏF̹ak YQbGufYq\:Ah`*:JP j0tplְwU.9 m'úұۋZV^JNxoo޳t h a]8FW:_~.Ny'_3X_nwM&O-_$qN?wo#`=yX3zyrmYu s&`yxz8W'Mkyvm?7'sykGл6c!q@[0eU@@@@@@@@@@@A4@TQ(!J 3x"Zvi=ϗ Ƌ{˜kɧWU=?,  3_#X 5`2jՙV/vRfmV35npm{ZzeW|RctdH۲4N=G-D{K׶2Ljt&֯V0.-Je 5QQPJ l|Z>%G 4c/,59wE+,J+SX5PP4s4Tp 3Z烬b^H)\nx18:Iq wY]pٷdmy.'ӗ=m' ^s$jI:K1]27L)tƎz=Kk coHjXiZWvsv(c CZ3[HҶiiZi^mx>($(]ܹi=9vvh "+jZ{qec{oSn]@A3=iUkAirkūC_V4{=Uti<;v۲73"F_}k<ٛ1خ^]`.W~>[+5@@@@@@@@@@@@@@@@@@@@AmgNV% J@EJ TUD(!(@@E  R@U Q%TK]CUeKԮSJ uz'P+{\G7;K;]W_Fph 8L㣧gnH i;-vok#.5\qHm:@x&Zn18V8hn(Y GxL%}ns,5hv iR2!:T50I]Bq SZ[$; .tZj]-$9"lr7R4\En N$V(1_8f=/߆x7]=+~V({l-8s}U>]yg/o {%+h,}mj- T(% A!"@@@Ao7hsY"nG/= Z*aެfC#WKTϘv6'H01^?[Ҹq?#f5U{0~bSpUwgUߘ,1 ;'s6 h2tcψkp.>.goŲ/pUS˻\3Z8p!r]OokPcKrKmc[zpo;P)w^{o$˜lпQOz÷uoM1X2 &r@չ;8DZ58q03ELӵaВqEQP\r\U2d2R#IխWhۍ29V0 =f!%;jN==1 =7ÝrRm1pkd4e~]uulG0*\>Xl6G }Oy믻rM@KM:xV+xRib@4 Qvs1L1L{ptZ4{=:ew8,FX|gpa11 .Xwie֨#rԾj3NvMMvҶK G zw_w_._q>H^q Ue!$b @.)PAQPBP*nm7rɸ ?]bWlx!i _{K;tXȺps8>Π#}>LǗK;_ <nG's˴/Wdy'ѻRұe AA%PA(E*UPPB A%Qs#MUD61( smC7S@W}_GSGä`dN E8E˄'OX\xR̖9Wk[ (sHΊٓ1 \kN+i4ЌFKQ$UHI':0)3s,o> Gjb7m'33t5[fo'Gbp\@#+}w(X#%Glu]I˯>m6+ZZm{Fmkv:f̽Ln H.{L_޺JﮮK {Cg/nho8$ N%L<+[.!LJY<{oW,pIuxZ]n|l"bhk?蕾?_w˿m?y:VR!EB ZqV% QDPB k0btw^>K7[~(=V0FOtۋl_wm[trht8\=_oG;ht7#^WU}M96pے|Q{zj+=8y3c 0 WW}u=6Wm%*dLRt@i3Cy@UqMˀ!`׽/gWiz. G|O[dM߽0úd0<w8_je{bMt}qMq3\q96>V*Ov-9TqfZsNB)mƚS00}*h;ULk*;'9DPN -_8"4C\\ܾEέOЦ%9Th^FP4iU||̬ KCv2H4 [k3]{S%e{ωK_v_tӏ:k޲^L]i?_==Vj[LiIM_fmSqzõ9mΆRI%o}_;EǺUTQ!@(Q@("/#&? ϕM-8h^/[s<.+5jfօ~? m"ǙFfDq.ƙ .1h+5OL"ˆ8%.Y!$2"TecAw|iwujWAob_3J汷EuiHYOe}[.bX1n9,e\>}.&Kdy||}ve9hAYgG]6,.Iu\Siqq sk]O w{]^cYChiwYM/5~|$cLz{W%Zp+۾N[o^O_6_47Phi^q';r/K)A&A7Ż!3FJxov:Z]FkؾOԸftߺBɃ$8{ªI7K0]rcǽֱy6;0Pb tվ﴿AOͳ{~+7o=~ k4f8WOK\5mfJ^_M]B~ݿw8M&é:uciq$UYF#/4%t#;Kcn̦eh${ "7,s7;~繋ck8jW=4.k[6[OtW:W%Ǜ}]'im߇FԷ;l6WNQijbڤcik٦ߥ#.9pSNNm}ut&ZnO)-ϵx^8r' 7&҄zTWLOooH^B)E JA%PA( 8󈀀*"%U DEQJU@@@P*&@ @@@@A(@ ,/ꔽb7%&0S-\Vk̼|Z'_s}5W=CA(yꊪɓ 3VDftu<em̡S\A$tQW?u8Mk*u u^4K[1gSп+u/y+~ ./i QpGIV?%]D @*xfUqn%hUѺ\4yL : Ψ8c{CGU}ƪgX>]JHX85\ bI\dkK9V` R("-5حaTp=ɧ%}|Q=g@5-m=s&J{MbpkoLI9zOmg4lwbsjQ_WS]uOv~ݼ4`hy8 z qdÁ],{cQ@T T*hyn۠UZG9Lc_1YtZbu1̕4 Sfde{t2Vj6wi PTwQr瀼1 c ( µK#qi꜉V9dYR4]"66\[VSmb{nmA{FUrsW[j>O"S |:gߓ_Ti$wks۴n/$hh~ǩzba,QFs;ū^z==z<3]~!էּ/f帑\o.oww2zJJS lk4 {W*.x}xߗvzk}/|csnue4`K?{9ۗ5z@@@@@@@@@@@@@@@@@@@@A(!$;K23M95M'wwn\$vKޯ>ImCj1rn(2xc5s/9|yP ~OzymXMq::0u{ =+溰nW mƸ+f("y!#Enam$[S¡{o.<ogy!~ƺX ~!ğоwqJ[:!քOҿ1=<527kh]P_e}?Cy}c̲F :1½]%\-\IXߎs"U%њ(ZtۨvSt+fcc,,:XYϻͽKl:vN^yu\HXq4b9Xߏu&{=[.[Ҿg\'[Z{{EWę6CXKZ d>y㯖m.}k%Ɇ7Ks.oK|Y0ON~[-ٲ厅tZz<5~?޹?̌v-N2*h>ՍתeGx*.W(A  @PBPJP*UD?됀PB A%P@@*@@@@A*DB A% B @AvFk3[un0- y~?)LuԾgL|[ܳ?o^as[1BbkH2;W=|6WqZ?Myk WW5!8q:oϔT1ZK[Rj(WVNx"kq zU‘ECZ]0He)JqYYU4UVR׸*,Z@#TVRڞb3[F *^Vc8+c6 h Z[6bIÁ*-j0Db\@#m!_oūu>f8FkY=-Z0܂$->*qͱvch09סapdk^mHk^Y.+FcE\G)69d3ݙt ] Erҷ3svͥ |/go27wc=ѵa5u=An򷹹yUYYTB(|{ZzBKw]ѳk}iZz_z ^5^ۼ=}вSn=9:m&.9Soߢ.Ryiy}GӗrgVoxh\%KiQj~>/m;ގfxIkZܦH/꾝xgۇ}n>(Iʥ{=߇yvǽ/ճ3^lڷ!d]S?||r\`[E!Ȼ !|7~1hxa@|mǷG8H MbO.uڌvV͋ln~}/WHZjUi52lk\d 3kmk# nYu9z};9ہ_SJރbAcq%q|/W5gn71csuyr^~OO_}gHm`-Iڱ~1a?B]etmǭ^j>}LEm=M#9<j-M:&^gU}5 i.M;uǹн4A~~ɉ}ͿgkcWtAEddnÒJ-m2F9Aqͼlo`3]?됀(% A*%PDJ Qz*A*)TQPaZP@e7tּ+}elб,-n$ͬTtϳ_L_W5_;ks-0;A΀Uf @`cV\)T rL ,])AAB*2LWUW+HYHN=_5+8Žmt0,1DeSp@-#VDzDaq\^醱z R?\ RDkK#܍HҠ'6eq"QSGxo8`z&rƞ=?.>^{<ŎqtosAqkIۧxޙK.PJ W kBfƐ3C [u{.,dW}[~,MڂWݐSmkhh'v#@Fe~rJ+*,kh(*,0:ԡ[b8[i4%qUX8 )Ra^4 ¨06nkNY۳6'Pn]8y6mڷjq2sc"RIx-Wmk/hu87 `+<7=FK֍ß0@fV[!o1r+>r9{% 4#.OKϿ%7$s=S+tkHTA$ˆ!   ZMHኙm`|D6~a w~7맻k8CM5tǒ|گ\'Zm Q}fW,\R+p5QQApz7]NAﵾ8NX4u`?דiٿw̻t:9$Sޞ8y5q_U(!(Qު%u+Lϰd pڃx3W^qm_R=~ž_ Y'3WUxrۗ_z'hp+]lMf4.(%M~WkKaEVҺZ;X컙%=o<ȅ5п#KumG đ,oUP‹XY (\uF2iЩmQ2-Mĩzߨ}8Qc"if"R}RRpn%f Mi&k(FbĢ.g#nk!ҫ5*1RUlYYJ0KFhv f5Wm fb >j75kiG;;m^ѫ#Sk D.>4[dܚ7hh#:]z34ugTSֶ8 ֝m97!l㻕3Y+YvDITApTyYDW ֦]].nrO OS>/j_<f+/Ǿhju Fŵȡ'JFt#2B+Jm/A")c;F0Y)KX;;7"@!)Vn7&w R֫x.Yi^D(prM7_K4|h,Nfǩ۶;4ƚ_~8g"~V]gOy*8W^~0hZz=~\)*6݊NIpWiů_מ\H<[Ui_.1ݩƝ i]o&_%fpvuiN5[ϵP8P2ԿYcUNs)ή%*%%tp 'YHൕpv\{mͭh} ;h]4ЅW.LX{f-5Ci9T/}[_s,fT>l攌}?V%Tm•4Y1D[NBڻHum]|Kz];j^YZLL5U uOv0 ǍH^ -klukrpFk֨AבnVY^s/ľVſٞc%Xp{bs>?y.됀P(D QA%P%P@T P*A 34`mu.5-v8Kw̖2=GE˥|_[:~Y3sRt /ӓ9"aaN!,يe`k 顡+ZiPV"dDi?R 9hHdeVF2y Ud v5T]%BdY;IrJPn.PfpOMx H܌cAkՄi͹E PW`U{ՇwBxN!\k%d %1*Za=Fpg +Vmjͫe\*m\v/^)~qjp A ·'5{qv-ʿ/L9=kaΩZ}Stenي]_W E8V7fF}ZD@ MARFiWI$xf. 4vrڱ `u Itio-@y8 z;uۆW>^^nż\9qݟuYu] K(cQ{ڬ^:c_/ܴDCNrmc\cckyEGUu^Ϝ^<>BuI<\B @QPAQPʢMPEDB(HTJ#=rua :Uq✳ou TCp_3z߆0mhi_iqz|_:o&?af[_v޲[uy yoyjcTPT/?'94K߮;aϽi)Oa^_OxW}rS/kmi$ok|[j\[[0HhQ4RS{tbb6_s F"¿cދA!uykN׿O/yu3 4bp y[-狏 1qyFC58~K}nd`BM6 n8dUA(!T P@@AQJ*%EBU !   ͙,[e/%Ȝ'Yiz4J(\EOW.OKu4`DlцW,OA5l]^nt6j /sܺ;]aS-EyӃ_y|ls'n'.. iK#NK4Y~/Amp'qLL-_+3yGcXD}?mmrvsxJB##M V˱t9]"q,L3S5|dZм8iغ{5Br7FoOnsm팣̑[4ېN?Y]3Sp}^ 5 18'\]9z{^ۨŴƒ9u~{Owtf6A{' U=8Sυp,ǏfK\^o:{uchLp5zuo3?f0S/KiEMFjYY95Ơd5a$*TJӋa-%4٢&ȴ]F 됀PQEU%DIA1Ws[v.\1U] 4u7${!].>ȯ h=qZ7?sz}.= ;UZ'п.vhyԣc Ҙg4@@J,Iᚃ,Q9&,mHf/ l*[v H9bHcnX r8VlgU®AI.MkWݼeZnpuqN˱[6-48 k<иtlޣYտ5BtWEG0%åoM8R}"&HjV9wZQɎZv-V촼 qArkki:\oG9~+JE{7CpH57ENNZ @Tk\*mOv?.9+Ic/lhז֢GXZ0m5#h}|{te̅F4%ԽI *8-:VaƲ'ftFh42acZ G0i$\%=P^P;-۞&Fg~(֎eZܲ`9ԣZ }i6nk9g] 8/[8)2!ivq<kWm>_ahjEp# ;LӁ`EU=F1'Yy_YIe;{ ?*q7ij0-UA @@@@@@@@@@@A5@A5@PB A%@A&!@TJ"jPK\Ucݺ'!v+7uO{cq\95R.kmv۴t2a^Mo6]4.cq ӧ&=)ӳAW &vT{['|nGpuΉ;rk6 W.`D0m~*f8yy>^o~Ǡ%PZ*_M}z!U妡 , L*50҈TK]?Jeq*QPAࠅA됂T Rգ1E>2E0+P@@@@@@@@@@@@@@@@@@@A(!J&L.+݉(*Vݔ7Ҵ9.WMs0|g BoYsts #H;MKKI{Iy?ObW>aF`Ǽ~_{p`@>\7-+m:kS,±&oRanÞ `:dyw <(.TU)tհkJ54@3qZ.iQlZ27KhH<gr2VVPKXvjK9ws[w9)Pl/:[GRaFihđtVfTRي13rKo$*Ҙ0߾stAQav e!#f R_" kt-'a\7J}p!n8-G.9s-shi/?_-^O$_a D6v'_\muHA\bxo1خٵG ON*{ܷݯz>1upܱ")5.8֕ KkH0s55N"HuVc#j;hjsskRkr_6Uą,sa1ƭ+8f%ViSUǷZgSڣXэhO;$6{PK}.M\0#ҕYƒ^ſ?>_wlehs0`tۭl!Ja-%Wk M",eÛ엣\rk% \js*IUQ< [ 7*p=_ɶIfO>n 4q+d7,ǯUTQ("*J@A4@ PB @ TX5T<1QRfn< 0+:6̗XrhZm{&mNmnIW5'u1Q@C=i_eH^Ō'*7_^{iv}iE#5ᖕwaB8Sʞ-X9|o4O-^qtu!c+/=[LޮL[Aqe;DSCU"(<`pYrjap%iJaꖜ kgZ;sS+z p r3&6b!rΝ4F`sVԀV\ \Uj097CqģD_42f*_~60Zðzonz&$])ڢkxSȜ&L1[1e-В[p_pBA ^פ\J6↧ ?2k<#_m4:8 g˒<Vт `wӳWÒ[xw_Q%EB @@@@@@@@@A5A ,Yݕ/ IYyfyrȲFF:H$*?|ӊwz/6R4^-y6|OOaI,puSW5{=?iIe('9`9ʹ_>'^k4V%ucK@ʏm1*o+c1h?ܿAݴ[_o,߃3I3JKW֚MzN.X=wne3ْ}Gj{i ɣAʻmgledw?{5|%tNnBc:k<7_. 5l>7?o/H-cAPjs ſlon;u&SY 28zV$yy,⢔,VrinƤ(IU•`2C3Xj+ޙ\G&A5Z±qҘ*JEsE0Ur܌95;5:m55ZaN- *"iw2±ʺ֪e[,hHUpّσGj_\udž~M pN%sw1y8֡qu3N$s@ +ރ_)sBBD*.\Bg,6n9_ ec agkC; \m~f>k|MM8_"7f$ʼn8:?ɷ82A8-Ja3C9L@@mࢧAе2 {H--ÄܿV!CpZ!c\Z5Ϯf(e[+V?uE]@?R3%VdDÛ'iQ˦[kֳݲZ#L{,/eBXC\*+2/kp~gV`)3NWز]ؘc:KS+hCZνvyo5ײַ둑_\y ѺףAZs.d2uf̸ߓс8~?㾚Ny^ZL8 Ҵ_NMy&uymמ? 5[׬v{OXs;+}Syfk%8S_sqh2)Lhx,e|_5󅜰)\*2~[x7^}}VDPH0 *;=OƇݬ ƛ[)ХiqC-c 4мkn5>OZ㒪 P^0PAqY`ƶ% PHU!\%k,៯Fh[r Q]7{LW6V^Iq|67ۯ ΏWVe~Oz;|sz'+m]9Ċy+׻e'lj# r)?a{pK\u-\vxː0a e߆{SӕBuj^axQZ)$ÈU@{\U$"4qܷ. ᷷19^j@)52C"#%:acPQR7UY!pG` pYK2*@Gj+m% Ny"a8*H@.`OJH VoдVB?3\K-ϸ/p.:w؏nd2=.$-6㣁#"}]5÷foW\ۆ g9ii~^Iœ;UHي1擀9c"᡼Y@Ԧk5o+\ +"e.^CGRQې_[}?-?w+zG4Ӌ}UݤQEMGb .׉/}Gky1}xm{ZK(Cx/e]<(緫; ^M+3x|{w)F}Kc_H^H!%\#jcuea{j;&|n>,V3vX" 0ie/smsz[+z ZX@\-uBE1T$4$2kN^lpÂIpy[RX[ &.Slrk8Q@;WO,Y&a%-i%&K &ix 3i/IpVY#j(Gjֻ˃}ˆ\$i:OcL~?_kO{ߓGgI}ɻ\QZ[L1&Շ?/-~צ.b1ljA<orZmpT~U{==cxy/(" Q# (+ϱ*b*lI"|}~糞\9 $5ۏPB % N TJP\+Hp̫px]SU ! Qy0Kߺvݵ[+C5CqcSlՎm,3 R֍exa޶+ɩSe,en O5aΫ+ڼv1V[ffűhksÕIҴjnd5ӹ"I{|1T!O]%t ޤd7kVurQ7Ҩ ]在ؕ0YpGТJD\9iǍBjѿCbhy:.8oc˓Me {ZN8bN?S_ETQ,0X{Ǯ& 級^j3~zq~/o\AnexFUpiҿ >&3GU v} X=־o٬nׇ5Αch84]$yx 7)3i3{o|cP)RY 4ZTW,ǽHT&slfŗ-ۈtT#EVr=11ma~&W :6-PphZмTJ:%dt35׷VY˦f62@ 8%]:#SMkjÓ6A'WN}moH3Ldq81ЂBTWet.nW!\>-q틏{kMC^/GXPP'БAn41OOz|ͦV/~LTJA(!hUDW 8bW>YU_/cBnVVBA@dTsç".| bƅbAZ 5nۛ@F|2&Y e[<\+֬s+K\XF=.=(FZFj}\v'K#5Hi9::^6`ȋ(hs[.[L1ۻQ*^ssGҝ^Mq9khpu]alb]ط#9˝u6j0-xʗV7[qq S:N/YbݶSGӻ{Zo>̺ߺ,/ c% z} >#v㺲Pᤸխk#y`lm4UW>2xV\&ѭ51P09lMm^i%KXڶ{1dlLq{L\Y|EYwݞoG6]ڻ%t5v[ [n?$W {hEfO!x VfӊH:d oTRN ԟEۺ/)CF4ù{}.gK>fq'cYi%^a(6ou7/KcҎ0u _WњgtQ'SGk.؏拞,'ovw:< B ^$-: iǔ>𵫣lt0y̅9%BF s&jsA&@@Af+{wͽfG weENMxv)t^^$@0]@xͿn0W F;+ˈ~|_o}mz[Vmmk@*~j|OQ׷N=5P0Oh^L=9?\8aT^LGZ:/QlFcZ3 qhŝ]R((1֫eK(u} h)5nEt :@aE2.%BNTo lsf~YPz6s*x7 8\H8w iWǸYjp¸ұZ|33 u;F "6]rb=``&luÝoVUYK4#0T;ov m=Xc ;y{t}^i'69~QͦJX6,O2rCýsIz-{hya"py{|_{Qkqqmf됀ڍ40* *, r5%Q`*ᜲW0+G?$;ἵLL`9F~+_>M毿*Pµ8nlEَFԫ:;6§e,:ekfKUϳ$s@"8g-as VWVG6k\x t! ZJdi@$,(߻RצʴkcmZ"Ć9`\8ӊXҸqx,v|w;A~Njk6\cItQ@(:^^u]1q 3_TgL6b@Ư[oZӣבca8fTca7ng(3W=㟛y\>"NGQִs{ k UA*A%H!tlQ4ĜLӻl_-z۷P:Wq<_?-|yvX[ G8m|}MxƬӇֹMw{YZqJVLpך}ꤋk<2`+7BS3S-zPM"FKyH8~)Z 1=7hdoh v}T{ϊ9sd]75kn_0>}zx$(8-w;7.אj51.pqWqoovZ3F]y|m:=Z-/n#ý[+UO9ftNR1)ЂVF 5r5,qtM_sLt ޵ pѹ2V[rU׌ZZKAė9BH~.sGpuw|b|_syf0FMC]_s_ofGM/{k1>醲%$*3NtUѵMA]ɿW^3p7TU8Φ}[_ë>Kxkvװ:h/:Hd:Eu 3>Bï[]4nS,T\kܳQˈ*Ōqh?O&sn\\޶G:1B;OoVb*B|rI.Y{^BC5/E a*jIhdh$M/j%”UGqB WOaMmn\@ŸHk} ?kv@%PF+/tӌ zi紟&_5s'2bA%@@A *J U yRy;fZe괍9c4noInf-X´fD7Atd}+Zl},T.?<~>KyP8*fVѦR# Z[rλ0ߎԻ?Աk;Ei)r\vjHd&-NҝDұ+Y*k6u)Z`غyۤ|ͷmvtҸs~ɪԏs\kwEsNإyqyQr0ޘf[3iFV BYV6Ui1kJ7",դV.I. Yc0yr9T}sFc[n#gv ;7}w?w_9fr\I'55a&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A5A!TYDVm!]c!<&sٿ{_~;>;NOmLgKwN99iWe__#Nϡ=otJ9Oӱw捏PքZŎPecu qǑbZAXI F 6<G d0֣.-É-.૕Q$0[%l۰AnVH-SMA<>Wˮ0@=.YjY5d9Gq}[+~?}ww/ߠ`|sxc^aED(&D}_M/`80=pWxvw;(YZ=.8軾e]᳽쌀^@Mhяh}=im^A}1*$ ZBQD~ͫywk<zduo25xWW:c5;r0M& fs1f#*Rp\[fud}Q0FJMZe%ƦjnrV$nϸ@9L8mVPcLzXk1d`|PYs:EpIi49\9Hgxq!R_kZ魐svZw\(3.2F-Hp9u7yyE*aE{0D\DӆC^}чn}IEC[iF;uvGWJӇ8q_nTL #p]w\:-ɗny%Gv []\k#ţkveu] sH-ilc:p QĂqiQֻ]zˇ-|ykXuG!4 1^NMm.fr(h됀B TNS+.WY|oRZuq~zx8&w}(&(`sMeFy?K[rwud0q\Jey*WH-Z2~UY]YYSNDEr4Uw9D(Cd.YL/.k\L4PC;rHI[\TGAiZÝ4ҺVNZ );:F+PFa!{8!.!}1vx/8v,QA% j2-㖥nW;ӆ5^Z^ 1nZ/&/}W6 +kg/鵝+[x3:~Ǘ]r/E۞h+s fx#W:ٞ8FhAoy/v.4}4up3+\ӿXvv$bT8iash1 ٥ׇF7x涯:sy偮=2چvpW=￳7?KD"%xtNa-#" m_W6WH rӋ]>ݢMWA%TJA (PDD D 7<Ƨtg_}r' JGv/M|_'[=hh,+c/Gۇ#r=DC2*Kr>k1ߚ+LAa'ek$qxŹ3Ww(FIU@c'& FMxTRaCOА" Wī:vod`=-[cs5TcǴ2<+J+Ѷ؟oS=>m]ƄE{̱d;ƊLfteܧin$zx.ufL18b B\ra{ݩkBܬep װqUE䗪TzM*:.^B]:d'?OmjZq4kև G)s]wڙN^1\zXI?ZXY65f ok.{4,Ĝʏ>ϛy|gދO9皹 ܂@E!EB %TUEH(%TI ٵHb%i#0Uͦ+9=m#pQ|.cmzJ{2<>JT9`;3ѹ{8XkkLjhq-Q,ϣHbֵEXrx{Ybdʝe{T$x<8UiʿjtdƀEI|LC5ȁ$.io{a,ތZhXi .yL#6Z%*G;-ltrmz*ۛ--`gU HT|aX58 F+]&SZ^i7 zf]7;QWt9Yh4Țp[˕c!ګe̖G#K9hUJ6˩惙9v+\6ї s]M-a# Vx[kϼb9\%rtUJ 됀B Uh*ZHе/|k.+JgW~ms}__&D23Z<-n{wz2>3\5 >bdb6mYdy hx\: N4J3\mqhq#{^ʒvkږ_!6\ݡ򶀷GEنӣAq¿c |EZ0do)*^RՑԎ6apn8}hcJaY G_ԡWZnl׻dUcV4֧]8/6:g}[5P S8u˚WGAQA% ; V㕌`z&\|wŬՓo㦿3Nm|[<.׃>9łFv<؂+Bnߵ ގlt@ -§%uVqXi'?YO vqnWOҷݜ.n^qɷ^Vu4KRig]a@q+8jk8щ%V^4x݋i#a:S{5ގu/.:C#݉q_ED ! %@@tk Hldq!زiJS2{>?WlMZ+2˩(DG` ^/D, JAT,T#>Yul<遦+26W=miīgm߱[fFAXϗVSL:ycÚ^ETJȞR:s&G\/̠ܭ۸~l1Mj.ul8-k$6cn;kLZ\ף~}%1H=ik\{\9%ۦjf$f=+ݢYMa6Es w6J+ ϳr2rˮ#Lk s'%{eK+Lyqj Y*e:ۃOBvf֝쎤)\kMu kRI94UW[K'YΧ}f}N#%Mpr_餗sU됀ʢ@ApTdiZa5_[򍃬ɯw;H_<7{p|;clVAJj^]^ѡ%!]m-i8e;]^N!:x(>>%6mM^ψ2ǔ#&3G;ƴ Z dW6wo,Y#^]k6`eܫf00FشeUH pSe]KZ29# mĵqW{-fy^pY1ux2]4Iю[\i~p:[o>[<+@@AAA*HA`*]&[jAphi^MRyZA٢'ž_¿oSNo='Gt0PS+aߠSUx֪MC#5>&IF5 -p+i۳FRجsڵ@+QϽɩ *jMM3ekߍ'\\.ߺq^]g~{n.q#$W$OcQPDJQPU .Ue ^@L{^_Wۋi>[7-hc{kBǮlۊ ] 8ԗ k\g٦q-qƺ}.WiT`Ӈ4:" {M%YY"@Z憚@':ebx ;C-ւְbm ;VLYjjAv,Z-p%kwVЦ]`ul6#.v G)]ήۺIlsǞ?ZfLPnAXӎ Iw4w_0"p/1ύjoHmSMon \ڊrҵn+ƴk}LŴGmv+X؍' 88K"MuWQvj\^A˟1_JͶіs7:(H%rӻ}XK!vޮ;o\K7 ;"G\ 0f~KljRim^H2 @@@@@A(!됀PB Y}4W *U+6p/* ޱR9 4N.( 坿ߺHdRh֊y"Ruk*Z ^@ƴ෗=}v(DCEp8ÜZQL֞{2f!T[;27 S?L-&۝,C }+Me c44-V&\,N`p/p{W<^{y}?ᗞ_}DQUAQ Q J@@@@@@@@@@@@@@@A4@A*(Q@E զj+4QXg Է<.&+#7e 3gܿ,RZt:5s~yy<'s;}s$kF#?/jr'G}6>m&) {n~.r u 9pXo MlzF #Yن嬸ak68gBkm(,fD⏄q,f(g.a}WLcNbg-+RSJ}-̳>o'uƳrĕ½U(('J!EA"@@@@A!!JA(@@ UB hY)-enXt7>K}s+ˀӎk'WVga; vcNaL6<TM k/0כJr3#)0AFG8-aG xM4F$_Cos_sۓx}rNrw/ǯƮmUBQ hQEPE(*@@%TX5TMAAf8ˎ%wf׬bsl7RJmɵ.ouɤP:ԼT4qzopA=.sn}u.+>}Y˚Y%aPҫUyt0ߧ|mo{Gwk+iLk<^{uGL fT/Z5"`p^S77߫S\O(#|]o'1׏oGxK7›nHyZAē{'cy}G$AC^=q.|<]'Y f;?Lesw fY,wQ3j.sf9`:1ro-C:-epΥb=R]aXymrwY$H \XIIppuga^O8]>ڟ/q9\`[h@@@@@AD QD*JA(!ED,j#,6n3mu<6ΚV#ѽKƆx}o'OG_F>6vq8d35tϏ<37;jC!.I~Ϸ\=s_{]MMx.j#kI"#ڔmi8,kܡIˊ˝ϼ|Nn\ӏ 9]ٺ6SB)N,LyZXUmaΧxpS^Ǿ]sviɒ4ȩa{iUfgK# n7/}ּPT|v-+aW}7kfܞlziO)$!~..' I J3\)EZ(Ң5TJ P (UQ@QDR("Eި1E(h R%@@A!P!D+Q%VWkJʖ/ +._'<{z4PS |Q]/wM77z5u$Ef|wμkG Ritkwy~y78 WX\[lR{s޽:I˖s.5) P"J Q@@@@AQJ*  UEQEB @A4A&A&@B(% DT`p\5i!a2iri[+|M\x&[bx ir+oVzQI- ?JiZǟ# LSX:@>kWnL~V/Z;0 [k7 G-/K5YT}Wj1 QU*(AUW)p`arjS+|m8Ksk\dw̼HÉsݕ@՚_wl{Ŏ^eܵ:{ t=gcOi`I gxFmhXL/Bzx *ɖAKt0g*nP̪m~=Y5Z#.H58e\փ~r+ӣo2  ~O/n\ E T( j8蕒XKNƼ_{䕯EPEQDQA% MA4@A% B U (!MDUU DI  *$ kQPV֌UxBbӸֽSX6`~W\[tɱHn k]eZu :V;Phj?^~ 1茿6":ɍ[Bq/?7Z۫fLʂm,O4fv-ZG1Q's>Ů  Bhb1I#M8១i1 `q*a2n5u}v^mlF:˳WY}ےt_y{tPSHWړn\NZZqsH\I\m{u`àઈQRD)+iU2!KU(QPD  *QJ *4(h1@QEMUDdZ*J-CDɂB *0IXi*(D PB P(%TBTQ@ UP(D (Q$UTdh5pe}H.-)5D8QD LU\j)EQPBUQD o=Q#L(@-Y/>~, vkCA+_/כ?OL{}aVy@#?+ v3ѧ#jwI$z0F+ɽ ha˵HMi#W,ݺÏqL쁮 Vk71.tp<]F`N7<Ʉ }z^95'V*TTQ@@@@@@@A!Q *A]6 9PWI_zK>?{2: 4/3SfE (p_}A(* AE(DP((@@A%*&*(E%PPB @Q9"!EP@J TUAA!DEQvVlek0[VX<@vF6 8zkŮdcMrZɡ+_kN['VlolYkY[Vfɧ/Vxɇm&^Gqnq$zFC})u>ۛN\vpʴFljB#8;^cЮ|$k'V-ekN\Yk<;P᝚{UN2A#9`"GKu}G'?y.iHj^A8np*T,#%55R! V! hںT\EA`* E@&PtN )%4DP SV ,2QT\Z\`D0e!!"P@QV-LA$*(V Pd*UPP SU-S JEE QPP((DD(REP( Rc4sPVQJUEB(Q@@@TJ ('5A U]aު*qÂU5QRI4E\T&2BHҢ A*%Tz(nqFn$q=zWcycF˒4eWѹ`})NoncKqʇ'WR9MuL\^;YkndcvVܛ ;"h@WIŶͿ>d-t!AiEMf:}nr!(TETdcHp-F,{+x 9~ooO}^jlW2_ok&/~he4`UwK5ޭy0i]@Wr*TTR)D PB @@E@UPB*Q * @TP ! "% A&Lմ+0bJj VՌiv⼞[xlG҈y@Tj@66b˩kߩ۹y<>uuboSC#ڼOVv{Girŕ [skM>*aε]+i40ïGܔ⼗˓6vPq^[h=^fg0\+{3}\G:2?`dA|˶ܧey-<2 Ӌpݻ5f ~*'<#̆%L$J& Zi:bkX[ĎH2OJFɥ *v" i4DB*TSJ҆PX(Ҙ2LM()e YF+Xg*1Rŕ^(-**q*PNjGUT@QLMCR TX PE(B8⢤ʠJҊ(OUE[IW  R. *Hjv& ISQ0Aj`ȂPH %\&Wr8,ԦR .Q0e-QPB *$ 2 -TM R$ TzPTA!UE(@DJ %T(AUU Uij5\,(UD9)R!E@ETUQEHU B"Uer)+^Yǘ8}<4VAg~ |$ =*6\ CAc^[xqJn\nn?kD *J䁦fKJᜅTXԬ0R(*$1pn&kve^q 9{Kޫm}fG#Hҵ>Υۋoɼ_u\  ^S5YiܾC,8.4蓫ͣ,<@䂤(ҋҙ DiJ`ʤ(*U v ET (($* KN8W (2P!i̡Yi`P@ ؊h@""DHU ( 5U-iQJfQ  *&  +j1ka(9YnE1_"qݹ{-i)g6a-`cc]BWSS˿h>^fpGW.[W߾_GN̖&$u*driLsZ1Era@<6#JxriwI<~]:SEh@<ɑ?~_KK~?.f]dꐯ{fF0*ŹQT`Z^h׳aQkV DQkQqg%>P P4(";VIobaT.EB @*&*S+`0UJ ಪ(JjMjYmm S**2[@A' Uق(@8(@0DAA!iE`%( &)i#aDE#I *4*īwYBAPJPA *ar*TDVA!LqC)"R#J"0L`,gK3bTQp9WMT\6F0dИ\Ie`d-C - `YlH$"%P@@AU4UDP"%PA(*wj+jU0ST8 *RZ" 4(U"TT**Qg"QW842kha8%=o]5uoKOaÏs/ZB^? &ceTshJ$-I"R Afq4V(@AeaeEEVH-3#ish$-Եߕ׶l4{k1-Ηpɡy|S꼧umtVx#c^w>8Yi|%uηLn:bq W}73{W ҽl+ƪ*E*Pp~MJΩn 1X땕CEMBڡ 0e&QPQ@hIEi$*PA( -V"UPHA'A`E*j*8 EREUjB@ @**PE2@-J*f5Q."($ Q%TJ@@@@"UDE. +ʳkz  ΫmY˭tU&DNR9 ۪Y7O>|i=8`C`Hte#&c7/1{\tftdǤB Âj47'{]{y&1]5uBgo}V\GdFLJ TbwC\ ,VUbu*JѲe\|Q0 LQbQS &hHVC~"4(Ey (ٛ "@c.S-MpUQTTL*QS5A&`*֒9E*\D)UBhefźRL!!2F2AAusW)WB]CtYh2Xd) Q@UCR.!PQDDEXQRڕ!0d +i!TKEUSd bH+J("$`ˠ-af4!,%TpQr= $0Y” ((US K,bVCʺ;Rxv,{Uzw D@+Qpk(V)DEB&@VTpQ"CJ[ǂLQPrTڄ2rDqA5 JE'P@UHEE4pL&U MVFzA`rUxZ#f?#{zf2''P9acyaֶ J5bt-&6ƌȭf_=FN =?ӆvs]q&<د_d6B@[RQfJ6'몠(V5 g,nQH5Qju⊶0@5*b PЮb" n qDSFH pL&Vt,} VN,+LTZņ ؓeCh)2p jN%Q$Wv*ub0UH*5YA5QD ITGE=T `jQ@!Ʉ45 *,UFԫ8MB&""!RUDAIR0䋔b QXm `s}jr5B5nY. hv+cMzj7Q5+w+w. 23jU+EZ )E5ra{ eBaBTU# &Q H5A`U STkqj^XFPKUJ*X8SYU*J*TTe#DDE4B(B"H*3NuRBW ZvܣƲ@UDP( 4JqA* QQ pDI*B((+EjQ`rU*dltjFm_,D`QrH^sc2Az0Ze4QQ ()Ke4J]ĩ0ec׆ HBOu^cܺmH(D4A]GS[+m[yq\Jn- ap>)O\NךN;D8A/ooܼu9}G3,Q -C!TFS_{B+¨-9`e-xva\,$ 3RVTUiLh3DKd'KJۚ,8Ê :e&#JBa< Ɗa5Hū}KQ*˜ʄTڥT4C(SWlD f4L.R֚+ԖbLJ2PqA-μ%I%Q`U\U,L5ˆJ0a2R YȡUrU0e< (r+- 0vR&iLH5Q(Q P4AnTCF*BDZ(Y f[جJ( (EEDEfYj܌ZjF-m0 7o=l۶W,cK\HkFܜyq|M/nmp}nRԆYG3[Z۹?$6:I̛f6ͰLS]WY֯z\GZҘaՂ{(nn':).뗚<2DK }mOI/Yfb-^akiItcl4հ" E¤U:{H4WŬ'UDD+AQV"U4§{P 2؄̊H]Hahdъ aZPZMj ̪H9(HjQ-C җ;?W90A -:%ЮL#YL;DT̒G0g eB*AfUGPX}jKS iL.QDB4W)PT,(6BYI%((D]QTɓ VR]\ S& I UT[XU(ppYE h%*$ Ђk1Ao{d=UKV3F0V%WةDZf֦o&LIF%,YpeS+F-1GM)jRrA84+-QR K*arb$,⭉6PUPhe2`TɄDkFlI4&"#B\Yr4!M$䩔(d`S UQ8" 4& *TiQQTTX+1㒲%c]*hRZ+LX㒨" ՌM"bP *((( `@Yު(sYi9Q:) !ARQ A\0[ ed$D Le!jUY  na\VkqBpITAsQr؎s "Z$.?.oQ5z&殜iɩ r]UEXCchA WW,ܺOz!`RM8.\ݰz龕>o'Oq|k&Æ'+ZypRTYbKuqe]&Sk/S&Ʉ%S E(*EJ`eKZDdf`X⥦YtK]L,HU,*N*䶥VXkSPAY!**kÊ<ڸQ UQR\!EAr(\`j2 g! 0QP TF E)\XK *!Qq%Dar*4*jTVY4TqZ9CLBBzL/՚Y¤H PFcvՅxd*EN * jJR"f0Ԥ*i#*. Dbb8sRDfU+-eHƎ㥡-=aخ^\[LpSNYfX\"ZP&r܊2LW LT *ҴmUWc{URH*‹67*A:0jCsi%@(DMPU@ EA@ڪ3\Fbx$-iK6QSDC,ArfECoaA"DTXB`h8b)؀Eq+EEXw %2K@LD '${BA-= 8ŽTRS fQR4GQm=2\\AdEKi*`j}*U#Af9˅*p[~&Vl`+Xg! ;ZLn'2i$WXe[{G9$:5Wh2R_T\HpZgڭIQV QbuNY+Yg9:|#?oyӀCZFUUTVhp[lCHrH,p"1Yy4e4T(Fq eq@j*JAT2G*Xq$i=eBN?ZYI* ( k*21= u\ƇU&j7BLPbP)ni>sze<<]ڿI^(EWIj,PЂTYRn"PP ƪ*E e2MIEDYH*i[^+Jar+riL.M(e 5\((<XvECҵ&**LBYY:Aja2 `U`(Pw*4 car0+-2P[EEUeJg]*Kq*&j*5QC 4amSP*YbB 抑DC\W #rR'w096: u5ުgsu}俟xCA+$duZGӣ_7LtGk)osZh[RR9FZ\EczxeɹWFI8^4+go^nYwǀZs~YzÖX(hj"ZS XKB˦U,:GP tYis.㼨^~Q4c {Rz{}>Ur`Nˍ}-pzq]}( 12EHUD{Qi MH Dʅ;SNhʡQ(Sb J*q LD2QP%S&5q LRµEU梪[\8?REEJ  JeQ-DKUI J*PI PPKhp%jEObЪ8Qª*@D ( "U B @Df Ĩx'ХXt *aBs(+N%FpYڦӱT 2afWV% *P4& 0e8B,%­* l`cRas9PHL.QN*)J*R*((A!@PiA. x*PZfbs9*"qj@90P(S1eGTVUQk%JEIDTcAb3W `]rW *%0ZU +ڈ@ 26a*囫%0XS$i`EE0 6"ФZ L*דk kvNZ8H!;ԫ n)@Kfp*HiekLgخ"5! IeePDd܏Ȫ YeXꅊ)ڂ-2ʦ)$ؒ5HbZ(SW Z9ܪeVA$cDcZYiW mߖ ig҆U-ǵE; 9Rvt݊噫Zb\붸Uh4%[*^A$C&sxथ+5pZ8_Vp+LU&#Tk7rW 8i R#x /Y/bW|\sHBT2(8-9Z XU-~Ld;k#{8"TI#4TdZj1PJE"$׽QŊހ\pENL9*e8W*UEAU8P הλjB3Yi8w-F*-Q{5P8d¯a*X QjNQ`H,R 8b`0FJXLh+Nv gĘcpUF(!ULPT-0ꬷVbڪ*AL֘4Xڱ|{ۚL1zu{#CinG=Kw#Hd>Gi_3=ޛc{\_w-6н qà ncvzɷۧg 6m:2Njƽ 4֯k_=5\HtK28 Վ7׋km?[ŷI d| ]$'eVYT0NpILKE )*\HV8HTK9|tmxbՋkRZ4(-EPTq )A`S QBiWԤJ`㒊"ɕ¢%CTX<`FXvYDЬJAQM8`LA:ULQd* h̨E( QR\P1TQTEj jL qQRtС+˒7 Pꌔ)Uq(Y)ZW$0**ԢH*UT2o3AϢZHQm 8,Ἤpʲ:O&k?~ĊM8QV(depPE)D^& uiln1FuKq=dkSQ@+hD=*A 㒨ӗԷ0)T*HcHԌɖi Բҥ.Pх-K]DG:)"˚-C5 ƪb`C) 栝E\EETUg+зwXQ0؂ ӡS eR0e!`Afj;RdQTpYE5s($bs{kRv̮דYj #5RfsuZ3C*K! ͍m1]2uRGEsYtVQVU0!TH!)h e.>c,:P" ar B)5**@VKx P*m2Qrx VEG.^J$2Dc4<8r\gd5UÝَG kޣR5i8cbQS,#\&R֖$KV8D.(,9ƕU0zInW sc܌:pȳQ.8ҫ.׳dZq"XqgtYS%\+)XX4TPe]0Zrw Jֵ@Bganj,#w2ٚyp?bgεt׵GLW0;X˸;KE2HVVh"|)P7{9kZ绿lnywu`gZIqfs1ʸ÷.b;ڏk 9ѓFnZzo/޾?ouۊ{w;ĭx_7NN-^ywV؀B?Sn?oOg]} ~vscҷ,pҴJHUtTarW6)Z]G%f+6/Qi0c0Vf%[B#B* Yh8*e~(0;%+r$h{gJv3-oyXG|d,A4{Bh8dKW+LP"Z >-…@S eGw,AI8+'L֊`쎇jFm_A.Ү+>Y3Ch֪JT?k\$ Q5)+L"FT.,Z9(m1BV3qn 0Ud&L\,n55Yj%bCULڌIZe:81v,2O 2VRA5/ -$PT\!qBŃk&X_ lt,ȫ"Z\3PUkL:LE 8o1fpdd Y+#7fJ)ZaV\j5Ɩ7Jі*ev.Ha:x0c{ ͍ʖ0DWW=g?0͸KKusjL/rfjNJvÀCf,!)^J(ܘgq482i8XHô XȠõM\9"%bVrܪ4aWe2V.+3y!W:PB+qToZj8,(88 *pdH 0@eC*3?R1ƪ1QSip9c[J51xqLb2yO,ܾB;`46 tN a唼8bV%АӁ0fb5AQSQ()5$n>+Rv-Fj\'P04VYSPQDZf*(ejaɉf]"-+0TSA c5,Q[0[qq 8j!(a!`S.F:rXIxϏ/%{R:[͎m3a\wr羝?ս "Ꭴivyqv,?nrͫM(ڻi鴓{\fǙӵz&vn1S Ddj]3"mO2e3NGi(-GFYrs]"ZԐ %̣C5CP9GM݅ECSXc) $6/Y|tUúҠjSQ$ `Lt`#4,ǵVmx|m~I݈o 5[SBhM冊X޻AS :jLP L#L&Q#)*Ub=X:ؕdKLa$t50Np@UE[JL0QAުKiT(MrA&%UePңKL@+R8Q `$62A@(  =KZ-h#%Q\bT;Рb-Aܬc~MJEpϟDKnփVHԱqЩlEkE\c-pk!k]ǽS8c8,%H[H5'D]!*+R4e:-3kڢq1=YȀJs*ki\8ERte(cňF آ;%dfػM9*gIUrFQIYB!ZBi!TCXrL.Fd@Zg[-.*Frӹ S xGВ&Xmi.%0jK`(FPSsqnrkE\I%YmCx(UYH#4[Ցf;@;*Fv[G]E\9a!TfVأzca#@QmYծݑеl0(pr>*U[n Vuݬ]4֦fTJ"ZTDg1FGܣv?BӍf0o2 'ثVXSJ#ZH6 桂kG2qN*PʅPu#] =UQ2Xco#j[ b"eM*5FA3ErnjYJgުI7`pQ#: $ ]:8 7FBG1*.4 HR5+q ت]40P%\3v0LDeH\3®scIUkYtO*;N/qĪQbH(fU͕tYC4FWZqPZ,L elըd00*Ĭ6ҡGLLTE>UTGu0AG(A5AM-<o502LAb2)1+:50Ic(0Yа& LFU0e)L.RDem5U2P樳Q)D3$*Qrojk&BqiaE%[xk}7[VJpEH%Y\nkNb VqDTk 8:dbVUL75A J`(!^u,Ams9*1R{¨^ MM||Cj `} hJ-\*XW(}*U$@i)Ѩ"gkT\[LIU!PC06&*pRTWFGr\ L(U5T40eZarUd-?RSA!H 0) sF5D< 0T V,…ڹk\0b\9 Ĩ~3ШZ*J0ʽRA$caCx1m4b)^Qbfj1s 7C*Y!f1pL3vUqn)bŠ7hZEQVpUYLT"u*sp LB.MJFo]`uZB ff0(-'ңHʵ(W0Fe!h58!85„!3 0`19Ǵ=!/)p?Ro3QjzT\smXq<I>8jN$gFvOjkb7vvVH8,v05*zLXMZ OԦW#õUTFAQ4.՗^bʹţتelSnjۺgڤmc3[(cvA-)9YBeVkb4+3\ YPjIXm8ٯ,!ce.nձe+Xr,AmRͫCUy1|9*a&hP ደ8F=NdYe(…pQV UfQܫ}(tׂa|Y֍h9fS 7GlI#BlSKNF #Z.p##-ksQվ&F rzS)*jj5qQv>GЩ$GP 5EAy<+W% 26GEl8S@f0C+G*8 3ƴr9O$fmpU넂(V p%JMMV++KIJֵN!5dNS y sP V ”# # >HŊ6j*ɨ05IX_Q}(-4T*amF PʅQA-MQ/T2r JT4DZ܆PZF#"M`fhW µYXEYTCĚՕ,]5U"z.&y7ؘ<*aXG2WU8(VL-5q%InZTQ (H^I&#YKgء0WīTX1=A=XxQ=1Ra^LԅgulWsyn+]RcXe4# *u3T!V38E0RL*vؐST 4PqAn*2L'0AAaU0eP0YTRh$+@DNy*֊pU-deܫ LXGJS   jV2fX! *A&ʴpTZkUw`!-a4̎LD{S yCJyFʽ*$)WFhJj\GQT:T*C8a&2h WFZTʻ@ c4q 4&!@J'/DiĜLYM\B1^tBkצ*λ寣BIe"edcK@F-[$JՀpBO` 63 ӐFHRq(yeI {7#[+U2ߎ;iUrکxG#0_|( * 8j"1#AT2aQFM*jPYxwo-b,n Z(|HXࡋGi&+dD> W.噛jqa҇u2Iޣ!11weԹ]Y,cmUqa4 ,My7B7% D2:VE6G0nqM%]FC\NJHC,f[`8Tvn Q  d+#Ћie5BjŢ>Lnp1{`F_R3 qb&b™S8XS*u6kf\P+h5iP UqXJ7V\ADΣR>1D3W.*.VQ^1 uExL5ܔt1=I)aL˜'-m.p 7_ӫ^S\uQ^`cMH2qO(xi?RSY)CtT޹U)UmfJkio+gR4?)ƴօfj`z\Jcڃ+'Vugd'b=b,ţ"2bJqFp N9݊2 &Jig*8B.Y`µMe\LTvӤRqEI5Tda/ʼQӪ1TjYPWQsr5ż*9V' tFD \jvd4PŶfvJ/bi8*זb@pEna,\ ^VJc@`لN*:gx)-(@P]VdT U#dӀU1N9"]YdpL5{i$fs6X'%YFE[b3%U19A4ЊpEY.PMrEk4ҶX!ZIwkqrul?dcZ- yxoŦzyCƂ*bU iF 3yTqic|EչjnpV\z1g)l$SB3EZ8kf1>y k#ish/uesmQ*##q@$Zwf%ݮٷX$j4|z޲lL)76I%C.>/Ujm+F1r4ൗ?ʧVfPV/vWyٕx*oVFC^*vd1W5XX[SܘO5@F|h94pBmͥ5QFX4Do\1CZ4L5c^RԺYP"MGf;I# EV\P4.oO *sB%⩗I4ڋd{Yqӕ;S-MV5&LH&0K#jʊ¤PJ!udhzU`Ƽh:*Tѧk*Qrך0+:X)S J0[՞'\Nk %0yG+EfNv>&15CĪndjmXE{xUWZ]½ج[ŃA{Z=g4袹'-d590QE]e{u`()Gr:MĬ{k]NpC]lSGNʘEʺH]3bQTH!0U\-[lv.,CdPi糩̼ie;}~{=hysS۫Tc?6q-Nmv'n)Bc4 ͶknƃJ⎳kX0F#uc3kw`H6Ln׹=׽|}8Ǘ߶݂]su6vui6,eܵ-qtF?s=~Vk9W$ǯ_gg}=+)]m. Co$za3OzG=yx45o|2]q::ݫj>e-ob8lYlAk h!ļ?K}(~d7+9eWS[7^6ҹ'YkqvEMjx+ti6k{9׻EՌ !Gp«RukMm-sѼR{KN9`ԕlfn*ۆ5֨96!]5wL12:Sɵܠ~5'F8jc%mygM0[nkMm6vhuo36(L6y}q6~Kc>[5xs:=@yy[,N|W7I).#N~U]zom/d7D R5hXz'inbUgMb zW_4cz>do=Y#ܬ.v#cs5 3F}^mvXv<֚pᒬe$+ qpb1fCP0|9q$0,!;B  vd|9a4 ӱS+0Q 3f,wVVļF4(ֳZ>F9&f8m%f[\hUsa4Nn ⣮g4n@AUX|ϸ 毶5hǨzZh˽ "S} %SrSKbݨkmsKkM> {ϕ,w_3IWΓoKzy|#Ѥ~޿-]l֏trGr\-c>VQr.E͔U[&GjFoowOMQߖ *6X4v_.7 xsvci^۵˩gc^^Mou#` X_ָ|z"cќuxlޮ^ݪ C $jn]G|27rۣܼehalrF=I.mo7xy=^.5vׇ{O-m v Y8;Ԓ:5ѵ[y<ug"x6%z/\>/Sț$pK 01vO9>^ Žs7ymٝ)Xo G c\3T<Oz稒f KLm~,Ln wM16񵺿z=ܾmWrfnڿVj :_sxm6^n$bBO,n~,)3;q{5z5e|R׏YT-NtQ6KooR8H`՝Փ/]Nyxlk;u:ُu+L?sX,:[&@a7湼2syA}&F\dk D['3:_?$_;OUfz/[2y~{mj tgKk9h}o kͮ%pێHJtgznVh @<×:pEi/b$@@¼Q}{yJ}"a.nze׮MOsӥylͽFÅ呑L&^~3[tOX6;-g3u`3vg7s2=r-m}gG Tz2> Cu7SU'RQE 5FR9҉uqV.Rl4 \̲5#2UJaVtL$gBYXfiߒ\D9 åO*n>nbٶ]! h ;kW=LmuF76ì)#i_̊7uYhx&û̘n 6wHyc $R4`xkIGO%.(B:dVm@!-wgw^ZXI!Uk  7)n'F@F4hdZ i4u*sh!໑#["Z1*W(Da#%s#>sna025cAFʽNtm3qD`s=s/O͡pۚN{?ݺ{>+;ys ,dQŤL}G>I$lOvk4i^}Uޞ_o<]#ͽ68X7w2Y鸆Uo\LN=xܸzο ]o^8eՔ7ut"nKX?[Z2x=../\y8n|F[0($e%{}U{kf k˼޲/I Я M>+^9> |&Z&Ϡ|_O5jI$_S!s܌kɝ^;3< ;ͷZDcd=Ko<\ܯkxn׻Y=^aoM٭,΍e'&o{&l&[׳ʏ3^֭۷IH>,5Y/LNͣ6Wf=lqd=6ތ&IC>Yѫ+/t]tóy2[崺MmXgs=.{og|~-Gv6㕷Xd}Camg|4ܬr鶺37ߕ^e4}wmoڼ[uq͆a6h Һkf9lõ2,k] C$,ag׻6S)C=y'`|vcczOIUᾫLvl콲[imsu˙shC:d3Dz/L6vK3MܣAԶ7:d8xW7<Ǐ]i7;-ѳPvѮv5ϓm}&s^,ߋ⟼vOo$,]b,,-"=kY?+ +'oO.s+.؏ ̓mmsn2>Dqe!5"FGONlн_'\6輁B7Z{}їKjN\ ]kClG[\ N|5I6ޫN736:4O'I{K>V}=V;rl춉a{hǰN;[}=x0u55%kZDL`o7MNmz*̥y {-1/gʍ12\W lE%4.N+W]x8g|[#A3_oזQO^;׭o:-oG_Ҿb#tՅ Lp#fcogĺq~.[bt^ sG]>whu9 EO_lyN̈ʋ<\xlcI-q#Fs 8{So7/4I v}r:7i0Ԋs}3ZNO^ke6٣Vꗬ:@־mO++wIgf|;X Q\u@'KNujfvyv2?6n v%9c}5gmy;ߖd{#K^>Tח]ǜx+1DSP"z5qRI)uFѱ*c;t_{I.M6ba ȵ͡Ҧ#gvuh=i^?cAۀF(;k` Am,84+#5#{n.adBԼ4:NѾ\2sx^>]Aw.FcL-&pӦ^;<>)߅ =k?.̸sM;88vzo[]rfd{mu7ﺈoo9 n?[_V>[}=|]ټ2hH nF葝(e]O/?<>/ifݶ^Mݣ_1 gkZ=]PҾ9#N3vxoގO ,q;w! TѺ-Z%#WN-r_ygON{GB#l\эG)!mZw#}L:*yKe[JtQStN]w~;=RyA:ηvqif?Ku˷.}m}L=kYds΃{_^}nӻ{W])$ČXXoY/W;Hghi 7v.voQ+{]lc}]*^]6i pܬYpLZ٭v. c<-roϬʜ~fVd ȒLɬ7L,խ= 귷jpk#\k%nv>yZ QmxߖV]&oW]<|?vb -Z}V6zַXY>ok/]\!89u v_lq{9v`6rjR"#a +է5hYkz_ޢxV۾K9dtpۙ|OW.:;_W&ZóIHoV7!&6ikh{5?Ս8wgwYm&wGU06>Y{eN}D㘦~O|n ۽[ X`1&k54\gK-xle/ޖm{EeCC[$Uck;N}qFז~Vyo#fu BV\ٺRx4^Ghzkn3ӎθ}fkn &˨!h6WSwMh/gxvkoӧ]m27Wɩ܏BN9]}^d_gG-7X .o#*=|{s >FT4ryr{x$6VR/졞M-mm/6蹲0?u4z^/[Nj)~uM n߷0IDxa26~lԾ7޿=<|:#uG<;SY˫-:yvFVY\z}Nھ JJ-%:4u 4c\I?÷gq磷ȏ5m<\nYl-x-/Fck cz\|7Ynaܰ\uHzz:cn| l ZF^(~˹_Qqm=y͂{Wk4/kZO.w7]fc}mi bRc´[m׺:E#ggrF.Xh7,%4?X]We6:>Uyҷduɀ4ɤi]>77ťk[[fh=zzʳwvƤX=;)ٶ*mn]1k!Km3OWߚ㯿^Ww+~E(f6 !$\RBWfx)ŦݾוW`Uǘ.˻7b[+u嵭gV_rI|cn=z_|̿%mm<<۽>Xшaa(![~^yӧNwI+\A[}ͤrۄat[^W գ/WQեymsף*|;_">魒f[[8nkK5G^;G? {9\_v6n?U4gG_~fR%Ynfwm[,ptէ189Fns|/moßY}/3>fSLn{MThqͫ[mt/`:Vuiv8bq1Oez4w|}4,޺?OVjt]K55ۯgW>c۳˃!RG-筥ik4uW7>fh?/Z]GVGJu}=ysYiYynsK|YXI=/]Nbߐ>ru#^P1'fKZgz'A5u gB{ڨ^]vb|? ]ANº[E,mə-k}#hk49o7:15Z0{ylT4If-xeVzt ,Kcw3OVסj-9.q~5y[[[6sb8۾Yg^76Ep03Igwu/>^$|ol?(mv?ty5:Y%fM-o/-l=uWat&AXS<5қi!Ͷ6[N1-k@#?&l>7^Ls+6˸y~#e-6[,:[IԦMzՙ#>\Z\廽s|5e,I=fghӭX_k_%2[3n"۷xZ_[8sWKz F;kkuMv1Ѡ3\EtwF8%uyvN>-+ah:es@--^L绡42K8sǨ;I;JgtrF1ih!dbUZchht ?sOi{xD1 \\Kbhiu h5ms#t3s^@Z  lzy;ƮQ7\?iwIG ys\cef\_$nR9ji.fZ.H(mp>m%>6O;0(9 м,/YqƆNz@l֖V&&g =y3'4O.NGnneۉo,Ͻ=6(s͏S%:-:WOQ{wM'}ݔOFF9}_zg9:(7xekD\HceѮ=mH\<\m&n󗅷.g ;f'–y./C K#kl齞 <<mnm~=7ھM?.^dt,oG+cdDKt4{ti1/5߱_/|v$RԈa\$=3gs}n-f3{o_7g|kmV㴇Iskb.,H=?tߓQ]ѷۅѣ-^՚vG4o#ek\eMno[]NԋwE 8 Xf{=87o'~^z/{{SQOp ܮv믁]K6bmMԂgΑ6}8L~c9<Fz/_Xݾy[u/6ExrA_S]1c&ѳ\ {n:rCkZ:-H;ZkM̝z[ז-]/CDtWχw~w?fq3r(i{#ELtGdRk VvXtYӳ՟{;mݩN]sUiLQo]EN_'>' %nKig+K}7.DBf9w?n-Xs 66NM1?.:gL|^oeY(L6O=N9/?ۏYetmzw)~X$yp]41 㞷g{;[+V[@bv$$WŦ%Ďлz>+Xⷳoӧ6V޾;[C\ql9굷';p?&7KXfg6I,isb0\[I,N+mIg=2L57 -\_M99sq<{9v;#,4 :f2Jx߫]n^V|3; |DZll{)lNE8LWˣ̚/}3vk}KڹJc1P0gOwyy_<^hm/=uBc1_ΎO]irm&p|Sn{'wY`}9?R{z_ޞ,=[X[3s@d;ZsѺNn}z.v.γ/1uZawO+ HxdoUms1t+i~ &Ƹ֭dd!t hqZq]YXZxH8|\3yzdr|iWO֎_CVaCq周Hjiޫ̶_9Ǔo7양ht,;Sӷ$⾻ߒ~H6rQ#hTbHۮXE~Lkt.lw;iI0Rs#W3>7J|Il/_<|e6۴[j0ծe=|T|9'5tXObu۶HCZei]5/WN9^+gB䏜-0myy4|gIw]fz/>Ň'Xd 2k55_7Mrzo.<'踵St ^Kk+/t}3t'Hɭc엪AtrԵs.zQ?o/[I-'eaxca3u[t{V9=WoMx?9#ݡl&Yn,|'Nt}gO̿+V߃J/XS&Is^o?|_,/7?-mgokf#g֘X&K4z~Fx=zsxw{qێ^V*6_(2yϿCYI ~on*gk;6gvpM0//#=L|zV}7X<+o_>;ƵꇵҳceXc8?_;szɣىYXՍLkY]z|MOMe}iy'w1Z[r c<\w޴Hy>gf]{<盢G`IF w{@1Gg>fI'Z/k_tNgs}o+/<7"9]bI,,s:f>Nl7].Wͥg+?˾?w9rNY<'GS,ԍ?gqi/z~^=Wa$f5- ֶwSGhv<2R.gYעh۶n~wMeɏw+c:fըnil^N_2|݃eDC4]1+Frswm'FR7zsa98ψTek5~htd](lE.'@꘢jw484'^5z)};Fw1CNbkK WG?s\=<9|G۶2oݔ{޽9 }}>%w\o]1;ϜWs\MgrdA'}>b($^/] 44>`o& wVTl4YLзO+]XֿJ8Zmw# /6\ۋh}یcK58;m;C5j NgN~;^LBd0G7 /8tY+E̻&ݶV3 Fs+~iW^lk0Lv%H.@jboj'''.nK}ɶvlF-,)Z Z&|9ylώ6Mx$~eX2w=sg >W\v˓77l62x\y6v'<{'Omu5:VV]ަOko??lBm%h-$x_O0sF޾Iyk[yhvs7TEr-+z6x6Ȼ wvEH+]g&~}ɛk,22VE3-'XwpwA+eyp2plͥԝ}ao3P9*+ui_iLvwg|ѷ3uڭuϙ/,vWokzveܾGygA&;jFC. QھNOڮ霱?'Olr{m{>77Aa.۩P $Fkhӣcחk%/V7r~u1:/.mnD,˴p_,1v[ܳެs/Hu$4;SKmˎ,nf6g]/.vۨ%=,om#5<}m+聯lgo/74[< :;[cLas\N2gl-~nƼ^OtfFZVi,s _[+]k3iev.wQ^YkKc_k9_$OHM?6>+'3&*ckg?YFj;HmX Y5hX$mm{۟lz}uy2y+nsPz\|˜[v5yIn1Nqks[_7r>V_}er{5+{k?/kݤonq<766_fzyWi-Ykg dFI%-իyW.MV,$bNKr APy3|w[(4< .=Mqqg+iڹǮ?3m&VI]^v}4/~^m{ԎFHx>:Խ_imnum_n76 Chs|N{yuK8~e&q7/7c$~m!9tI \8k]'\W$lƿo=祏0E%/F岻C9%c]>MzzϞy^|{{VպD$|bv9=Qd~:zuy<0yok+. _.O^WpM潬Wli#/IX 9)l̍Lszu5uG}go puN>H?N}Y#.M{ǟn=7r7v-ٹWh&v=n9: ]uՍt~;_f_!loe[vƾ>MT{=es3wog}5=^a}31BN+]3lW_]kMԻ|>؟/ipq]mnd.nn-8[ԕ4lώH8Ie_+5.{mk/wwqe;pL~S2F:_̸W5ؾ=ecˍyC.#eO4G-]} )m\ 9s7KmM^3^gcnvY#d\^]:?j.1iN_5v-mW`tLV -Zk[_?p]ǫI n{m[so3oH57[tZ\_eK=msK/ĝ"aдdly{ȺM{g;V^k}{zz, u-r7elܜ=h|n!iӡkԺk6khrvMA, {Hw-Ky&<ѮKI?9fsROn>8M,i +^^Iʈ+mi` &SjO^NOs\$s;Φ[V7z?˝<ñE>Y"QGH+^i$raYQ {Ɔ]FZ @{C=ˎf\x78V7)[ ui{%11ڎ&F4@):6@@@@@A2M3nYd 3J<^=U6˙s2 /|:GR\0MA#OC˧nzm2㷧}G2u`z~|86]^˽ɛ㸳c-dKܓ-?Sɴrj]wӼߩe{T|!k5a$P1];z۾D -d$`u+wۻ\eK]q6/ [k}=/^vu/5ˬq{gU9m~]Qu-Օn{YZqgSM1wWNOWw|~@YK6\AᅎWi9/5}q{=q\[$lW2m<>8Һs}rm;Z_c?#l- Uei]5f}y$yfIL4ǴeOrO[v֦&^ElL#hgG+݊--&;bdReucMǼ<yrigxt#{.wmy#f`.$xt۫_XmVqm.Sp6]Wɦ9utj/-]i=9+owm&Iaǫ-7ײm+/OmX;H|Gc\ֵk.l-mLT=֞bؘʿ-z2[tcͫ#K[rwRIaɶg2&LshE7R(ݤ^>eotm|nkRofz'eǖj9`\IqoS:>nwW^M>\)|ۤE: ݧ_J].s]zۇSŰ^ntӁ.Eck-3'/g߈P@@@"6?ԉ'sVvd'OJZ1kw-uۻ䫋sl"FI&-OU{ m1i$͂.#Vzgm5gaslA< ,mqu^՛[p f\Ï_ĻOSxp3yf6L4"vS|Dr=Utok"{O7J;V#&NZӭV'7T}~ޚ^!IP>K[&-cwkO]=K'leǎ@?U6?E|fn+ewYϏF-knVG$1[/[lqR9huX_5ܫϱp6i7m e#卭 {uu[1~,Is'SQpJ=G ¸Д.{[F5?lfTcv;XkGS+P) \PiͳYOp`1x%,i{~ּd_~;7LCuY>DksSqeԚ A\#'S`(KN1x%lbлE tEskdQs?+a~Wonާ9h蹒KmOLGoX\9sg/jm۾Ed>49Q3kjnigɦK׫y*/5:v[|<Qw+? 'o=|`%HacCdcXjE5:hM9R/GCʾToYPN.ws[殺; B R3,gŠ_dW#]}Ԏ]ؽ椆i3J9?>Cpo{[ẽ 0enky<uxn; j,&ݮc4H#4-oUbmeW\l7mm˯#tYh:ULapw\9 ư;\I-ouQ &(+ oۤtvC+Ɨ=k\R=jw;oYWk{7TAcIYC_>e\3;vK_0Es .7ŧķ:Y>7yvsgٛW4ŭc[VNk|kz޻Z3+vM⛕푲gi-d=/>\Z^e?1Oqw{jEitͮL5󟯩w2 +yg˶]lJ hCS"Wn1XhA3L#dhp`es98 ؋Yѯ_kZ ǒI\ N*y9ۦSٛ?k؟#WKaƾxD-ÌDf##CcoScsGФ,%RSXRyWLG.ߗ.ÄeQpw3[V%˴/cݾ\웞݊[v6鏧25i&K^-lǺbrR89ӣC4`aӫKuM?ۓflwLBf"/|b3EUVY`lMvQsFiV.,w[D0ncZ)5ҳٽL; -}tnv֖6GH28}-a0Ѿo_.-nr's[ #oT7_M[XZNv;jN-cqmmY6[I#ͳ 2fng\ԾiZ[L=(F >ۧ.^Xf|v|]<\dq~.,:/2ǝW9o/nPyacKDt\ -OKSiOySI$-Ds|tiu&ofvzq;|ǭ$"ZY#M:&<vbic-"Ay)mWFKkIDЀ!-u:3uXh@AqZܒBE s+6,iͲn##k\[khէjlũ5ЀA߼ol1K k}kڱnn&XMQK#HszoK㙴O {6mpd mi]yK{zy{]ol.g}2@KHD1Z3=:#KS^4\DZsln鉟KkӞGodn,5͜p/c-{49޳Yuכmzez]NdR}m/jBnw4=z'zk$ f)ܺMv۔s4ֶxHhɺ_]=Comzin)ڥ~HOkyuK. ݖo!df+iS=GbĜw}/Gaisn7kN=8^ͽ'.&?}lۢm&+sr1+-S Քmq$oc?yYpewWn}sdd9н|3=]Kk,^9Xf獾{a3G+_#y\O=۾qؼK0tNkZm&%V3tN s XMBF=řpe}Nez<<\ʿk-ɿ7Okw[GۋٮY/ RtI9{]Rzcϑ5m|w]A3cnoկXvoMqz~韷nn_ԗo9>]&ȻNpn#|v`.K.b873~N6ZqS9#P)&wiî7uNv2 |s]#:}WDe-jayu;8zSOFޘOymvWp$ f]a윚 s?zUN>/nr~OdR L ^6x1*2Uǿ PW8i5U}inG *Lzzgej>Y]!SY(H˔(!V !UQ&שǻ$LOj'vyo2`EvPd72NڏL.WdcL/Vw܀56允Uehm hePe/L5vAR`:E0e30xA?ba2s+) TFj\]܊^ tŢBaitpoQs YQJ8}4DA0ReV?JEܽ`LYpS v!!Z;ȮNeHP= TQTyxqƘW ]R i#Q 30f5 ;Pb6i,-]zL8qY2֣[˞:Į5fOVپ-5f_YYYgk Ҋ4qp%\&Hnc7S:& ( >f3 f\ۀ,bW+g"eY4k  d&GFf"p!D[b.a8Z?%S EF< zPl2jTV7҃ FLhe.hw*~~Ʉ=#&J۾#5t? >b\ %t[j_n, VLn]:QV**28и** +DPFPw \@'A$ {Q.4Qb3DA1`m|b QBi>DjՖh,Cފq9[< (ZanHبPe '^AT PpeTF(2n9 Ðs (DuUS v%g-9%ڟB~)7P'PP܆W ~Ю _@q{o.:[{gɼV@@@@@@@@@@@@@@@@ARAZ@@@@@@@@@@&5k hp?W 嶣Mi|"CVX` <0ش"C5mp X\`A2Ll$d Dt-x\}ȟPo5ƺH8 ,iTADCpgQQmtWTVPU5>7qX+˝#$&4v%Օp#Ҫum|\S e͐U-,R4qb,3W !}L(3FZ[\X@1!Ekz9J (a܃1UEtDF>IH,:(G \Fs+ʿ (gk I5Ӈ`Ar̍AQZiΩ,?ZH_ߐa2>C(2spU/yTUϬ~%i<Dx\G5g2ij]qeA##2d# fk*+#$ C./n@zbSIq$״`Y}!dz WO kGpL\[N_$^1pLcvwDhRDXH3(J fUu14 |l ZAlQ `ET h'4BAj  !z PʅUBg@5fh yY>7>(zP )9.U[6W!7Lc$}34`f3 ZXcPcTaEHe!TEET!T uVA`j* Ђ>Q¨h iP(T""Ap( EH(&@Ԃ݈1=֪AB(. **+#\;POZB3w!zXUT5Jh,%:@("hj6`+-XhXӄsHU9lJo<_GQr&KA5L dBdr0z[a|,ܡqNv;S e;keK0KU@@@@ARGr .R;e]Lp q(1iG5?ZWsWz lp |,ծ&W `3ui(25Ye+Nqݵ4ap\GHd& ("  brAFZZI9j9`fT9&{.z,HO`0G1 i;(0?;Id,F(+qP,]GTp}">shAb;>Vn %D8>8cW 7]8VS v>2854Ve8jvz =(()btP-f-BN%hpD;PVFb`,rp{+Tq#c -4ɳAQE*t\'& pcц0JȢ)La% .΃4F+s(7nw>3#@ Ωz1wɈr5DY+{\}AWAEYƕPct,*loF7\D42dӱPǀ" ]rDK_RT^}#2܈Ov kKx]ZbR&ih`n*~2k+(1C,:K IQ$j"""* ARUDjAA@ Ԃ5J"CPKXYТE[I@ҁJ(*\/TTDFE*81%SDhA}8( @@,M8 dUP1NyJ xwh65k e&e {=\% pPE$qqʹ)[Q[!F2Ҧՠ &S (R5"eAZ }eMf`p Zy,ew8T\:N4eK4 zFf`+]mi(*jqB99suEʘ*6js4`&)?J 2Aw7 :W2_NJ pS*AP4ˊ#8-p~NUܨP Ea9** K]4zkq|j\_-Ҧ v>2C w(0e-ڏ0e:zJֳa qs@hY3$-LJҢC*kuTX5iPKc\kދAcS <**TqTPzQ*t #Ш8jPRF ވ80 }(36 ڋ]FV(/G1q'Gm>x`e @wާ[(PC zPcu,= 2vb3@M޳OИ2cS &'2UDI'ց@s eAJ"QS J"*EX9AX8j@x 81A"Q؂*AA1@*xbA@A B( ¡09E3A]AK+؂(J B&8*0F& ESWbFC(jP\""+\ Ti>ZH ]A)m\A>QEYRHƧz Fp ]xE0KnvO>),E{ kI滇aIr[!,<*hUIr,yp#z[TDp5B,^:GOe} yVp7e>&A P[4v`j0l@:j(MPANJ"ӍPcd &,L}jIP.W"&s6JG3t~`-,rEdq * Т) c$Fa8L.GO^e]}k(DO,vVFA.c\3Xlj+C>@A e(,z Jq(@A2$ g$&YZz++cna羿ޢ|4/UW ]O ⨰x5LKjߩ2a Ɇqf5hW mcc) & UH0{t{A9b,żI'UY]k?{{!g͇qp}S3Usv.]?BV/hǿapr tF\ʋ5A! Pq(dP a*LBΪW]E}!w c<(xpԊ5A 4 \iڂ j48 r'k*k]}VE5S+3KxEb\6"'ҲPU5"wOv?\&c;\EEJ K+nSd+&YaΗ~kGkŏ68{~O*܋pwpܭo gئ97bn5[:gyGH]^~f/VhZSVAѵH0@7p *R P:eBUEkN(.EZAvEj Ģ`e"v؆Q v{RaV^S&ۊmEAa=.äR2WPp ", E )S؂uS䂢JQx!`ZjTx 5EAQ@P 5Qu*J$2 (#X(*MPWWj",(p⢲7IA4EA!T(EB.*\vPJ`   jւ5 vhA L AJ 3 dQV'pAG%TA( ܀c8 T@-Ԁ\5 UEMPX%jj-Šs@S'$I  q + -" fO1Ykw'k[GXæXpʟk:^Upn2COYXd] R"5%/e0quY0S ۂwI[NܔXʢU'ڮSUL0?nuj}a\`DaCPDoԠ_Q=ZpTPGST ύ(SŽPfB "%h .((pj!PvJD4Aaނu(PFYނ4#"Ch8׊ ,uFACڂ]hPc5DO1NP@LTT4+"iB,n%̠`sL/\L X?W ؊n0hL5B0[K_Wo1ˉO%nmx5)Ȣ i"1W ݣMՕB}e8 v*2 V:hTj6Qm)NcL([("y*x\ݷBr0\kxLp#OҮRZmH{9PpZaz; -34 .R  fj(@̚((#_ւաPXFH.AA J"u:^ƑA 4 F-"%PVbW* R4`?B +\sA]t¨>UMA((vRu h蠞)@"5hFD %R QP k䊷TyD5"Y@PGPj(*P*2@@@@ PT  (PNT@-E*U** @TXaECނTW TD B("BP4*C זfMx-=kpW Ar\Orh=0).ofs}6HeMWӊ\3X(R "3B@KX?L'X3kЮ?b&$5S оd3ZrUDk@ւ+܈j=8$(($; GA:5qA-E_J5MO=,3ĠP[]Q@r2@3PX8 @ Mj@ * DkJ"QqEAz*5TR&#_}1Uc0!mr-Egu|Mᮙdnx q4p"؈`CMN4⩖pҸᕰ T PkD\'NFTrc1NH*g*:@spkS QXL7Rau&ARS h)VZkm<P}KYl@@@@@@@@@@@AR=%-[xd`FmrT-0oA W& ; w Р8"7Z$+ cĢA$ U ?R U$RpJ  AHit^#D}'QpD 2X0"-[A@"*kD5 樮?Z" D ;PA[TүC 6 ]R) t",GR 0MJH>VE`poQ;a+ϛ(1̫J Gi0ypR`X]|N} 5v\JwXt>Uy6C[I* ).8cOsnRTvt4._MS&nJ5^~d0DTeD[~ z 0P(25T(,x*p c՛PM3Z2 tڂ~ V(h*W OTIAWHZ1ա DLИL N5Apb0@ւ5jA5 H UQ @*  EJ A@@@@(@@A2Q:~sZ14&ЌHP(D }%A4@ҁD (@A5AA5@ԁ5 j@ցkA BrxE*(pv׵PMPCZ  7ʸg-{_@ֵr%7*[\Dhi;Ԃt> ~ { b@ RK!iTAm( P4HAfE[E;hjJ)@"!jj [~LAW$R>#U *:p'zG4T5uĠ41=Zd8w*z_601 >j {0AljTPg_ A`$B*"VB@hD6 T-M23*C]'9 \Kqcq%j{}\RÀÿ4FFE#1û҂jH\Wv* W D kAH"*T U E(&A(!HA@@!A9 QA4@( "PEJ"u"EQ j@ T D WRN%} Aͅp$gB@UWT @+ԂKH4iCZ_IOA&B1O0C)41eⴢ ð ˆ  r@A('J DBD s@8AS?j"R(aG۵IjL*m[R1) @ 4ƥI$#8҅C $ZaE B+ 79(q̂Ucxø!1s둭mUޥrfg,m}'Y-T9i#Jx9*'dn ΢L/dJasmN`cFeZ.XhԫP33R)S TVV@ M5EgebJkWArD pn26[yzQsVm0e]b;uti۩LKǽyiJ~_6hv8ҭ _&q~t0HnZjb`ar{!hWWb㧏f)դWTD[|ή;ҙI̴1fւr9W 4}_Lu~Y_SBŵ cpL/kkJv;M:cءiZ`&Ua ۚD /ЌcD0 JH!u)q4s@UdbS)1N̮So.™0ҍa͗]ښ.$Y,imܦW'j%w&@3?j\0B\C.06T2a%7CG zY;TdjL7!'J *k#3[SBC QR@oGeXYYY*N1m= :"/Vpт(zdPJs"po/u)L-%ԆX)J҂DM H,|:)F" FԈnBar#42 9xØAc@Agz CGj ѹ`($FOU͹vx&L,1ĩ 6͙W ր!@v U!B{A9WЈFzAjc) x 0iE Mҩ807*c@ Ҡ #1h*1\` ՈF%8a_֪227R{@H D(EOm(#aPXFC{4 P(PA xOThx g>ug@. H58䠶V8*A?b 1x 8 R (*G DQ>iB ЁƂ ]Ĕv*(" KA($`(hP|aœ{POHRԨ! 0T h![1C5At CB  (B(Di4h@P4 (P4('J)T@ !JPQA4(@@PN (&P4i@ҁD (&@F (P4i@҂tJB ЁB hBJ dT AR A4܂%@@%@A*(P@(&-PA%D,Am{(PHp* s B(Q5)z' .0=i )*(D QT S>A_i5L,"##D\%$PU!ymP cAaݟjH TAQ;PXFT 0tNހZӝPFw3?R p)J;j L}e壇ژ2'i\XZ(%zPIGւ(d׀XLЁ k ؁Qj#@C;ZiPO(b'40CDBG 22@("(#ѧb:~ A.(` ɄOj:`0&L$@:AzaA~;4 P( UAaiH"J;Yi҂tw:eށwhRL?b ҂z`qENBm)܁BTq9QPB QQ@ARB =#Q*0tb(2thh4Ux"Gj!KJ"t7*4vR1w"a.ʪ8W{⠁9@DOHS+Bd:'":eE3({Jw(Gj 4(P4P4P4iAPN (P4 h@ЁJҁJ (P4 h@ЈhA4 hT4(#t(2:ePFt95&@A5=&Q@{H'A5( Q@ҁD i(P4h 5A:P(D}24x )Q РTv Ъ"" ;B Bjaځ ;P0@õР}!Pô(*'Р;Bʆ Q8vô**;Bô* Tv  a ;BvP /hT(Ђh;~ 7Aooڈior;O/r9{O/rTtA܈7CPGN?Pы!'D} A.ڈaSk2a dvLO8LH0kGgoAoEE#P4ECL}K;4G>bGw֢TAc?A&vMj ,vX87(ڨ7"[igwւ47A!A</j)ځځVUjGh@{~VUj {~ MZځ'[;57AQooڠM[@r4D'(/w}j*5 mNbZS{B;BvC[{B Рkojm@54MT55PP5CS{TCS{URD55SP55@;QMCP MjY܊MPAs{CS;OT"XD57A4 ёA5E5Ё"'XE DEGrA> k @PFA5 ;P*;QL;Q^^9{PO/jGjQڨTvaL;B!hE0ЁQ ШTv Њa*;B!Q^ШTvPô Tv ;BGjGj)Qڢv B Tv*Gh@ a0D0@ GjPQ܁Q܁Q܁PPPPQڢUQQځQځQځQځQځPQځQځQځQ*;BGh@ GhTMGjQځQVB4;Tsingularity-1.00/singularity/data/themes/default/images/earth_night.jpg000066400000000000000000020547011367731414700264710ustar00rootroot00000000000000JFIFHHExifMM*C C       ` I !1A"Qa#2qB$3Rbr C%4S&Dc@ !1AQ"a2qBRb#r3$CS ?*'XO9.[pFO =4!-h.94C$4zAw,DǀJw|~AhPFwb @b>A +c2+1&INF+`&CY?B@h Oox!8Rp y_EPWq<E@a7A~B+`,& v~fI@_"7 @fƣ @Q%D;*X$ޯz9*X9,P[( 5MC8>y43"(9*.q( t,qTCRG֨0 e~( x15G P#؞h ?JA45>c4ڀ3@cc( 3@A9,YG4|+$#?Z}(e>8-*HM9ZH>s@Tc'>w${s+`g>}Ƞ$@AonրP>h WP4gE`El j { w,Ƞ+'\ 47ҥ5AP}KUy'v|P x @7ڀn&o]>hs;*wrhs@Iz#vhϹ@Fynh AP@'4O#@ZH%E] y?ޠ1@7P  ϵPh 7ֶv>h@74wހ4h }s@[q@[?_'hϽ9>h@W&$'&>>1yNJnj $4$ O$jF} E,h',xP"% ހP noڀE% @NJ۳@N@7}I@WwZ>h h P|Q|P @A9}P<g*~O3@k:OF?J0027*{1|Kh}@yU Y( ?ӟրlc?@;mG L}"?85,g O#oh“&a`BCCdvh V_h i@֨/,$l` 09 |7G1P#` K[4[N*X/Oj;~`4H?Z g5`D' NPE U"|㚖 ';K4Ll=ր*DC cXB B?Z(˜FG4z੠(C1?56yj+1@]|(&1@  Ղ 5xAzW@7I*)#<+'ulk"?Tӈh {?zn+Eqh ^(ͻ?(YF⢨%F(kDW1#(~=zb9v#Pn,h {;L}PX.0M@bL 'q(4.џ el =>n|5%~P
gz s2J#‱@VP@@Xj,`1s)< iVl2PSX+'=`s*>,~[yXP$ q@A`G[kPǸN( ( `}( ހ fXq@HlVݞ R}k“Vjh #wڭi` 52([8P ɠ fPI5N~h 3(4_-@1怌}(4@[mZ@P‚@(  @XVϵ`@( gVlP/@FE;ր};d{y!h@?5cs@>怮=#@ڀX><A@?9@Z@G@['P(A4E#P@O@3P2PZ= *@r} '4r(9*zh 46yP̋?ڰ fe nj>!qj(nTcSVU??7'T;y%PGa‏o( fD8T@+)uPAf7Pfo5#{TCn#?J .gP {xw ( wCp* >!¨i1㟸wQҥ.[C)@2 Ҕ c @c"?#( @>FOlm)fh|;#ЁU26F@ Uo\~x a=`z?zRwsdzOl@cf#ƀieY~E 6( |eV$45AG(/P/p[Ov}+0I8@>99[PUn)az؏ڀȲrplܕ82Gc%61( 2[~Šqh xD2X~]4Hsx3@c .<G@dXCpʁA1aðڼ`fF߶( ArH0|@Tg>,>%,X!1TI\ $[Rrް @ ~հU-9?Fڀy 0ld8 V@d# 3E![pK cz1P>( l>@Fj|61[~\1k`5s4dxy0y&h \q[< G( 85@ZTPg4k`y9JA@Iq@Uh~68v}9$G4 s+3怶x40 e&ƀƀg#,<2(ր@XV#&PzhǽbVj( +`hG@N>ϵl XP@M\O> jh 怨' @?A@}hP@NM[@@9 P@(G81怰>x-@@P@1]#m#$q@H@4,05k&Gh4GN|y?-Ioh'ms@XɠF@kS@`{H [ހ+`yhgmr2z% ?ϸް s$ql3qEsRps 0<@L.߻ڠ GǏְ >ȠAlj&HAq޶1+pG{h; ?怐c@NA>vzA~€N~a4րǻF|‐ph`~kfc'cP+`gڬ@"!VQDOqFl_#`[#"ʑ׏jX2Q)S&W NeL{0$`}րp?RdPY6FEF} rA`h ѨF2p~ Oq$1)LM+&>6TV{a9h3?pOnHAXIJ" .f`8Q {s2E9$P{i/?j*g?q@m7AP mPy@l{r,v߭0 y4ŰϷ4_ROF 6lP0nϸ -fi ?mրF@Z{ej;>93w[ʞ( #sE V(Z s.Jbf^TPx& m]!<հC>ՠT/@k\pZ ,xA^~G@cڙgC PkC#q'5({ k !`cRsJМn \5A\_@\[")!h /dʞ( +'Px@T8y2-#.q@HSjP#GԠeKhV}P*TmQ'4|Pݷs+B@ v8Zj[g@9zh`}hGl'ְ|( jP h@ZP c~j}J1@MR@-@So٠+_8,cQ@62# O`1X @aeq[1ePi~`G?!]8NȠ/r1@b}(۟C޻9P?Zl܆w9Ѡm{A+!k`Ȳn6AXBy? P !<%h i#q> 'zUw0u7UYؚ #ɠ(5@n~d{U}sQq4HO z11hf9 c|Y*w{`~!B0I5T|V?mVEO9+F a.ǁh>`j.&$`ϐ3@ _"3ROX² g Z5v\|(fO8QR^DTPa_ |?uSP@_$x $10Ƞ:6{k`j|TPQ)?IEJ_(ւ߇)ǰcB ~1RW 599*rh E1h d R(|jy43?J1v@kȮ85pN~lȘTNO@l1@CAPs@d@C~=N~Px2 #'s" &F{bg<{PmP?NʪO@Q: P oڀ)}1@a6n<~~>0=J#?PDv,I@``T` $ENx.9%OjT1%s( h0IPͰ#u'."EC1p@,"AQ@5Q#Oc`̱TB怒 1z@C(XȾԡfT,U\3qгJsP\-yP`0RzD Vf 2 ov_@X\ 1 >&*,gTM ; 怰# |"oQ@] P@ZPϚ`" k`4 x€-g€~1CXgϵa@MghOր2(<-@SMzO3@AbPϚ& b9#`a怮3`~հ[w$@OP1(< P h@WZV s@,'` +PfE@cpg7 7(1xf\P=c9#h?&#&`@۶ߖrG5Q+ \V"3x j&aṖa@HPQWb (Px?2&.`+aUI Y+D w )A9ހC" 4A*( S xOJ  6)<0ȿ18x6цsҥ.,Zx@l(#{2&SG+$}?@;aS/ |[?q– $ \Ni`?^i`jX*֧ Z4WWfq 8V;09'4v*(l˰z~,jW84Z-jRQ@p1K?1`G)`̧A*&#?x>ˊ {Uvnkb2Zk 2@h { 3f7g P@^9YNrh u֬KSi`ۂ -Pu)C}| ?89PP Pہx8( A@ @a 3p2H<]%BB9 HIr-Fy'p( >E X2rpֶt ]ڀ( 0|c,րY>⥂H|?Tdoȭ(q 3lS"`sZA?R(cu\}F+6 FVepK((vr Uc~BW4fP@N@Toh@bğ`( (b|jX.A# @P9ۏP3 +c(Y/p)BDϒx4x1( րlް @X.( 08P$}(f`~`zX#i` Ku}Rh8'p⛅I$lP0<ޖ MunQ2n>X!flϷ(#ި5eAHlaM ,}x+(E`N)@NEeBsP\߀$BF 8Բѱ 0 4'm|20&OAEI|ӏiBh`t4sEe?&4k+!|5-f&FvL6֬P "H(A@c1쏭RSnɨгRrMJdKuNZ%BJ V,RMלH-@Hǽ';G>h g$P4րvR TRvWk"IL?<Ƞ#(  Vb<}ger9-_[>$Ol9>A1E` ‑t}`_‏QA@T'ր xʗ /#@c3j># |@O}3JRd|@|HԢY2(R~'9i@|Őׁ8(R9'u[>|A怅${Pր@GRG` wV;h n+Z(#@F`} /EC*(ێM9/vzdoVck)yA lBZYVlC1e.,65A FN >( Ar@h!O0Xme`/(%ABq@s$Q>&eyA$n?z MOV00-Ǐ6CI R2/wLB,#$@IPPcTe@K!M` (q:o92 4DS,G@e @>PP6n Sx<6‧*m 4xc`<bx3*Sq~^3 瑑6`c]q@JNL( ڀlMlzɴ( =*PVTڀ̌ǒ0h Oh 2(f$r0=зhn?j/όPV0\T~|.~h s`XJ́mS!N?UG^$!ր 0fCr#l Zۖ?.ѯ6f@Ev< PH(Yb@]+/9հfG`Tgj @8ߟV4>222w~&?|RcoЊX ʜo -ߏES@,},V>԰X{Tn>€@{ ŁzwհX @UWg@`q EG eV-j8t0DE[>y]#QHMpv 0?VJ6A|cI܌@H]Jk7%3 E`9%1g1^AM Gګ@ӇJ^c韽D^{(De09;K4-AHqB?.3O1ygB~XVRO; Ճ%vr3ϟnF+Qs{ 1G>jCBDE.^]N3Q13j$ 3Mff~g83*,Q? [(Vr@0Ҷm.,cj~p,u`eGלn^63`: qX5̰.0Jþ6 G;\/~i(RУb9;>+jV 1dp]U~SdP @T4hI*PyTXԠM(X['ޥ VZ-j8>ER lUcw҂J7,n"P* QdB.O(X֔,dRd!dqT*bPN<`աcF(p1Yz "Z)&lQQŧ(f8q>4E֫Z>E`n>4ID_hHoo~~MkG@-/Z+(>k]ya`ԗQCimkn _;Cs[ZedZ gHr+]D. Uij"Qw |DP7!>"}C^¼P[[$7 -r)LQ] gT+2i"` F$ <B"Vǚ8Vy[I $+TbkiҎ;y,yG-G2 A @fX1U YO![[!Qm'԰HO`능3Fp'#!r`~ր!_B-oErǷ<,"P GlP>_5(6P*b$`U<O@PG) W`>*X3+~Bs=w1_ 8f4py(Io6`x?M18'ǚR㏨6u@dhޣʟڨ5.M93&h @Fqǚ-zʸPoq5#%~o|FbhAɠ32~f P=x^*P$[.@4e1*x ǽi2\ Ch 怸#4T'` ǑiT3 ?py+>C@cS X,~(H˟B"@@>S$x_;a@J%\yPH %ձ`k`Ċi 23 0:}`R$gtL~2YNx̧5A9A p)YHYe_3`n1e+ ˹|?Zrcd<~r?lxSh TdE7rOAEnXJ(hP'@ h%WUeM(c_lybGj)Oُ Gő5Xs@]F3@AuK( m**bPW?ҳ@ilvbgbIDNۘ9894-%'tYWz–r3LBaEBmIR~URG#уi6 %X de̔u/΀/QI_Ϛ-v[ 5BͺdP @(P @(Z婨i+9G]\W%dyүPAm(9L_χPV66ƸǝT]HX넌=qHG iTPҒk21Q m(cɬi I$Z!9c5ɴ/!eM-{3c2bbQH6(ʺk1F7OƎm5)NJR`}9MlRl /ֶr=:iWo+kEeT?>-iYll.bO\Șj1'ҒpŜI5!I5fp![E$e`*1.֜Hl(pҶ ̹*>[%"ўdktiᱻ܉ERN_%0/iPh1+_yY`ɱFt2YXw(T4tS!"J/ U $1X?PW(2MIʂF(#jqXn!$x51EFEF)$89HHAKUфHEA5!ޙjkKQQK$R7!YieŽMrՎ:源PJڂ8xN3[6Đ>3,7 .>,bN6( &5<3Ghd7Ю*P2sld P)@T7sZ *Ap2+B0"$nS@`hb ߯@H9mƀ5GP?l( R( $<8@XnpB( HpUր02`h VA>4G)@b1Jx@HfVBYo#RU@?jcO@\ 6yB< {8>(xuV7W'E4J~aR(+@gp#j,q FsX_<n -qڀ˖%I4X0@Bܖ09>P]ЏCP=>0>հbp &aMIZ2",\j 28y`aZcۣ!Qǁڠ32&~TI`~_5\N8k`<\}IvIߧY]В x5Y]+eհkIQSn I8*Onr2~o@lёPZ(ߙ0=Z~?  |@Xk`cN~Հ`x-Tc)@&W ZLʌ~T[;( e?`1SXRyg*P4 A~U|qQf]# Pgz7?ܟIE0 8u~s$$6KJ ]SNRQEO޹jERǓV"2E #|$ϟҖb361(>h&%*s)\ |ggr{Ն6EOknt(n"QL]QS"P ˷PBzɣh?pk@Bs&kpziߴ}75_TَnB)`Q䏵Pa1vtp@\P“1_j n˟oҨ('8|1$sAoԊޠ٠#%AȠ0ej gYjK( G@\,Ms FP `j Z Pdtyj PSxDq@\r -n8rE,ѕA {5A> ( 7@Sh??ڀ>V,8wtr2Py@C4G@Z"| 8<''@H |ҀF8bƠ\}y)a_(#9( o4r3xb7h61?\@6Kd?Z&%Tp>͂q8?~?VO s?jSOxʹ +`aH @.>`X@b1?Bހƭ* +~@l 怬Ʋ,Oڳ. 21{L7{հhI*kirqP4fÊ.mr,6VH|k2hz {D1>|+-0E9בXvHFbF26?3Iy"(棚@5%Ԩ򄯟?Ճ;9cm$I'Y +Cm)fe>Yо?M*Զ1+m?EV+hNJ\!w  ?e:jkjQrő~k"LmĎqV`W6[:VdWG$&?6kJ&YEo\`g$+UX!q:6⁜Ө]ۂ1\)'9573'Q\1,w$ JʠMUϿY Q#g%`~ڔ y-@RȻs'nrqOߏV^plJ$5V93[¦IqΫ^LFRSPk&H$Q"sRqSei)!4>@c*lt"J?VA݊V42sT1+ybPI4} P uj"A-@((|A#~ Ҁ3zx(8S_5Z +k~ Tn "n%!G]$Y*-TGu$|朷X8G8Mq4c GTy^A5SH@w!k]ǂm6; +O6Y fCiokVMNiF7b̻L_w5#o5bi%4")Qq\آ`ATm᳟H]FnOkb2Im#8A'Lԕ,=(oֹ=TQ!f܍|SdY i!D;8r[5pE+%ĒeUtSp2Ld?E*m@U*7@T)*@+@P Sh@@VHb(m'nd2y$*sV3Ѹګ(|aF7k-0T(P @H89;Q(&MvJrk&$ho]>:Db:_JATPҧ\TP]q=OiZLrkyK97r6+RH!OJ)J[8'[3/~h (D+P<|x,y) : ?j"B /N6S%0$mʜ~%XWɏш(P޺^q@kLրdo8\mllPȏ:-m92bˀh /nt'o$`hS8j,9#RI䔹? 6cԥ,„^˴Wv b@ }ry8β(pn!q? .UbPMBy$ G ?cT\to0/3?T)?v2|`sTVGRZ4Ǹjm[ ?=Yj JK6)Qs⛬Q ~]Q>~{ p3(ٚ]>&WT3܈wg?A[+(ЪZjIw c9E͌9g\Tż"g8jJq!ŗYTaZ-HЛUA#+V GepsyQtVu{q۸qn1Wx귄FG|w\F*]? n!Yu@P~-t3OI؋q[Pբcr\f=U(E[Vj@P nZ;P@FxF}h4L^}@Ot{P43g\y,$%4 P- dgP x{4P]( o#Fy>8^jo<½G?PjR3fog 4R)<>X6ed~K9F?NJzOeb39RrJe2Y m+?$#!8EIgqLdV(AXsO@\F`c`&0+.`S`$ZQH ֕Ԛ@<` ֔dVNJAd#Z0nq]=j7?mM2N89kRrQ6dkh弍',sPXHf]ڑit[SOD]p+C "怡峚z/y怸O4u0J /L_,j>YpA1x1P\s@cP5\x*|怡7?+r?589BHNJaS( E(9#]o_~4Cy$P ;$API'ZJ㍿Jq4$s &9@Wf;n+xё[cI9 a]m<ְ o'U$qM+r7}IMq#<P3>,b( B\d/8&FX$8©P@!\σ53ITDgv\5cE*ֿe(v,OK%㵈 08l}O<z073 >cYK$]rX: l !xZTjj|"˻'>9EY;gp)T$ L [ qOef!bW~FAoc>,:Ts)g80IhѦuP`F>~J@լKnN397.mQI 6ў85j [`P;'@T/pT(#TԻlDlMB{ Oj!FMG4GCNmh)cjbW2I:̸lƫ?@:uLΡPጿLsoaUXf|d(^`q˚Bh^0 O5,j#>${eC*vLN+N ǹ{wF K6Jm 8CR-t`v۬1;bEmD), EXJ$QSCݛlNX{"G =?tZM_Ӟ1ɹs勶Fڻ-x$t:.l~Q\V|*zdꢅ~VI0<9IkŒ}7\Z}P>>\BTF:'ROgVw<zՂ{D'x#('H8xEDT Fshq~Zݾ_A$NXI!d|V# sd'9(nC@tg,IՃ+nv,P y^*Ql-TYZP @(qɠ*梒e267 ;JRY^>A@k=r*"EV *GЏzLE8%W+@5?G?ڥ<<}Nj6Y?"nd]^ A(_+fZ#<8A39ީLe!oǏjVKY ~֯ p/m#@V;b|‒B~ue4?Q풀AS'O= Y}k`Eɠ6<|PŽq chO?ހ@\q@c49<`hbG9 r#.;#?Z'4$•s@Y>Q> Rb2G@Y\cj#,F Ŀ6>PH( 5()M"$x\I{$R*€?7GB [ K)=i># TCv;bfc' #iSNee)!N>bG4 <ڢ&?6S$` [GW$F1<~ +Jْ)1+ G+~e`U`mrIf$pO܁)LlQ(9<5MΓ34XfӮUA '#q6Ny01zӾEcXȕPxq[m6՛dPFx@IdU~ 6I>io~#" ?N6 >X[p1Љ{;b>r*,oSY/9H)Q ‚Vl|Ԇ^[ۀEqm_ $*03ڲXbWWLz@ݰw4'a85D+YKaOxS@O4|@N8(Fyqc@2 N|PqP84@7P?怂s@F߭= Ge|k mQILHLuFQ仨ų 0k AXm YTZ #urzW$'6Dh @(U ⵹+-}k. T kt*F(@&@2+KP]T @+, XP(, X+@P Q*Zh S*@(m*g'vr:Y)YЎ(_޵`< ֍n?S\\W'˴3bSYqE*QEe` Z@VP @(`UhQZmi6gq(贑,֔RxբQS chP?f1T|VX049"~7qPk8QN [O&^\8H5(H~U. P,H`yUnɊ5Y~PaG^ORA,=tl &P @(P @C Q[,qҚ SN:QC`5ʬ 1 <7.Ģ[=R ..;]?'l޲Ճ4w OAc;jqvي!6w >A$[6rظF1'+q%H?B7l |qƭ_MpxOw{KɻgS\ >NQyCʞCe5BLg9r߷8*:ZC999_n?+5fI\ ddoj5W8.$c@Qi*QE#snYmdfEA&'e?aTi9s(K> 5N*׊>h?Y)$S:>8el3A&9P1X)THItyQ0K#`{ӟTs ƀ$O }zrq#@N`x'*ϑd{>8h ހ;G> 0@NHq~Vv@NN0N1V[@8`U *)$6N@dO.䧶r|~7H<j%2l?ozYr}k@לn>+6 r'dm`rm.6HaOx-"X0rA>c s;#r9qϰdh (is|ȍoy?z3339 JN]2Z@P @+Id V ZP @T@UP @(h )@RJ( P@]U;V dԫ^ 4fߊF EHT1ts%wN[h$rk+TP־ULE6*@[iEX*G8Ȳ(@)@V@7lE6}ȱ%my$ ̥_?@Z͠VIB1P`+n+bڳ6bo1e ޯH'&lbshn6V@v(>kq7J1]M+$lN]P>Y,UlA԰bd- i n1K0aT .rd^>l]qVWq,6j',cF#rпߚO)Ac'4IHY|sRZHY+6.x`qgZh0k];Cd_f1Ǖji*XQ5 7RUujMRFer3nlfS>kJ~Hea2M]0qS"ѴҒd2V(!ኒ*5aHؖlsZ ۮ |P0Frj&QvFπ*ƚLDkh5F'ϑ cB @(9?ZV\OzQK,pJ!o+<څuhBٙ5;Q ?,j)ڻ}p?Q GXakpo?F G1TȲ?| ,5VlZɂ矺RUn,e2?MP_#7MȞH؏ڈ$jH2#Z'bH5#o*>?@klgWlq5~HހDzDpCO `;T\`$ǹ531yl?ԢYu|Bڔ5nK(۰<+<֭ 1څc{D fCR?\QqaT#26f:[ws߸=~^P~H$U#>~ g6[;|ia@LDQ1FO8ESb7$9ȩ8ķO"ȿy%@ݎ?z{MqjB@,C`>lț~E%pp<3Z}سJѺ\8?ڱ=)I٢z}噭m*%Gs.t{G1I=n⸽g2ѡYm A WI'F8HF0\Tq( )>KY!sp+4fK}\ 23jiO-)ٮj-K-ʙit[O#U0H,w{{827l̎l%R g9z!muBَ$_l_Һ)NҴ =P@WϏ@N  1h} @i\#2o}kh+5'Py8oZ4l2!Yf7'J>k&%@bܵK3YQn@bA%<#CHLA@j[`s@6hSc QN>\ WI=9WcD皉@7}'9VZfE, U:R`WP(P X(T p2l @((( @(@TH ̱1*vg&[;PB#ҽ'`8<~qo18ǽs`I9>k&@+@V@)`TTߙ-vӅfEkT~JNs\\ѰGq]Rtk*l}[PY~˞&:e5>B͛[m>xiES ' U%.gp[W1`Kcrr0k`p~_lU\HsR@* yq9{P-'褐1B PMP2PYP~Uɫf﷏UHli94Q`,4A[)@O?J3eq8} O9XBn dU `d~E# l P2UHj(> JÇU4c$' Nhꋴ͋,fD(S-7/}Tal;VCDK"/$d5)5Pbp2h92H_Rݙ[tCAFsNM[YKElM̆!hȗ?hy+IMR @(P @(Pi641;yPgq~ex&pU*Y?޲ [k Â6h a{LN@T%19v!fICͽ|ڀ3 {C26R 5rIPrq(J>WOr+GՔ;;,Ybq>Ok תm%CA9½֋3G`?c+ڏZ+adbj-X-MzԀ x>"NԲv< 2sڸjkHryc/Y5FXo 㟘qMFf#+/RoHsZNyjν/wqEm8WhRU]ҿiӯ\BП2#!иRnѳv9>8֮c t6X0QK nxßm0lF@J'PQBOd&3/p~ՓY1/W̪1{O8M^VF8kk]>E&b8#}J(u] 1?)kţM5ۆA`~j3PN9j^KmF$ }]ǻW?>涁Nk5KL tRɴۃ\WXHt3(jr+\~35_/5 JrOaSCI⋨ciѳ7 G<25G:NHȇ&[ri3hvUlnnQ s|E% aʿI /TXa,O(4SLh7}rY}K\!ʓUDvthP(zQD4g)t4_3I<0K! m'>H2m%73Oo)V c|vmY8jEك2sl6+ c j lѫYjO]HdB~Y?sq+N e>{!eÕ5՛$}yu8uecjYO-qg teo]|]reBB8^xiKsmKذkY" 6cTcF}Z4dt丅!U2wqZЎ̊W,r4jBaϞq?J7 K3„Fy (XP }z*yf. ki^ N+˳khdV~ 7-n BkpY:$8<6GvUJ1ɬOpAbm?4Q݊:Zso]%NL"L1iu{gEkhX;Y Hb0$  nrm?5]SI:(̒fV (ufE!*k/ث986`M*4rʃq<Ҷ0m^藺~ YR&d\0B@#4P T Vl &h Y(w{xp>s]֧MR VOm=ߋ\4d'G0/W5eiE[fY)@hd` sGyڽ Ew3E+,@! 6 7f.6m.oa|[Sl2T9`0Qǵfe=` cjX*[9<ɭY(̊~@sY)w[q:V: gE:vsRGKw QFx,*oBFU7EMci MOZ2T.G6TE[#&P @(ʹ!)(6hh݆؊JntTn Uds" U{s@c)p~=VlǻX\5oֽ$꘬dK5BEPQ6+ƬX쨵צu`Ė_1?c~zRB7o^դgqFҟ= .CIسzHb&wH*>「9!Ip7GMۿ'}[$f+)ޱ+V.i0*YKpҪζ0>洴,r~·*,'qfElQTdѼxĩkɤRh&YLBp;AD4w,,"'?xath$OЌVZk2FoA i+vp$a]}ќ{) ףo(bKW9'Ҫ^| ` c>EQFHQOYy?hs)>r?ڰh S'+fLR0AW9?MK(vssPp=Qϒ>\ae$ߛWU)Kl6,sec,זV ?U6`:][@osi'{'pxj8# sS@8x Nk}+\Nx(U&TX a`ݙ!Eq,ԜD~nrNZLMXPv${%qrd_Cr $Td6y-uivdCF iga+Fm&h<?p[qeZM?PS-ұUV a#'p6,f%g?"Lڊ9*H "T;}F JsfKs۶~|`\Ew ,<fNАח,{gq]`fu4X^KvKsXcknTC6Rv`vPԠs+I*N fHjp|=Io1NW {p8IcJX926>[9^ k0USLZR.Mي`|WB=3eR!N`>j59cΦU(܀od{'mg,%i4)tŸv s⺧` P@Ax P4|P NxSgˏ U{XCf@Ӹ'r5Uq(Ճ\t逇L(n/W)eMFܚ(,Ϭ\˼;yqfD:4*Ax'_(Yq^+?CDdjdd͠ՌpZ`&7E?Zi$cU]V`X P@UPP,^.{_c)՞~кc}ٶ1A5fI"7G3kdGoNwFVwx|æ#YtViW!}6F.^v8BfQvשw<4+>m'OQuy[$4pVCݖ +#pVI}qs0,O on01^ɓ֏Բ6ȷ+nm\9eq9=j|]Z=@+kmY^FR(wrfi G?ڤy{y\X'o/vJ!\*¼P\(氒\(U2_gk4<Kf&eP9o4X?Q@8Jf &lldhLyc *ncXSz_ "I!"@gYC~^Di%sQfcyTU;s2Hg8ڳk-KsZS%~)}PH|D(ۀ|I$yZK;8W*:J)!{Xt溒Y5#3,$F" K1;NځwySXo7hl+)iR9У|( KRCm(܁F>fS4 yWRY+.*@( \QxTVrI#@؍ {cjnMp F?Zz]l[kasUi!gImf#* nȮIgE7N~U\)[2r5E6W1ISkG_B7K14sFI8ٌJB?95!ub#݅cCP@lZYaqGϽe0#cŸl[EF崌?ڪfC((ly[1g܌lJ9iρ :VXz)AK:X^n??_jr멵V2p9lYjۣ+tBv7ذ/V"=}0NXn`0֚k-ijBTaJf'H%U?lүWyyirM/ ֿ7-Q$ ,mHA 96W #bہi$N]{V G]ߏtZ(#*Y ;y-zJ$?@AGF[% ;Tr>4s&GpB#t e[GC~c5)zX-m2Kp2}9Q%lQҺPl;.;?OM=U>ڛO> ta˧nxEAhldp/te7j5R4xO@W=M=஭ͬx$xϾ+vݚ ́F.2~BGk;J=y-|R>&\?6UsjZmgۿ(]Ďa2T}k.l=AݫM-ы0s Ho!َ6Ξ2)b[;AJr~¾ 2-@WMj@(Tn0Ҟ9R&)`gR>k }39P?Yz]ɺJ2G9kxbgڿxӒXs\j{ +bt,|k-0( De梳D` Ird鬷x1k5FYxO y\Z|jђdi@m5v0F 62Y%~hm6v洡`dB+KE'mtZTf̱1@9"t@7:ޱX|Wpi7-q7|B˹61 xp$2~wS~_2IiV >1s֝eejV/%겪~(ɍ,H09-]ɶ'L~|+,Vnz uOZL,wR\Iao ZGtYY۷0cx[cړxJia]*䎾4KQt'MkWfQk+ H04q##34p"W+RJ[7yݛir|UDI^u/L[E]L16M#ts2K#޲ckGTfonF5X.*b9guN.,#;s| BʒZ7fӢu3C?n%!KPv$H皓P+tGkUu7X[$##QۄD-ijU*Ҭ2K^T.C8952ޯkojMsokP@% PƎFE(;rs\4hi(no!:!ut#“(BygBwU3!Yz>-_w*Vy{),&+Onv"]Է$ } 8 гE.q>jIssrJ>4 FkRQΘv f` |..guպk,O*4ygW[>T|Wi+JJqoofzu=w% Ӻ}U$PB%)!0d|H KN+dnR4fqoZ:#iL3-yWc>7HKrI҃ Xݠ'GGBi>x-O?zhaiV a#636Sv~t(n-kQ"h%*i}qq>յK/ln5fwkF˄cId67UImdS$q?MƩRgffxr/&LR>ZYI*U4T+Af#dpؙwQYz. H}EOVy7O;IuRܬD bhd {+ɧԭ&\?QɈ\JvկlÖQM̖A<Su^|R1s@mƭ;+6Hόq R`yFܨ<'y1/ h *Rf2~m͏DSgUNj6rh982@ap0* `a`w> FM$C&h c`O-k$(&5ܐVVor0?S%Rl RV5{ YnF=D)P@,Ahj *Px+dhlʠ 4@\FVP #;8H>q@gP<CfI#ۃ~O(J:<0[:^K,4},;R-p8l+R^-ӿ+|>Pnґǿ'<~f_40;v'QʹpN1!ߗ@ɜP=~=E+86ROv_ j!ٻfC .rNtn۷y콋vj]O5ӂ8ܬO?]^Vͫ"-c"Wrqn2M%p]g<9?Fk=63nHs;UnQd:n@p<}.ӋTYɺH͘,+Y?v^b?1N‐0Ki4K r y5WCXY\0 ʹr)L2 ;[nN22q椴&mp+g$H#y@HI`&Բm@Y>H2~bs#e+Ŗ͘%8ϽF PnրȌS歃[RS$שa;2CG[ Y~5Vwmd H5ݙ[m͟X%-"~UJK P,8;t#`{Q.s%{,q[(A 1H9+56J3cQbL}|_̵NlX{?7Q^_`&&Ax.rw>gtz4OKzNR(n; ]?KO!R,@g#EyCIVmW.՞FFu;+ qfl3Eʣ<>[`VnIɞsT'[i\+)/)c#6 N:=\>2e}zΦf]F~%W4 szB 8*T,/Oc;o:OYycIٟ ʲ `qnUl|tXCB]ZOꝾw쓹q ||y6 ǃ^~ο~^a]bj:LR]Ym?STG r8!c1ϏK{^bW(z_ͷ87Z\{ȈM!$Q3cH%8u)Mxv_y蕜Ot-cZK;. ._cs2 v+[/EnՎUx,UNmkM]PwZ]͈=QxX2e@+(oPIFQ'rj׿6djc( 8׺SQ1G~ֽ5Maqe8'vԸlmak~bNi/ Rk0 ʤa}̼U{o> FyhFi:ZcȹZ|0 5' [˘5WD)-#3aB2I8ko%zW]9״n^n"zkJ,[ve2C/Ôe?JQv4|+3u}g$h4K.OhڸAȹr$]jʫ+Vf=tcv}-VqQ!& VrdglB}Ee<鄸llc9Qdhl( e/ɠḨ4%5hR 4e\@ 1ցbqY07Zl j9 &`3Ҍ].(@Pg@Q<( P DHNJ AZd%V̘ *|ڔ`=@ ܄.<~Q:qT9Ϸހi2㟦>5Or ~= FUq9ǃ*,I 跟9+.^<19xἁ\)/R5G&9$Ϸ qڄe0˴ǸS I9_qLّ@ߜAFlqQ &7C@U$PcP6>ՐT@Yh m@_Ƞ2\A$бV*pJ0e$AFj(J!`{U B'o@F19\g@p[g 14]ˍ糒x2ao\\Ӷ8j0sʑk/*ٱ#>a`7շX(һQRw~e≃(?SV̥͘x'5P#x'Q8z C;PA,0&ݙ2mV%gMRuǻ YD%BF9GkQq2n%3䜓Te0,\>:JYTHpvg>JdD6< 0 ${STnf<z ֟K>dS-&-Ǎb 0 qqqcQR;8 ~?J-^;I$;FÚ)ǵF Zn0383FǑ@b@bhqe$o?_bdU@IH GkT3~HT cie7hMaJ^ k~lVTw_ 1d#{E>LѐXy84eW'3$?75lJA<*1\p0y Єi Y x0 r*Y]"<,Z̑3xPc &73@oxnq* ă3~_8ִ Tcgrry` >ޖf!>3vK4dF1#3gr &R'Ub6VOPMe' gJpA9.@+E C|4W&+=J9Uf_jՇlDbۃ[ޞ1Plx )8x!YXn g'8OSYӵO?6~8B 3uJ)Ņ!KMhԷ(۲&<( ?ާĬu3cl>둏5}Bzw-5Y dqçbbQ8Y 8{rɖNqip*FL~EaP>Pq5xBQ n"lX >r#md6v4gtT?4csf*r }HzDNL8uQ BkXTAw*wrr2G8oj溺8Qvh&'|AsTڴ>XfGǀ=OVaUtshHJӜg*X=C@{Z`'S"& m) cW*4F1YP݁Q0zծuco[ڂ8بbۜƠevːcj~o 3}lu@uIXzE3D(@,{\禥Wla4!RwpT~ti A]8@ZP @( h>(`h Mp^jئ<>O+ \YLvi&hWppdaQqֆdˏC57;~L"fsB+iVj֒-#:"AAe$ ga!:zmrwzE2klS%"61$+2FύQ9!Xnߚ@3Im=z>f>O84Ԭ c P I+\@R mP'@52MuR@TP =͗@kkZu逺(V5=\'kyYҾ΃i}CmӚaO%uGPYVċ)ZG 8/Rf#tٻIYn sZ<+uelD&4rݶ(dmmn8æ}pp/Qw*%FV؛mrO'I&Yf {]t[/koh,,@XQǁc>0Mɤ-/[O,'9'$雍9)}# ~FBqE~>bj2m5_::YtGWպKp!QC{e3*CCK{M(Mntm6Y֭F;֎(Eh8P PS<隂RV뜬uw繕oG42͇P_ϦhF[,8{1qYܶR{.W;' qNIDWhWr|TԵmvK dHRAr\KCorsbX׷NPҌc5T^3oQkӨ4KkWnt=9]w aayj9̟W:dS/;Bzhy=vK4onDdaU\]UL/9ͦgrFTy"4tD:n%{kM!%%ɕkyFpi;:M5]I>]2sˡ:!]wNk; zVI-V2'u+kOb꿝Owim #1G`frό.z4n`gk:zM ^0BɓtA|`yhHˇh'GKt[N+m$PIf_tZI ,Y&RZrI|"VZ{o,miRPdžF/x\:m<+4aH[@E3(Lb3̄@jݔޏ݅[ak_ɖ=TFw/*b  Gm2Y[ԌZ6̬M 6CZKX ԔS" iǟֱ!l,TɄA ܂3IrFc5ry40W˃;OqC'F [[{q!kaAf[xRp8X( Ce >5FQ+r=E1W}+"|h3j ?FTFJ8*B, HȪB4t PQt K\2gqxm3L-y{q '婭:Ҽ+uoJu^kpE:E ,Xq:`p_'<{/'4}?krj!|f {~h& - jx4F 3Ck!{R :̤298I=YW>2YSPQ=hlH Oִ h v9DXcBcff ՠe3FX!B\7<?Z71y8@ULz犕d]H@4E Xǎ)eo?R*(NhJ04/ d'f9'sǁ@]T/?l rds@N?';s;qX=l2qֆ @ 3g@b`@@A~ڀax1G, w ch &1sRDx3nM޵̪w7҈97w nFC~kkɨ !@F>Yr11\eHVM 7`H|Ĭ~53K(4{DQpk,eX(,xFXɂ~>i 7& X*HaZj*c 8'Qk@3b? s?;FrFMd%Qh6.T0  E$pT3rj2# HQU\`܀?z9i˟⥃&_Fs*jn{\Hc"]p0~b(^>G-Q#'s` -WZ9ݿ#QVrB}4'Rnܖpn9FEoKbF!81\'[!gܬFObi?1 F,1acYj{4@p8 #ra@b+o"+2Ҽ"ٹ.3y>h Koy-֭"F0AdNdk ʮ˓4>?mOu%C5FbB"7˕60ڪ#XR!l<1@A7̣s@g f0.qOIv]', l!IϏ$8Y+}yڔ v1,s*3?U~qO@fw. 34ǟz0@03#ZTUvfnwpP\{֚%K(;R5)Ԧ{b-~ry+pKmߺ'rBo~|]8R&94^ģJ:}+;MQ[l60q?\b i47o+˘`J\ m gy1aYS`j$؏ֹg,Bi"o $O>-p{>e,W'>AO߂YEȓWXDŽ./Uie?LbCe x GTZ; 5 ֪g*ǵ&ЦdHRyWc:D*!8>B$ԫ%R{ f @|^|kOhX a^WkO؍ M$ +|`m+'FhR4$>br0E#l\ O 2Ze_XGZ]NRY^.if.K1>I|)MG(W"Q u-]h nDTXTV ѱ`IRЊ֫."lcd>iimdgoڧMV2ѫ-a}.< 3FH[a򬤆Vysjp~Z5#l^ݥI~0 "#ێ1>Չi9Kھ[>}Ԑ^FLSpeZ"$`y愖 !&ݶڰvaoD4'wش`v-ﱐbVM pCAӨ閲iTq%u'FIr׽m/s~rq]1_pa3Fw.Uw{ҠlX\FY\SGkEX.EAly)(sw?a/'洭 bkm3%  V[_X۩ç%hg2Oœ/yV-QWZ˪Gygyi r*c mc’FkO =mM6K|N:Vz]OdsswLdIE1/*2@GBTad߿-z>i%FCp|2m.P+s`cgOg<}U]}=i5UiR$Hd p)n l7(f$Ku UKwUf5>Gmn:[@Ӵ}qNҚk;G FRi6$ NyI|ieO]WvaWMcbs,# 7<+N2rI.r}_P=Q?(+nt㻑by- S XypҕQk&W]W;WmԞI0kUݜ:W6AjDLKvwHZb>Q~1%)WON͚Ŏ5i Cg#t/8 !~L_pn|#(=QPK+jqa5)~gRǨ"w5{ ϳ# ˫J .W"}[.#*iMn]/uOml,>$8^N'۱ώ){-bB]TGp $D1pUUʀK9>O5,0Ponxݷ5]`Z bp3{}1|q4Kj d|gy@RY5fkF``  ; 1Nu7Wubڌ|F'ʲj&'ڐRFr+PG^MXI֭HCwm+J2aу8ݳ5̣g8}k]Kױuw-(]vD Ӝ^GOMz"ʸDZ$^ dZm _4SEww3Y h۹X|9nruc62~pq^A\,e2Ǐ5A{jIoBv" &ql1P -\ᦡmwwh dyQ`f;6d  ~APʰ(d@P1#u"B8fA Wρ@P/(42dj͛V:Jun.s`o\utai5:8JO;ff9$I>IV#uq]/4@c?j '`#0JցI5l(ː>lͰV.(hs( #x((J2m 9Pw\`ێ92W@y@_xn2!`9;Fp=]'k 6ҭylQ>ŒeU<%sa(F'O4Mk"0tH1՘74b]%nD0VlsmW x;$d\2ɬji﫼;kWS,PM(4FIճ2gi@*LyQ3yAqo g2Mdfx80Wgڀ 2s@QZ(#GPUn* 'DђV?e;&uaWyvQ*hxcb+kQ Gr˨+\*JDCdeRX|zǀ4zҴM 8j#`cq?׊vRYPIUeQࢨEMzӘ =6ma(={zz1۹rݼpys.$/qd,ܜcڛأ2(ώjR*Q~RAuІ׆RhU[6 ާ3|M7&)$(v8~4}8v^ .T=< 1 gjKGZ0}¸d`3Z"B$r}`_419ǜfsdpW@s?d rhl2HҲ rHh̲FrBIMe&02w@lC47rFC\ ؃|)??sTe2rV#< (ٙ~CQ {6zHq}~h`#g8?J_(m\}~y!e0F}YGO,w0{Z"<+ˠl8݃8M6abI=̲ٶy~HR89H]S4ZȌa$c$fYH]#S!tLʯ@aA"{ZiAxE54lGak qb4 嘟sPr,qHlV5c5!yh6 Tgq8E8wc er(m!F\y9`,fRv?+~[RFEօsl(sָj%qh%Y]FEz ږm# #(QήmTJY5:\/JrE܀`GWED-)|Ov-5#䯷9ny5nHcYA8;я [^!["EN HUT$WO9K̕+0O2lȮ!y12v+"3%#۱ӚjB̞oO$$oBIy5{)&qŒO 0=+k3ߪ }ֵTq+P tj)jim۫Z48 Ȅ*Js_I˵ lw ?*f}J ]QܸッPNGku .Kn]? ?{4+>}{7R|!N YI72ybW(_O>rjX~J1jOfeT[yaut.x88N *Wyo$jؚ^Ԯ'nQbY݈X G*y`=N :b[^:܅$*, J"gIkvv8]kǮFK/|]:]Ϧ&=]w+{Eգ6[%č.*;͏Vxګ,eԗ-n"Yv%$c%u~NFu5j:Zmկ]>i8ަz]#j^v[)LWvvͣ'lSi$7H}x֪M'W7{k}'X?+LeZJOj҈mm2K+ $Ԏ,#)YNa=N?Osi,W"h~!,Uhٔ^osS|wh,]onO\gк(KFz;{}@ьB_k"$+Op7W^MmԚRnWkqn;5%O/!#yZ춽=sk*4cFX%NjV|ɆU.}R mx6?c-Q>{h-#PwaM-cdw.gfzDxX .KAIZ,-[WUSOQzSnW^eŵ|#qu x{mp[Qj|MMY~~ rUH2itrM԰[k VJm; VԀpE"9 W~'qmK+_W&*;6^uT-zoAo:jZkvUt 0iX`mgMa;n^_s8( U'{KtKp@(a]D{Vxy /?e~SYE3J4iNq H>>i]ҿZϪYꩡ_X=!~!wZd&>oc&|[~t[qܛ ڒ\gnԞ[^Bc "1$ī x ^l60vߊIjfu ޜ,,n&gNmD&L&༒>_<ע0"/gXd4rDl9ۇ.ںFz{ eBVP X>ˁXq^_SI㢎w+GEaQqsִ^=`r@aڶ GCn|PzKzStVyDp\#"Vm?Zᩭ ,ͥx˥`%|~hXnz|1ʹ#9 8J_>W~5˻ vMk8Hi;2B,WOI*|~};"m-.gB@a]m?jOth3aTUT z@+km5q ss% JT(,=YG WHt;%_s#> #-ݚr3_ p[)m=9Za[hB㹰~wwsf.W狺utzkS|9kJGmලO2rFgUIvT ۊnۀ͛[YoG{nV#(,7}2y'ۚ֌N8Eu2 gBѰ}Bhͬ[[\u$2 hv1e ۇ6F( cչ.--9 k6Tpsq\~kU?CepnnMKh2콹I>]r~V\Ξ5Nה4}1bgGK3O@sso5>ZfLʌ$ b@>yf e1"DFܫ/эHOwf4Dd7 VlYuwVřVQ-#VBFxH'jy4P@>( eq.]$\X|`c%ed$w1yI{G Xo9u _eh[:[2Ʋ̶r \l}rM t?z DSJ@Q@r(`S5Wk'oךcڀ@|P@TD2GZ6NGh , Rx#h 'rOG!'(a|J7Siޝ,1t?Ua?qYT֭3HũJu5,3~ēPU{"NerlUP @( T^;]!c|FJ2|c1*W2rrkhSt,m܆7!P>Q r|J%A6սfvpAv$K23F(1+h3 UOi@/ڀ8>( ;g?Bђd '$D kǷP2E h8:Z%b3-jHY{(T 3Am"YX˸͔(DD61(OyeXU8VU!@82F<0qT~HĺЄ+iVcT|18V^1 $A'*?ku\6u8EWPFΥ2QRFr[rsԆNgr ϑ5ІH/bGURU . 8ϜW74w`Z~SicdP26)ƻrܠqP5,ptlO2Mde(F帡,nFFN8?jQ'h #}l@ {/kqlymݪ>壡f6ziWDK>qo INe --Ʀ`ғI=T(v!{# +INjF^R6|kIك`|U6dw9F`"[q@9lvФ~ rF,`r<{Ӏei2#aElM N&YC$ќ{o p$8$jؚBJT`0\YYtʥ%3*|sFeW 'PjJq"'h(3m@?|l  Pծ=mNx/5H^>_ʀ eN<㧯Uv`bcfd’{p}Auk}hEvM4|s&㝒6/tf7څ}9_92mWPA?oZ]Bb?uy%=R[R4(QYtȬ9 r-FM-ODSzb kQ!GBz`{4e[^˨Y(s{#+2{>_] Xd@p5 ]mT p2?~89%!fHv^}Mm#1>Mxe&lq4FJ}Zڑՠ(_\4ZU@WE+TP*9P, 9#ͰtNMBR >ˁ+rp[VjI]<ں|Y,Y)InMk- P+b&@(hSh"pj@P(m[ZOxHY?K+?O~?IiS]OS x"wrgqlcJtG6ҮΟDU7vRd5"n0"ip M{{WpH>>X.&<ڋU* twwzM9Io4~1X3/!:~Nm:{H--YCess lKgDI݊#; #Nݿ}47Jsc sou#M=qF'̱\OuR4I>XLGwoqvmINJuwXŦ>ekgLʥ6%XH^QZ5+qzzZ;{y$2wzoTKNTh`Dk Z3 Ќw~lrkϭ8on['{/`)?VtZ SڥOIEq;*7in#UwpО{kve_nn7w,"|ۤ/4 6Qf c/H.p|Cώ#$$(-Wy%Wco6]?~WpKhz+wWF[a $2JOOjMwt(Ƶ^M=eZ+#kz7I[a $2F0j~}7bIV0s(9?3Qu<^tʉ k,QdGjI `p8P}m=K}نc/GvTϧ/m5r/ht$[j 8SuޔqxìaI?бGmK-EYנtOmn5; akǭsպUbK-p~ǞzwNk9mV+Kry!,(#zPd'4%UI$-'hZVoKET!,h{~4[}?VT&Nڷk ְs>zGXEwVeGڝVxs p|}|eӦTی,'i%/zy46:5֣z1i$gQs=Y E.v$.O}&XOjؤK=ٿ8:ӽA^]cgBHnn"GېF8JDۦ;|ޤZXMY.;nM-.RK~QhNtΡ{ {iu=MNvf+JmG[u}kuPܣ8'tIܟeju޻!kn"lktkdXVy-Kpohq_CCRҒn=.Mqxa(xZQieV`̍+< csҵK6nPѤ$W6\0_ 7YpT3Gqc H@U8R9l`q`À&f6NYH8g+;ΜM6ڮma1M`K-G$~'/v3$%(!eVS.1oWRI<'xu+IJ8>)9ϵО9GX{ "ursE=sS"0Ugy0oy϶))x_*)gUJnk`aOԒXVH;!;` Vs>+/KLpz .5ޫy6ڛm]\[G9UV0>I&5W*-k5qu}՗w?vcr.I~&BLcsʂ͵z$*U/jOڽNy7[&Y HD71>ĀVfbc]>aL5s,U滿T!;cqc?Y W1 b̲DGPe 0rFxI+Tl!HevwێO LWk@iZBkiq 9JhDxX:U鷿0KPbtLv̎cq ϊr˪ kfy!pѺ.)ak/̾W9(z?Nkfol3@Typ|-@fE66@c*G@PB@c$(9Plp† 愣r T/ކ ކ˦|Z 7BȠ7줶 7(f1mBɑV98^*O}?'YOGqy;.#HS#bC**wmOJ);NVrnCKY-/!ycep&)6(*YC!e$WCwAl>CU@5зk[ t̑96˻qȮrQg4W@n3͸F죐?e*%֌1ǎ( q-흣!*y<\Sdb,J)%W<qlf2W5A[q 8ޖ ז3"l)#rq@?aY++24vH,n+i#=ͬk` } /Nm^JHaTd! TQ1McR{ynjTkZZ;ݐ0t;N2r}ETY@ pkK&:R,tk3dN3RsPV(n<*PkHІ>A2*1\P>R(Z]!2D@/|{Ge瓚ncImڷuhAf^Y2P(';vc8J{kX~9:9Ac\#ƶr+V;@m-2 |EuD^K'R# ~K0W#2 xǜU0V[&dv#2Ƽgh"{qGcmg㚨ٲbH٥\,_0)m>$\~߻9"G!w)@Qs EK%2XqVSk6lʓF<{PvrhD Ȫ4eڀŁ'hl3(nSIP XaV%*A\dc>Dq;sjT*L16 8}y*'aeݓ35AQ{}( VP͌#6YLlnI ?=qjhu^q֪@ܔ = c%@5՞c OL%؂8}>Ww*G^ /=*}GlyEt[ C԰G x"( G+go9XǪҒ6Ӭ~8Kk@*ʕPG>O־9=-w7 yRGHʰǟ#2%,9R,oO78<ӕl.,?(ӍCebD69|}@l< qCfћ|9ɂC>ZJ{3:)3m9 2d$PÃ}?J7bnRI*79?nk@m_ qx)@FqilINO}OވAl0*5g>u ~` }3?VCV᥉Zi @$ ?G喎k {m U gG OSrx*G%(DP+ PQ gX?J0,K1>IRvV( ;cv<%Hpps\QY݋{[>שK0lC3E"]C,N;SA'T͚Yhb6RaEjɜ:?O5G.]"rܘ =W9i'h]CҽI|5X`ը2$1≸ `O(]jSΩ$X/+[]GfM);HP}Ϗ\M!i+pqTbt ݚ"T @*5`~SqM7mEaKgdWdϺ,gv/͞w)ce;h~*$g~Z'O̼n3;sX1C8c62|}u 1ڕ1 Ǹ+ A$ɯ4fokܤdTrMF)QD1ZZk*0+˘`MK@S(h݁&%@Vܴ%ɍ%H2b~nˍwAzam4[kS5ča $K#čѯʁN;ٹܭ_>[^X*@P [MIWTҿertBN5+5)- ʝ{}J35禵c'nڜTGNRKuFj3kTNjE*/Ĉ峳rm]rدWOiB.[TR\治.g,u~XQ\%׾w|gwӞKOMJvuwfi6zi|kc(ŀ`lziY㴯ܼЩ5hgYkv$kkwURx@>eܻ]̈$9aRW<5A:iu5ԥ)nvˎ2SvӅ;kwO jX?ɆݯB&:Qi泆٩ⷓl".y:Ӽ[joϴQ5;./Y-TcEy[n Dnș%6FǍF)%',|-,sd~ٽUkoOzjV:M_]E~^=R/,s[#y~.7_R}htDԬ=ol.یVweTh )uq`OvF\W+ڥ0_S5Tlt/x4"Kͺz,C8Bu|dXzeӭ۩zko*#㥯Zt`ЮUӵIzkU渉PNb mQKnHˣ^{&tmx~mcTmshH'ѴAUBg=Q+sFhhwwJYvx.k 5Vq)apQp'kwlG 6[n=dոݥW*ljz˯=LJ[CmX:U/Үi,k!>ѝA^?EtU'gGZ:Ikfx-UoϨhKsߌ׭NyUUǂR=Dh6c 4Y lļ[py%Qh܎}4jFKy.'̱ ,a9Fްr_VW6w">MImEφʼQߏ*SM[p_v]k;Z[eXsCsrs#j'6m`tM#nDp֧‘33%nفHRٕsTnEiJ;6:T ¡HMѣH mvYO᰿JZϷjzF;K_RʖM0۸ةq+q\YkF Iնp9ۯ"[-mcm }?[_w\ŮN[>E Ƙ>mjQɒI9Ybu)f_~?cGO׵-" "y-㽄܈N4EnG,N5m9+kDLv:CkZPMmsl3Yn c`@D(̘6~Quv9->g)>ֈYcbp .HN>+̘.-J]f)Y0HrȫZ⸘~T.6*0mh,Dz2FU6J k1MYk@*8i r$yZ EĀRزlMBcVq2^Ƕ"Dol>}ÔԷ]⪫7|0%p-S,n$Adm ܻsW{K+"8גaC%4ڀ&y&I><0= ,Gh z$f4"ˌj#ϊ?SAD +O&b q#;V` N|N>DM]d7ƮBȠ@>yj'h c5Hs nh ˸(ggѣ#}Ry88m_LQx5~,I@FE  Yoq|ǁ@dW9+>XtKu>7M !1gn[9ϵy:_ nV4Q${}bf$vBA x5#r$8 4j}BecWF(4p*f1ګǜifRGj/F[`q9 ( 1A%HȑfxV#YqeU!AUQV i:%ȒPTug`푀ʖaэ4I:9o +,z꽏]gYDֶ:N,0lmv)_Ow>RV|zYQ y{3fK0C) Y&Vr9bhF\͓eG-~d҈Wd{BIڠI8Ռ4Vqw-$3$iBP^ <>NMf0Q1+ x njE Ú 81G?zP=SMH'oEВ$icFTBr qӓwj{]bp$]mrFM!c rT!ByD۔Ior+vjU4Nxɧ fdA\a|4*Gك.7qh*r9Pkxe"#ExQtUUXr9湽QG3?.,2bDw@CF]JEzÚmDյH7$κp"`ڀ5,y coҁ9hق\{~FhKw\Hkך5]\e\J&`+GY2Qj`W K@V@'`VP "#9ڃ&7?I㟧]refݏl`֡: X6spsu2ͷ`&BζwoL6PXF#;6+!dPmAfNUZ _>1[eJ p]?N>(PF ._>ޅC2eA,rp>¢lV=tk.%F6q2y@wJtoQ7u$Y)FsN Br ~Z3"dӬ(w690tDu{Һ7TkbRQkw";SF̬ltz:c9.I&ϫԞU[eX~}OUh71a|VT/[g$tI#oW߉59';he-`wtIHY>Rk'-:Wo޿¯''O/]F gEt9E$L8e`89;gNRzKnkMBR{˔IB]~?.N41IG?[mj?X%l_[hOb>t^I##A!}̚\\+p%ۂٯYw[k ̰06bb >n(IrK6@]L[(Cd֋ZQG{.cs{mo T3\5[V_v+8ğ01+ '@fNO4ĩv$>Z`=[UnF Q;ֶp( 2APq>NJYFsZlKru"|@Aχ 01 OrU4[8N1}5A.}Ef$ bHE$\شӮ3/%BʱFͲ$yh8U8ޤ>fW +G9 ]{y V*~_Ҁ#~P<@Z [+J6eVb ez6S6Kʑڀ=r);Nݾq(m`öp?-T'f $;THKXyֲZs%t`spqy5e%DP @(6`bp?+ rKGvU;TϷֽQR3F?ڶѣK[Ȥ^x,8ߐ h Hgk7NLC:#~nzUp֣^V?^rѽͶzcw< [.v<6V%hBEvG'_U BIz^ef?'ft?MzSҭB]=n-]]++-z[N;ksRN⣓z{:7QiVѭW7Cueg+KXHBWU]zO$O\$Gkzz#d1pQ],2FoWF:o']nƏtvi:U鶭6 ˶ᜂ{3! 7]/4Fg^ n۫tmϸ`x.-ѐ:m$R]p +Z;_dw_$Ns龽n캺+q?KZ*G<)TwX1t%N~+H7U$k*Jջy$<ݥ]mKah^D,&W^$6;~fը,-{K.\%x?nϪ}u~uWNiLR\75JL֭V-#~C_uюmo挚JKpi]#O>zek=;{P# %{{hg 1[@gFd/n>UUJUE4ԚnTnQs`?dIҽ@d z6mmeqٕvp3;" ̙.^~z۪įڪM;Р/z>P4OX^/mX\UBW9+KUE>_$Sg]WY'[Xn-pbi0sz$]-]p<?\@ӧ5[ՓɢM,b*2c* p<>{x)s4~zf;* n.e` vc9&n+tǚDK.M/ hkp6vo#vs%~VNO99zQGYOXiis% vd I"F XW}=V_lg[ e'2lg|xyxCAְ =;Cbȋ݁.%lJdv TaISI7s]|3fK5~ؙ;[vK\{ӊR]ijufZ]q-P|a)#GG᪦xl97R-BMb Qѵ2p0/s,A:pZj~^'*}^hR_#a!bFa=IzRϷl.̍|vV(~tQFH*#HoD5ie ;J`eUwk1Dȱ".):*[ VmqK:TMszԓjltX 8;F1}$G 1^z]$׶ܲʱ+`d0Px\%ڒ᪾/M]v!%c8IPNB?9a3Ͻvrih $Hg|0GUV9Rrv)'dT YfY$+r sYRZ%]@#Aʐ`8>4`"'"6 ;xK永w- hS+~5-<3RnˤzxҬQ>Y䐅UQǀOǪ#\/󷒥x=vXi?a=c=sjl glR+ZͻMEM5iyoY2 &.%Z؍̣82G{e]}Yd2I'kIV5l *A,wz #q##Xie,>eR|XzRhmg(cL"n Ve*mqǰLPGrE zwAp3 >]xyoR%4U$ a Ͻtq,yVib19$$hp RLnU%1s\D$qr6E, !uJXW?Ԡ0+rQJFvIa gc:6r>OhӟTv7|W-MerɚId$ ˬ{Mn~ D&UȴG5`Vp+ i*|kS*vO,vR#" h @*X.]նJ)BDx)erMeɲGe$$u2K ]~`O GD(Ӵ}. a!g>,QG݈556GsxMe*>BA珸?c[Hdd8?j ;[jg ~sZ@[E ;0rGg;@\,1roIǥ:>m/OԾ.Hckؙމdq"cf6'5z{v>گ/6(+7ܓ^\r$c$Y|٪0JF5.ɱE ][싴}cDdZDj% $ǚ꫑ۂXyʒ zeΗX1X kdhŭ q{e4v9M8)#dSF˻%[8Ԫ-ΡM~pC\29@_@)lAJkt? 絓OI`+d,6*p6Fw01seYp(?O*9Րd;?"qZR# 44Arҡ$"8 MxInB;zNjjV:"-ܲB8IP28ȯVԍk2yxW`eR2+ q?u84&Ac,hd]opx5AKuN=dMF$8Vs^kT|2yrrMX쵺wCdɼ1<4ʎ=e/06m2YݫD C~#8 ǞjI r!FHǸ8v mPS̮1(ցvU Hh3>~6gkNЭ#x40gDk, ?FN6|{In8Fhb >2@$}:`ӭ] +`P @+ VP 40pb5#. tzse+OjE:Nq%nY2WAnj`s#x4Amp ~Xx#$ "dlFrPhs Fp~^Vy  cq*=~M,gSSӅ?.2T_IV T 4M lpAy0԰(Ղ\fj뙡@(bj+/\Z` |xpJ6#ٔ 3ZS%&Im}2q}61GX 4F )C&J*cp*Orj,Fl P @(mi$@*6Egzi;V=Ct7/O]|-܌˴XU:S Mt t+6ֺrjZݥ2GռirF Xu:զm~ҷWf"`VԚ]?eoo&fjSZ\"H O#Iwm QiU)O%^ݟt}B}K--͜eXDL[*N섬΂9w::z)j7jOw8++mv:3hO{Xiڅơnvjwrqk@Z{Qn%V JWO+dܜÓO9Jtz^A7ꗽQ-#itE7pK!4̛7 `~TMMiMysO[݆mJ+*[FWz^k2uOж m cHе9`3 r㺷2ʽ@g=|IJҎ>򽅂?$~sϩKn"/J!u[LWRnyª>:~[uv/-{,#}" KynK[|w%`,e9f $=dZPug[q6y4V K:nl!l{\$Mytz]-RMߖӓgֺK}2MWV׵^4nm,,k$՚i_ ?(W I|EGwI5ŵUTxMӽ6[.)Q.m]b6+ jkƔ"^NRQsYmtgoo9Y$[tLc9W8MHkmo[kI*k۰oNltn{KKqjDz$1XҖ]ݬTqYvӶv?(7gpX_-YAo[NQᰍZ5 uFTn6QrmY?QyǪ11#0Ӏ(狸ZHA3 x6UY*PNrڰ<:=O׮}_Ե=]Mi7[!4f%\YU\MJ6mvhZ.k+7koK\k;%،BC9Ċs`2U K X} m"ZMfT-PA69T0bę)v3?#ߧ/V"{o\>ǚEWMזoȞ;;qѺ˶H{`276ۻ?-5kU|oMݭޱ,z](."wwdWgaގu,=sfx7B~ X2edl]CsZn/WlmwMm-a5 q"C7]w.2N׊98ӯӓ-b?Bn M5kdOyY]Ό#kYSJ'upj SG=I7eXXrqU~UVVY$ZKG┬H:VF kkS~UQuq˲1k| [{7 nq" (J7>v>0YV|m>si;\YޞF(n/$<Ϋ$F[k.֫ \N,P{O59k:r"3# RrT#q_oZjk 95NGV=K^K׽n1Kr%2XM˪ҚZZzg]Mev>O׾ q&uԩF5^\[AmR j&;Uң??].M4I|jwjOrm,iCԒ;Y;"4(O rGKf78s2)A PK ۟zh?(QN0 "]-I_[i mrfvF9W?1Id[ȉY}R+;(`H(NԪQ嶾̹;O8?^XJPGPm;T.1',F#DG~hok53#4DRPĶJmo<}{27rð,:"I0bA*_5w`w{=f #PaP3\*b,'%6c?J(ߵf^ܸ$xk@O= Qրp0q΀ndq 62O֨7#pцf]NFӐr1灎xYj&KNh?0{g7(٤ eN$ F \Ԛ٪8n(=Wptt+ccv+ݍJ.BcR.J~OgQ KbNɮ#sڭbC| 8a54cn=_u@3Ƞ,ٴnf %HU)MThf' fNTk| s@ x.4Hݷ{q P݌C r dgԔlѨs5cl5'ڀ֞4>~TotNn~}QW~22G\&LE4dܴFO֢R ?Z)'$f-;c#h4vd<֡тjS &ZᲖs]a)E]INOUVP @(@R}nU&tiT>?֠푣kq=q`S&"0a#E**QZaK#f891j}!ĶSruOuN@\_LD,q)wIYQG՘=qqыYeNˤ^-k4;A4s%%HљXrd~9uN5Z<(\W}B-'w^y^ajt '5F3R>+? \e]>P9n\=$V !S w1)8Xs5>q*4AKcB)GrqlJPȮ}T eE60~-mn-{Uw|{~hP]254+6K>~"pHdnI =)m>MԺTI,1jܼq !lI;Qs\jhi-((.K<Ϲ'qukm;DM?NF{;TE2n (=!yf7)FK)v[0u.]*t塷z$fwL cXJ3K,'_\qF =Ҹ}pSWsFI#ϟj%D`.r⭔qysm ԯ-F,o9~ڞqry5:qM_ ʹH&6FÐr1ۑ$( `8|ϊvP'~ݳc.]g'Ͽa?XΗ)qȼ_vR?Hv͟j̷Zߟj y ~մNْrX9O}2;m`}`_iq܂[+) 'x;0x9r[pq٩@A\5A!Z5*++`S}k5 '5P#12Mtx`q\4RLlN+&hȣZ+Th XU*PV=n=kOxٛiR)VF%BB*yjŪ!\^̰ o H#eRwx!['-7Ov}mWFn.$tWI4ФpD!Z8elWCBIԪw)Zj1o(L}Jkn^Vyc_SۉƑBaR{NDqA 6u:ol$y|5⻜_s1iuRj}NdwrB6*9HIe'ծWuFO=](6o=%絏R6ZOf٘3C(RGeukkpUK rJAPCX[>E)Q#frcwR,q9MiRko7}FOHZ=K^֮RH.4t[[E~&{G1uݙuIujPJ.n]M//"Tr,,Cn{*mm{GQ87S3F"'K{KasYG+m/ufAo$k=von FXml kO-R]hkVn ^E!iL .壇3LDH%R?C&rJ5Zô'HS>^M[aM/euy>5im Ȫ-̑m2G^m>InimS]T\UCNoIvZ@?K1jE,#ɲUc{rX䑧=ŕZHbEk.M)5QZxKÏ;<.4ޗ_u:ޭk(cq6Ɖ"so3s -iOuNkJ:(4柯R^E߬Կ~ֶzZC614hg>{~r=IdKۗ}D֗J4mOnymGg1rN칖YuQuouy_Ze4D{.㌓EET^qͻ6ӎ6{Mcj,aԖ[dyD1Oor7sd )eAU;T(uid;4`~jUlg܍TmcVfh3DE*ȣ6ڽMtxoD9ԕi䍾Q!JE|b+{_BVT[a.p`d#%3P7 \?®1޼G{lt)U9cuޖFiKD>6q)ibVJ+K=}J՜x>uM#SKIS@9ڝvMݘŲaGS '5:M$Yyw|LћM麴NM3SY5X'bې4B8K`Y)OJ'~g+7/VUjܬ:͝R`& [~2XIP}+A'i=T UM,ijsXz A_K$:U֟Ccx!QƱӻ>n ;$evu x V[P-"NզgkMcXX3ưPp%i,ZX׿c6^{:;й>Q()Tsc c)nxoN?`3Ϡx-" wiy{wٽs G2d9+YnV^NnЩAvꋻ+bxW`18,li̙z '+ro=y Y}"OKG~ۼ+k?y2 6WՔ.3vSQ^OIn!j ws5w%EWʷcpq74uIE6vq}2}E~ҢҴ>kHGa;)T bKTPe2om_iIJM<ɮoQW|;~ٿAOڝ΢YndY-{&H[p˴*&9;6oKϣA]Kwto+m6H.+쉡w.ݒ$leځϯ-$}vFpۦp\i²;w /í[&A3*c|?|&+<_64nC5"L2u&=ĖC܌ ˵8A+UqyX$yΌwꎇ$:tslЭVrJ|uEkw>t2uwr`ox^+vwe$Ie]O՛妒]z+jMv=׺][7O>wz$M] oWbE߽fS g:z^̫=]9do}Қ$cK]Em]&Ź RvPTb.Pׯ:Wofj5nGt4ѥɨjzi;Oo%G=ou-7ߖ`vҚ<$ks}atCo%H.} w/mIFӖm-{ߧ Cڔ^۱g6Xs޶mkOgiuj/yH"խ$Zn;3E0 \ mJSRTN|Ǹ<grm5Hd\f3bC +zwg0wޫ5:?ZiOy=̀ WZV^2_ެkNG/,SG rᮻ!v5GGK1TݧQ|T6023y?abOUxUr7+|##椟(d>+,vC oR 󌃃Zbe 2::~wNIyhXQTrO<9MCY5V.,b7LșЀ22cѮ#ɥ<.Qч IMm<&g0$q+]#>MMIR0cpOzצoNFH^x,0 0.wv< ןrтO(ߵ,acy,kwŬmgT}&7Fyr8ܩ6uY 62W833G K%lK^ ?E{Dkq#A{ضxsUEGaGMŸoI:zC[]nH><3#0UjE |]vՎ/Ӯ[jO%Ξdq<$&FnUJI?pC!F"Hsǜ`3Ws'EI E0D!޸OGy~M}0i3;#ٍ:-JNw=E-˻Tchr#9Fݻǥ톣߾ *q}F=&m Rݔh'>?:w9En]^tyU\ σ|@f ~pI䃐8^4Oq[0}7]{5޴׺J=?hӴ-d}D3* P2(ߌkuSci5O-_ 'EG5>GJ!) I++`dWSJQv pN 2+`c<7ߎhQh2G`OtCq @fQncfh-Uq_ܭQ cjKia;%Bpr?_z'|ssh$ʡ =~W?E]tĺ ݵ};}w6fQ,d:+b8hk|e&~d԰>RG:ėnm!@eQuv4[.O>*P,(N@@ x4%vMhFn*P=d]]t*O{!Jf6~(^]~B$ZҮq\ߒ(ܷ-A7~PdQ`9#9B_8ڡIj(Sލ 5Q"F.o,P>ӴtSZo"ŖvdŸiIp\\MɡZfo"MVP T YmdqUAr+@ZEQi&°Gqn*Gj8[F jnvG"6~Z-Sx6KjcpQEv=p Toc]aXdh]"ԕH淧[PdhGֻ|H% ˙%A۞8-auvP @(uVs'*%`ۊ͘L5FY-أV?fZQ5+U@rFxU./fv/T` Ħ٪4 ,JO m#$5' HZZi,+mZp` N3ZPIϽk=SPZFKVJ[I]3$kQ+0I-ǔB|G[urRxyFrax+y!mJk6a 7wAm̛M`$#>Fb6)b~m$UJ"U]qvv!rxj _isXGm9x TwlٔQ̅l_ 󌭼>ntu˫׵mwnp%X VBC'1<zGi4╻UwK ‘F:;06p4ll%T+D9I!]s#|P7hBkorG9&O9_\ k`iN⴯f- !Kώ+F?^3wZSj== ZKilVmd1U$1EU*տk/ᇫ:ClcX,vS+XE#I (<ҤPYY*g?eU:m[}:GdTW[M[Go .@6`6HӥIιOkIT `r`fi;]%)9>s":F~,_Cx s(MxhfPP1ǽg_{u}ЫtAuM^Z+cӮ`[A0ܲYt( kS=h[dU_FX5%\Ҵ-C][m .H&td)f>^MEN`梴Q@ʮA+@?Qޗ?_ӊ/"u mN;yRV٘+d'm}:6<0<Ԛܫ5&O%EαDX' 6'I<*s Q!?J97G%ʪ2f[1]Bsoʕyg J&21[sTia_*3Ww5ŜKBDjαr2.F|IME<{!"rk< <5*@apJ>ހފPxw~;kKdtd]'?)1Ջ{SW":8[TC1?k+Iˢ# JD=0qoDsHTiaQ@([Z" 8YPa}"gLOu#kєm:,GڡT"ҀLHbx&1f)$R ` |p ~*GO 9O3Dlo$9(sx+`ך7)?O5VV_}yRkfT=IE\*ՙp Yl vFd ՁN@)@V7-k P%kH+QfEh q-SA8#Y$ V ]E7`WE$h ( V ɣ+ ]o5P66ލ1F-^Х5_ 0w!Cppy %5O߱i.4 6Q!ߝB_ KNRj~}-=e{=?NWZWtEap#.o'a; :r{]Ż'놂?Oz37-7Ri}A65I--\_"Ư$2.I0@,7_81S~/ۋunJW*P hkhKppg<~<k~_@!mB+IaNɅnLn̖r,G2BBUi^~[Ax^MjM&ʻ7w^I=W?{i7?{sxaH.$}Q VbZV9TOt=ԓԖ椥\e^qI[J˭ʭΕW)"x2\E} Ë_f|HmY>(ҥHQѿ߬\nd[@ϕ|Vzf&ڌJ;wm[kVTXtH,n_M}nVY7E#؅2q}3КNWlP&]֍΢ΜH=I}op(ֺƟka 7|KBS$myK5$w>qJ9n-sڒ\*Dr2kZ>ꏨN]ΚVvʋv r"8emmMܚRK>IJo9WR5,z#n.m@~޿JasՖzVkj-b(3)bOP0E.;qZnM~goϾocl)WBm&Zvor·_cFI+(G 0p|ޔZn{xoؙ=2kԭs{RCtŒ2e ӷ|Ii'MmRN[Wsk9wRN.45m丿fkUDLKRYPʘ_r"fu:5n\|ҮnKiޛ֓<ڥ,6%$6bGA+OanC;N{}<3:TcO5ݧwWHz.z^ ʹq$GQTTQBqIF6y7kv4+N,\LsXGHRJ4#-)&E X1!Y#-!h$N@e-#S-)}{vM࿵x`#*Wi@Nr=cZt}l^Q# $ς$R u%Pe`֎i&ٖ@S}W5vW)^LN╵:]Vnr۷p>Ï 7 ʋ$%>}zqtRvԗe=ܥKV'zZ>O5 zngokbɆEhXaKKV[6ӔRa G:P-J"zB2Eb5˶=όzHii|=+Je.nVoGzcNk{u-$3hͳ *|c j?i=U.6JyaZYUBnT9f іݴt%tu-Nf;r-py뾹zYFni0vۍ0<$!;~| wShwϭ[2F7Or J+<N%3jVO~_oדytti͝- S91kmT)FniF*Om[7xୣ~W?\7z=?]MRZ6 Z%7$DgQ K ,-yN:s4;öw]XGo+};4;Ile }k=kjHɕ#56fz+zo>9DIX[2ud+[ݭEo |G w K|и9f'>rҕ 5fa`f:.m} }XVBwc+3)6֭.=_)F7<u<ܥhXs<qdu-ԛ}n>Ž.rFII8 ?[fkNLb-P>l~F6c=K5TWnu֬+y~w0ʃ9!|4.\y?s[[>KI΍wн76?-ծKOL҉$1ʅ6PwvիԔׅ Os%;أ⋥D[%bh6 2F'3_KIK?׬:7tmy^M$lۨ09 X+Q%z۟*XV_Ԯ+ҮcMChx 7G(f@yn𻿧5Ǐ?`P_x#}鯧giZEqֳuITiJVs@=GosU5F_tM52kH"\vWzR[w!r怌8*vq@X|YghTsj怜1i@J@L(2g>s 8N.s\M%F:UxP Xlmh@%`ڪn ?QkkNܬ`AETN>y%-(F9к5=CI"Yi #7ԎgTW"B5 ׫Jh1Rsy+)jP ޟ(XV*j G+-]ɂ ddA@+ V-_g<FQ!cӌc-3Fl©O$RH?)VxEي;`q5X2$GIN 5䑦fBYؖf'$& kW@W9j 1^]N. (c,-ObFʋ@YmYj@(j@$U"-}뢕{bT nr;xۜ1WhJ0ѿ0{3"6A&7휫.y޹^$J%ڪ ,H\3m`TmuaPju1ֵ;Vcee9pr2 ϜW|sYK>qں[ti{YM5Ds,lcJ#iPp qZь[V5GYdƒNҺ3!ІnmN@ ϑAGz'[Ҵ}'u;gH֚=:$WvᵈpL5%('լvVx85X=vtԚzq:fH7R\KnA#B"23dF6瞦WsIqi9{Jbm sYz_:TՇNtMr ;#tM qv .7%\'or\Ɨ:Z鎙iONKYkZ65Kr ^᣺h  !Z.W?zԌŧ&oQW]g~:nu+cm5't#j1K4gV8*C>U/t[M$^J7圝.MQ:_[b5ס])5_&o+wpY~%vwJWԟ|//3)n9ZEށ_uKnm籱i*4𲼓yLC~$qf"6{7;{iZ^aWsz^>M{i+r$N,nNQY\ծ?%)Fyd,R86yd V2Ŝ|ߧ;)'Y Ĭ cbJrς>}[`h$]jRC4rB!VGFIL8gM π.{k7{V6sgBP}O#Iջ "7Y@Thewp;yjx3}lN BʳF줆duYO ]9W)fo"\mRJ 9<$sZY-߶H !Q p 栭koy5իSFpC) AA,0w2F69i-gfDQ(Co,v F5~ 85lnL4Cݿ<~ڮ;s%Ŵ׭ou h픔Hd2 A6!Ȯqsm{jw:u mwF-OdsY%ȡc6r>7y$[9SP_>rzMqi+)ZD31?S[jHI5M-ں-O$ȥr8`ApG5t=8+ cpkvDmFIco橪0|#xd̨w+aK6B@P+ AC< P 3 t5be*%@V"bA$:GHXgi ơ A?@AA,ywx8pq#?eHbҽ7U.ʹ~~9 a\CXEHcr*Psi׫rGFԣ%Vus\cBF: [kT'ֺXCF]n± ܓj1WWWKb|c7qw,#~1^9uJyV.;qk#pBjI'X+p*/=?ƛ7c? i1k0u{Zl8 +p)E02?ɟ۫ m{7-9VaaQ:_ y籜JַW vd%wce3Dd駪,*T+]˺mO\NtTѭLDeGp9dL)W}2.%kh-6d< .oY\jSRLHY Qy!A$&tUG 7gIE>.7~R^gnt۪d0_ dO7\\RpodU;A[tŞzYIxZiK# #2P۬b[u~~oMӧYU}o&w/U[mEYWA2ɵ!-p3өn["qQqjwګyv篠xjSCI=Bmnú@7i[DDZ*Oq+=6znǠ4: aIa{C&RwFUYw-_ UMbϢѥ&~.Yc@k{vKnn7jlOS;\pe]莅Nclzy&\3oj YY7#~РFŽ.>UD᡾-bPi&[^}.#lq#ثe Ib곕9G>˽rW &cCDREF.\zj.ګ*i^ѹKy7E$8ڰ&S6qCsA--u )7NG;6 W=V/7TʻxlfHEt_QwmOse,SX ,WH`pS-hJUi:Rmy|>qqzۖضԛp%/M\j~=am柠kSdN-gյ+dk}2ѾX\wPv,^P=YN5j1n"[PRXnr1*U:鎤m n48 mrH@)4Σ*|1+c jsrn5RWyY2cup'Oh{Oi" HgU (5SJ:w-طW/8"mdK.zNVP=:{hZE\[H7j$c[iWM&jM*|Ϝ {z#[sOe$ҚK$IJ"aVr}jN7M~3}2&~;C5ha{kkMNG X eJF?$dgIemm+a+5fe`}BvӮůs @n-eũH߁+HC&hvA5Izb7X8>uuAm.,ӈn+:̤ F̪'loSrsw&K ^;^E֞ĉ{YJcU[Uv1VPf5Vmi/6̽VZ|]th. 9fZl;IG?mQ7tZm$-V.Uڕi}I3M][7G 4;X_Ga A1|DJ'eP >csZ:թNN>y<}dꞒ7^E^uoi̶&x bc>+R88.uԣUܻRG&ԴQ-kǿR) 0ϒc㟭+eI5ᵌ~3MMזu&6keY9ɡ GòFd9xwdV[/ôYZbmOUϷm: ˘䷿_ɂ8@"b XX ']˖[N\kݧEY$Y6.€{Ky'9^&Y,zi̬^TwuS@imUS < {߂ik:Rih /$h9! |cϩ(9(x{XwiEgBk]-vVv}-E-#c0]gV"DaKn H88)KuHE{?d\5y^ԟImn{ԭk9 {Q>RN2p9 _G^I[l_c.-.u{=BK ej,m(vߴ"y(6Gw&m_r5.uK]F'1X*Egilϧ/i!ki*('bmV.WvMF {6iK-}5{Ή$XlnnE/ ʼm#"Ǒ]jM5Lz5巸2][v}`%_V/㖾*Nq{Z^sʙ]e%yCqpِJW1@RP+ \o%o:F!n$L2@RBq?*tvT7~[>צxnam]3b:"RA#8-ՙGMz_a+},9@  ˜>`|%="-t_"ZHVSnFXq];9쀸mVHhT+Y.y{B[a:dRܰ*JOKcJmzqu-O+si%Z̤I`H?N zn}SDG[ `˱wɎݝXc  9+q֌jgSG".ZY^ْ6nሀ@;IO ikr;lHM6K,M*Ddh\'+F-Wri dyog5vM4*a6dgqPYp9}NK ݅YQgWDѬ{Zִ"i>иxV$KDX;FRZbZM,^Uc¿T'ѽstѬRç/nuru+ۖImybYq`5=%FhQ x5 1 r0&6"p xR]o?\}5<#zeԝ]S=M.j^h\]I/b+;N`ՁB&DoS-8wJqK{f%q;ttBԥ{GV ^%**&Sk 6OZW%,*}/zTݷzzonV'{u2ę4eIf.SUtZQK lsigKZMV3uq5aq-M,(ym&eRDDX!$7J[ػmmHڍKk^^c.d#vhsX*c|tM&^n 5~Ԯt6uYnM`wL*`b8 Zъroҹ%cӟ}4[C4MOX't(oX̰X{d;"KW#5u1湖y\<`zjWFs8fwPA;}φJ[p܌矽t@]nh 2@fhB޳DкMt{W) re!dUi8܆0a)lqjxϕ~R٥C+Mdj_pe*w z^ޠ^uK+ִ)!:ۜ*]r@nWSZ75/ I$yI100q'$e:qj-̰rmV(Q|dFNI秢kݶWfuV֗zT_KߘKNM,Z6'B+?颚*Y|~=7[tDM/-䴹A)ډe+ǗP庖FY];3I$XK @]'M҄NqqWΟSVN!l5]C|ڍQ+[Qt$^G>Q"O)jV*ԓZ*PZ`9@6ֵ4LW0@] @UVkp6N]6',>^K0A%ˈRA }$Ww]r3'w@ǽkWM]^fwEFQ)*'i-D-\W9u] ċ>. 2ՔQ\沴Y`1]#N(?JuCeE[_AbӢ&EseGX#8Mj耫@jxד"yq]#+Ԃ'VYN[ٗL7S 1;Höry8y +$ӧhzoV5b6|ŏ$Mk1δuŦXw=GAtެuML:E-+KE¢|jV!+HSG5 MZjK/†_+sJHvVWV;X(J뷷e]IVtK*<ߋ"/PtYrs^è8܌ uTWE=e{/SudjӼfkHƘ*XP/>It:xK [koe-Ǯ;Rxݕ$[{rF}"F/˱єt$\+Sh{ԞîKRKKT] 9B^ؕmvaסGm]jWH|N]=Nft7^"۾),,ď O?BXڛKz]qEinWWvk4;gžBw;SO@i&9f`68]zkE+=Sݢv(,Rt歫ǩj>!h-mJ IHG*̈́Y3׷x}#G]Mt鸯5vV!jwn 0"bwʕ䞫#Nuq^UKOGޝiԑj! kKweAY e[hPƥNէǿ軳.Mt7T^cVT7m$q2Zvfg@1vsXΞK,ss?jf(S{:D{ KD׮ eWϽcCRf$ϏMiW]MGo&6YZw/ٷ=QrpOֱ+ڪoݾ_7g&7˴Pctjou6B{Hi"$d짔Gp>Q;YWS({i?/XYzXkO44H%1 w/sqqܔXܒ[- 9%9)yuNX" +\شPHQEHv*fx'TGgXA}Z-q?#VŘ@W ޖCL TL KV%}^}geG.2DCOR8bQ"a9܏WxDSǰ8 rG*\0|&=0dfPY ㊠Ӛh6ҠK's4BA4*wH*w(1*_9w2i>Pݮp#6In}]9݁I9[knw]ߵvM{EУJ 6Fk$+L1dOҵd3ol:W6ZZm5dx{ 9mv\BPH-8io?L}0K9}&e^A`W/rS"r?]W&тU*<\$ݚ*|V& 7`U`Tjz!4Ե+`H!eY{rff ?Nц*W Me*ˊk#ŇFk׺N;ʼs=CfLݶ1b;KSN;{,°⧔ҶI=+:B:ޡivچԚR,1ᷳ6۰ |KV\2FQ'v9nNjugwI:iEhOo\%%#/"6ٰɴ )ĚNUW͘vz CKGHpѠG*Z׶/2#C.PԾӥeKwQ,:=]5tz,FM S6QJ)lȈ?iSpkmq.O9u}o-} @(;?7Ojvz[[^5W5 XFO 2+7ڵV_Or,?u4 6ZkȒ9)qm+4.~Hb]";vmK|vk+|j.OM?T=.2KAK *3dnKY.4X& ,^P4DzZi,ܭm4voMwG˺VE^åzJ+uOprB91O*F!I{뿏)KW{5᧭4_S%g\,;z`DDݰ _pۑ;8JpRj<]U S;SOX_]C<1dgXdK'Uu;ܘb:I}:lB)noi b$Vb$8eE9עPѽJKYmխɺf4د,4H#HѪ=FrJJ0R]^1QtOG[[D9q<=nT,6"YPNrڜ<;.Zu'^p׃U;}jW\ wEiC+K&DT!rۈ2u٫U/I/wWq~Ⱥo:s.-i5WQv^x 30tbc,u&'>O^޾4Ͷtjf8Gu^yzW#N4R[Ƶʲ$%L>CϚKӥ.n5mTk"Q7Il/g՞Exh6a#BLE,M $IF4&:zt6~jf"NzvlV Ŵ I$f&M.l4qu&ӼRYPڜvzT;Ib9,ص޲MNoCƗ:Ƶ*[[`? x'ҊPX[mJU$sz;knRm/og[ ړqR1:38*d禾UIe_mbM#]ז1WZl]6]";D;#*(E!V•$x6*I&շ56^ˬ|ƭ>tܝ eYg;ʡs3fM!۫=5$ڎnƗNΏ<:Oi,,3|g$RMWȬv7nԣkS^k%Hm}J'K'-;UeѶ^[~IENKkVw[J_} m0YuX5:ÅY9X>S"Xntc.vq}񄮷?Qb讕aGnYǨ8Y"m.I(hEp 꺅Jyv}ﰊj& mM6"UC2hv+:Tb~68Wʩo[Cꞩf,ծ[D30bC,6p:ݸwio8\w4y>a}q; =-C}W w68hY2mwE("w`5]vMggMg u[xYķ3[<:-M 戴k? gbV4vG,r ֧mU;8]߷gOAmz{:u-yS߿ .$&4n!xK4)$ucRNPiE|i:uVݦos^ C/b h'Kj#5(81 ܚ괴4}u o%z gJWӒ>[\]:m[AF4?"H:z5 iԮZm˞awTX%]./L*X#-<@lӆ*xݦ}YumnmMX޵C{+ n]ڥx9{k*\Z݆n.dTD26l+27I㊦2{-L"h0p[l݆NuS+ZTPs[?ҹ݆ m[?ǰ=zGu]^r2(K vMdF8F8YJxfMm;q\LVJ40@L!el bi QVoV~ɽo=76zv#v^#W2@K6ӄ۽ ]aX^VZ|q/<>ΥUsoo:Ӯ.nsO;'m 0R(l1a5v%w loxPfDEU@ =9w|][&~N|]?.l/tu<貇K+rdb0wԵ]5^2󅛼x 5V#C F{ Dt|0W7x;۾dOL+}f 'm3 'p`Q6'.plZityܼЈ̛V>a‘ESΞ_m6]sN=뾘O6j+*ݎKH%&"KSKNO'=I6*i['XIc؛n!g $m$_""g-%*?ګnV{46}wqrKeĻ F"q,9?b K-S_sl78t'NYt`yZSUCC<#,h퉃aOG}3ro)ӣ3[.`vsMٸkxiLl_ ŀc85sڭi][w&뵍3R"h-V)綕6Q$r~.hٍs^xk5W g|jZd"- KYF 8q,9ǥwB d׮bl"vo.tyUv7\: 2#<'&Ҭ'X 'k%TƻT$dH'''½D-&I;U#4kWe)EHH jQhV{-MXȯvQ 3b1FU7W]*so6#v( $j}{jN4(11!˹%qUb)+w*e GV{Vr5WRJ""G#>N$\yͧJR&46>!fmB{]j'rhRHe\8lKMWv m*T0ܤ#$dqEzSn[\Eooqm5SI0EI (;?.5EPLUUe22xadUm<j᭫F֑G)v'| ִ0{o+9W?mǃT!&Ye$ƅX% 矦<[iI'1Ad@Tր?_Uʳ"#'*n@[躅-ԍ#b:mܨ+wrȬ=huuwzV^K[A'0[3c2&FKԩ]-].Si\g; MS.mZ[i'I݉fby$MzK x0ݛ6AizU,$ΰJ3#0>%6+_F[5iM,0HcgUG0ʹa@aj VJ/~wRThp3UPy8Uiz@>jp $>9"7_o,/*m9RirF#0;A?ڹ/r٩4hͰ}HfRjOV*4\"̌pj84E.[n1o-JqiYP VZ@ڴ8Ax淤̏E WDe U)孌dMvK8d568徂E2=9M(`܁)+i5IsIi) ,EnDyw Y~>Gu|m j8.^ aynhM Ҁ'*>s;XҷI~u}_F~r*keV&Ȯ5V wY;k%fvVWVyU {(uj0W#7|b-\?:o%{H,-=kt KDQ5↴!{.߻}w̺{ ?Z.O+E$!5c'K'gִzZZQkӋip'ey?>ki~4ݳZD$b5""~#,BvwQ_K-.W;{yn\|/Uwu YI$O ;v6*E+DH;۸xZCKUjSׅލ&'J.575K{ ն F>yQ$f>uuȴڟ]?FOw:žgitDSh o)&"[텯I[w7r\9ђh7=P-կXwK7Y.%Gg%{2I&2/ޠx{⪥ҴYEQ͸۽iHS_]e-Is)ܺ&diDx)$i]b9ٶӤڥOÕ>B^h@ZYjzHOKeqο\S>b46;?:JmںXwKLk[m>#UQm56&+[KW2;Umɔ@${2}tyFX^^nO4t sQ-&uOJeOՌP*pK:24SG"iB9[RO%JtUizOkmpn^A[jg0c;2p GOԣTR>"ܺ-R^伿Ce F hvqd Lqf &T[Sm+;xDfM屶kJH-H{1USHٻ`j־vZyu[]`#tBhz6Otky-֖6Haˌǐ ,W&,nRn2\oQR) W6n`d$:i;wuv/W6G}Z=R%Ydس\6X3#R`a>M*jO]qɣi4;ixc-}4A,ndmP;I8͊7Me}QޱӚ>ҺegJ1;H-ܼ`HTc.cS9,?*`el%haزqё $A>Úrus -Z)wdHD{rU|k/ͻr ]ISϺ8,R6}cR K$vMpF$!F(4uc/\,;|4$l:|^̛f>w?nD08l<AjAj'E-BWU%ibHYҮJ1A֭nWG,!g oɡ]d`wIH|aZT^Y#pVג6t:n> +84ll2*;4hYi$,&vݻo𾁳kkweQ1DHcwEWW7#r1+TT?+Z74jϟ|7d[(4h&:yLf6;[x!wo 6foQ$VckÃ+:Qԭݝ47FSO5(Xcf>0|>@[< o$4Rű&jyu6:W\XI^j0jPE##?X)uRLm4rH(=7U7'W'J@lzL;YP)}+*q7nēOke@ .>>հDwpf~_UI9J-I,mwun,Y-Q/=RoA-=9^:̶ \#nCa""ah¾~znuOv[-ԤϥxkiNt#4R]WON]Y#Ow}akib[K\0)d1[hƤy[ʥY\+M&IV:";]jVbt4$Zt1[fr#,RmQ*tÖE?C\fdԸYk5Vd=/QZMe}VhgB2ʲe!AvucױWr EMJϧthZǐ"Xq\uuV\MYM= z㢵bB,{9[d.%!& ľČ\Vߥ}F6F }k}GNԵSNK˄"3avQ61E'I(5if 5痶tKk鷤@/Ӑɨ]B N[Ocv[J;eͿ>ҩM/rJV=ƕqз0i YyZ %˓8`vO qCdשW.k>]enh}eItLnkGC_hzp]Mjqqj[SL4c EkTMeHt29=9wtwR~a龪:Izg'ZP:C5GtgGQ\y%THQ_K[Of:UPj+%iF姅?:-b;ԯuel-vɢw2tfMMlbߦR̹Nv9pPozNS[sxֺUߘt+%.1.(F1XwRӥ7rԬG"oǜ'm~mBD$4 ` I?zԆ,4}R&PîҒz:ʪV i>ޫsjV鈦;mF.2Q'}ϫ[IE6q+]%{g7B[X:Y^F#΍ycq4P07 uvX/J*VbZ޹M߾ijwRFM[ǺAk|Fn @"\1\)1HWΆzE$r^(;Knn-nIkj>o i:vz47pYٸLw*$Ku'?NS*rRSnM6\cz[|o#u^z)VW5c3_K(bKX R%g Wm-((Vɻ*)efEM ͕;jvQ` JZ)lK 7,U(M[w_SiԻڤFkzocz_V-a[+X70ߔHRYd,d+]`St#\dߦwk2>S7OkM듼\'xETXlv;F7ISiUX"P H$V5M-HŨ$7@ױRO]R:{[][U>)o'g[q;F˻nۗZuM-;On6jϽyY"}wҝ1ã]ܓ;pڨK+#Ֆ,F+ d6Ic*>\Z-u[4VZiz%-WZ'ܿ7{竽Ӕo1^N}kcڶRQ)>EܨcU-d n8x],+M/g}.[MBm𸻕K1n nm+pr2MxuL]@M G{5dYvog%j|ݳ0` +S=VTy;_kJUd]E^ꖽgQ[zgX>SP"w@O3i68`2]n=7M3t秲:hVmk7zuԄKII@##ssNܐ|VdڛnKUݼ2$寽@~z_RZN v)qV,CHŜ5OZk{ysqgx3-[S m44Ka'irܫ 4i`w0!#'{ux%w8NڛJҌ,S]u-W![IZIo"Jsޒ8]w*F J1 ,%ny)ZƺxAxBFyBQZ]984Kҿ2=u4n]#7ſ6O''k[ipK;Zumsp$̐BTc.  Iڛ/ֽ}6kAPڦiS;\7#kRV5\?/v4u&_T>usRm5w,z,߃fDb8>|c4r\ '\{ԲWI}1~S::ީhnn>Asa'TE_@H#t`U -(:VꬿϨ'7O^uZ -M.M9"#8V EmmXʜZnOaU/{|ԕ ]NhB.cur|B!O$-ןް矷F=^y# `r~~PڏRя]G4ԫy_EUx"iMn.bv~}Uxd$(F8hFi?<:/(ӵ^G]n$ME;lU@'` VQZkҕ^~nv9=_BhO0{eaIf؅hU6T3~=E/:Pss7J[_"GĘR685-Xi5o<ῠi&4]v 9½m_O؇:nVa0"f6e!o|W >\;o-=:n< +m SJ:a97ZJ,gϔhæPc~C9PA!pWY;s]}/D~Q=.[]f[r5+ acAf<4r$ER"?D+<'u2&N-]7}qm']α ^R Mka#YLb,ث m}qғi]ۧ}hujw ި cXɼ خh䱯f6aW&^O^q隇=Sk{Oz ,ǁkٚCo/J/¢A>S_ҳ-HjvgSzT4+:C@Esd(0L+|ʢF|>\')e&S^tǾLO>mCk#tUۤra.P!}2pŃ+ 69jC*W~jWg׵hzY,xR;l1Qn ) y#q5EA'ŹeY|Wܽ|?]Q]Kٽ?.~ҡSsh|[@, {q_:8qJpx$rz[ǪIv,6JYmղ*0f_sGF:WU{-NNVx9pEzcB+DDtC@:!< AqҌ9[<?і:KR໶&TbYYpAdr sԂqS [mlQѺRc'Q3$/N-33(7/i\><8zY9u馱+֑&%N[r7&?=ͼ tz+iwXsQ3Gw=oc6p=G d1wl:Vʚh泷y%7^"K05]ł"*U\sxF*>jl{ן[Q҉:mrPYwc >x\t%%H1E]qkтBժ {E`~Z8Y"P ~HcVW.^BlI$&80-#g8Y,+93Gmu 9䁝JrP0*AM'OϏr&vt~9 yo&Y\N4l98ݹ%R\]/ǔ,ūZOC}s9qf [ۨKiHnvY6qF|j*?`z_5 婑"y-%N~ ${Aguz?l]S-wީoeoa w4y+Si(6VOӵԬkVfHvKYD STUUqh+rr׿7ê4p,Dǽ\S¸ +21B] ݜI^+oo|;D뚤C\Ww+Z[m9"8bU4_$nև,/n3r6!AXEbQޱ^|BT$Fٜ˰( q $m`dWy";{ޤw#8y3+m TgbrW9mǟj8@YyHB<(涍#?` ASF%Hv9Ty6Hd;N28>5-Gիks+2vTn2<5+iYQꞒOլoȖڻ wbW=|78VuϺ4i:\Wp"M.r&[bq7nޤd瓡T6 tCm2ƻ|:'Au>B>1.7)<k=9uۏѨg{OL~M.V$M-E\phDEsu0K>PiKGkZE95#ezڌ^d*Չ TZI-rWhl:?ߓ qYl/&7p.[KS*2]#ȬKBHHѲa+e(& 50wdH$u߄83Qtw- KlVks'̏܅z{,gW\3+GAGO/֟me{Y]dva\X",ұIxJ.B%Ծrj'N|־|X +KI"Yo+[x!jPe(U ,T 1CYT{}k6 [i92,@rw `' }f礬,:(5kYlW%on;DđSvUy5ZB-괒j^w߷߱hړ1彬o(;hԼ)m5@ f-;kصb4v5U%7۲'- G $lf)~^b7vhbG,b5(7Uy;;٦>.K8 63:BU *cS[m/9Yti{G3.br?jA?ݽ#ި1>XVKY{0nyH88qXy',ɒ޹J p[9Պ4z6E;wvF 9s۶~ z;Hav2 @|z7EzƩZs 1kN#\y%>S^M)4e9Si  n `A{c$ )S8QS0@4;oVH9^jP(m$+*㜏?ڥjW\jԶ0!vEcQԆ}ӎ$}T׺gGy fwb|'?iEGYi+IoYo'sҦ3El5KW^}g5GX}Ifݵpf(.!r1TZtmtJ p9OQVʍ.mdN2jN5LDQı*X[$`|RU%Uǿhl ZTz pq4+@k4d 2=뢒\'SOҲ ` `Q_T$s]6_oZL;Oҟj8אF1J`n@ڑK6 ܖ9MaEhV HjEТ+M./-`忴  u\*ţ*+ܲK}<2%mO}'k( s@XG]| kGt*^V+w'XWNuҖcyӛe8Ym̀ J 29j[NJQKіXڒu.Fh֠?[,Jʷ ;cQ#c`v覶5tkڮ3j߷r>[WzOFFokwt+kg!6=ɯWWGqdV~oN] Q/d7v KkϿYBU^G'r*tqwmsq}YqꗥY:^XD4k@]B!MڻY2epWǞ]VvW/U\[/K\.ֲGuUnz3Fԭవɜ̱)cݫg.d fi[cL4ۓIMIgkKS9}e߫\tYjr<-n%F<]Xř$cm'ܡy*XUx]GLA7/ik=IyHDrEl]#[x{t\b5z0xi[on*;\oF-?uRZ iuYe+}'j(T oYvW toQ&~V;8W}'oޝkOc}YcHM#dWwž9ͅ*3F ":doV&~t󕶚fgo[:YztUKC:jz̽kT3"mҐVxʬ"IL'RӔ^T|<ڧ%OjY;ޠӓ^%+Yr#VvMufdX1$GɊH-)(|dOrW%tJiMkC~մkZfxM>J%ѫKR;GlK {jqQpn2sNP.fJ(zOM:K躝T[{Ky=˘,VB-ܤR$2#+=VVڪK*7ngFY`t;B4yuӤu)eNa-m ImJKz:nm6ǫ˖J>&>tquWq-:^a22w7nuMbuzME;jWME֔ZKV QHձOGz_'{{ {s,s4Bg2$NL]W0*']˨ I{Z6+Um3TzZ{m;>iȶo..fG2J#BU,NvJ*tQrWW鏦i9;u,[x^:.k;n4 uTylڣql$ghdY ą:BNW=ҔEO/Қi%\Id^m=Q`bߘ/lnm<۠!x3PfVbZQ)MT)cչ9wnSRX/Zj^uzSVCecn'u"FoI#Mhg%ND@_mn{]K8|robtxuM–7g]Q'd# 24^Դ!Zsv&Wj~=[OF^ӧzr7zPIs{[41KIۮRQ˟V+տOLY}RRQX s("qqS e+K VǗʤ9]C#Oе-:FndY];i +#GΑy /ѓ$qiU{~yµn[YV6Iˤageaq";&IYA#짶)$Swqv?G]O\ڍ66v.uylchnܗdm̮z{5Uq|ߋT"fuw֯%h߰^+|*o0FQIE*=n=F&iwoj$ʲ#N;ϓdf_*Nm٫ I8ƻr]9uԑ\IߝD^d!#-)m#qMukUOH zURbY"n6w`uvfx2#ׂmPZQa&yY4:O;;y,[Gෲ b[[N xV7 c>mSS^[Kk~yRKJ+*ގL3E ݹd1 ,Fr635ze5QWq}9 U]FӦVqɩF%a%Lq+0el ]uЋ69wydu;;)5 7 VH]E*v#Anlڍ#!洢~]ůS[wo:{]FR跳^կu[u2[[IV~J7l"M-F0n?fծΖ-,vK/N5[/OMIiZKַ2]xH.G-.+z:ђnYNU&\{3O^|]ƑZ>zm֠mXH{Qw#VuFQϩRc4\U*}dW!?C=>wZ-e !m"X dyCڭo?<6־S$K˫b]n<z}gY:ktF^3{"h.e3%MgLʪ)TԩruN)a%EOMkmuiow)k2ne$p2&#TMiR=$Wj}^n㹰qۓHgu GMjy^nk*f=5}K]%OEk7]Jۋ;< 1tzmeھv1w.t:Xm4Hc!wI˻m2($q {(qr|ae Wݷ'w9`ZzåϫΣ6qon7o;$%<>[A(9p-sK-Ŧ*r]1v RĒM-Ɠo^[j6s%IW.RHq!r_픲FէN]붺q4py;A`b5$X%=du_}Om0Dѕe7dcnūtEyna5L4yܥL6 15EJS,ZN^h0Ĩ(I!- H2ܠUqHWa6Y;"w$kmorvfcڊF69Y/ޫKtcR 8b)$z]7׬zV]K?NcޒFBn`CmV _;_==/Qr?kx*gκNMmWK5׸eld,J7h.X4FL<7=De F*f꯳K8>Tt6\'vMoqkaI,<"8bD422VޅNhjs{g'åWJYwRgykignкrʩ+.tr"kz4mo9ʵ앶Y j4)'XfIi#s|&qRrIx_~AM6;fmy4/v0卐4fn!rNs]^[ܔz=:}7B,>C,.r@mdT#j%߼~o#vz΁SL+{9[MV䶼UʣŲM+/h|2~r9:=h5?CQt̝GZk6W"Kf|,q؍!`E0BN/KlwmӮ~ZX'̄--$Tj $F>75=z.{34!AwO /JK7e曳݊:UАA#o kU B_+.Y18ƎtbIpF<4I҅d·<{U] m[oX_ˬ/Qk Yy\p6UZmB< ,0?j*>F([3ކ*?T]@jI9˰>2ɛOH)w à`sM7HZˠ?N}0M ' A+GazXH/̡e|NC~7 VsugXd_]Am\j:RtLm3Lmi] vKc_KKV:Qi+x:e'O^=?΅mqoIFc2GYpU ($q׋UӪM.T}?}+-cTΠRH!V>% 0[%̂Yps \nC7X}WשgmNպ]TMP]$8I F"]?Y l,?x9ULQ|1YUP rwszw;&{$R #T ./EHncib%nPΤ920>QGQ6(EK7R,x"f4`+{t+:_=%Rok؛Nw>i<7doa KF4}bkIvpH pq={Eqi35G5 =jtۘfk{hIC lY19/{jˍ_hY9myayNɱwm۷# YvΗWi6\ZKJI#-gW/U@O袽N\qAr|]h%77.|#gV$d A?9Ify"F-*$틙q.y#~E°mqout;Md*!duQ+SNˊ~wOXwpnʌ:,#:ڄ6m|8;N_^/M V="GL· NeV=ۃ*JsOSc-lү弐]qdţ(*ZIU" ر3˂~+jI|~گ/ 藰L2I32#DȨ`˟"-D}x-?0ҵ.R>=.ͷAw e\tqž]c8_FqE'ɱ @#gGiGiª, r@rLK< }pi#vtΑr-g"V`Bi zjWY^;اyuQՎ{4qIeyBp xJ,2~Aݳ'±(=_IihڥM}!RL%iېyكg*i&-Rs>i]O@ۍYzPz~Km=u}E5yRMBmUebSF-i'.Py=#n NSE+ l2$Enh!Mu^6|n^ϛ;l |cڛ!TK̞gk؞kv6⎛Z6ab[]핥jbH˴|`ȨUznꚼ>2ܪwv>Gwv>u=+Xc -.,J@&-wd8Ж֥o-gS qk"NR4[q_-՝FRD.)` ~XW'(%JqOs/*ofzYUnM: 7#%oĉA-\6γVJ*rTnb^׺-O]X $H 8E2)CKJ0ڛQW|mVy|s|Bhzkq:Cc34ؔd`P@kh |+yK+nqh= sZiњ-MiDҤ紂c9C2fݍH,kJRq=O/mk;ppkC[%']RuSw/1g2oS[ ۍOMiڗҌcJ*u`enRdin-ó;O#6I|NMiK.-{qtݶsk %7=k =`62nʛNI/Oʩ+x~~u>:/T|+Ť$XuZxWi)n|}gJ,cEoZ2}2|HDlsZ꣹mnnڏ)IimF_C=6+1 'jHfakHUR"+Udn)2/%ԴԬ$ D'$F%VNK*ʩ 9zIJi2aJ``~у j /X[]iʒtVݼHʪF ƲU O+ջ;ye̽QFL:%+c Ҟ׌y=s~6-u+;?7Gu*c*H%L՘KkE6!H ][i#r ۏ|¶y}v[ 65ߛ5/:.M(%}WKj `<RD.x,wȵ~4zmu_|?8>^P(~i0Fm@3IZcjIQke *@R b@~y+" <+y^LxV޴hd52jIA bT *ے@ TM T`T*n:qDzi0dGd9RAVq^*Ey<$K5قK`xf8sYQs`P[\ B=OS04$,`s{mXi+I{+?fzi\wtƛZwW\jucquer,RY\Ɛ1i 4ĘMK|=Y'7۪R|6XQkvp~/\Ѿ_F=IԞ'3‚Ar4;q;:[t!>gܥTVԭ%NM`hSݖ^YԻL CF9EBƗXv?Z3J*{i/ԣ iT>/Kj>Mp7rlڳm9XqFUB2?G ?$7(<}n{Kr~u;k~+/Qzp]wP-[DfXٓO]l ;Or|ڤ?]WGRZTsZXpnvCmei!Os${hhm ZZ^A+rU/>3)<뾀l5ޤ>,A}52 9w#$`]CnK um,9bxڍ9=.zs:6Yd'х$Y3Y~g<98媒VK%TKΗ:4XhKϫ^tՄҗѯD-13Ĩ "r/qpђxuYd6bI>ޖV;&],#woVhS({Hɇs4=Ds_.kw𧫞z$W^E1NloeV@fbUˉYznF2SSsKkj`&?.^E 3kyqٕ;T7(nWkZOԽXxDy=gK=A[kCiWpȖ` >%#N*[ݠ4`qm4,{JQIn]z:RNmF}^ZK ]SR]=̱ ecn '{Hcڒi7(%wJnX5Kl岶n"%&8i|g(&~gEGN-E9+Jjڧ(զGI+8KG=9j=;0kݪ閚,=Η+#FZ-5W(^w>j̳[6vYZPwSS%m2Ԫncac'bbxGmfj&lSo#UYqQXڲnC}mZ'HiN5&a"Iⷁ6+̒#}R'84Ig*6]*(.亃RкWѮ2z2M2Ks=jҽ˳fb{ Aۓ^է$ԖJUnKfUn砮-d#ֻZߗN(d̈7[SR3ԸϴjY,M:,1_}e7IiҺTKvmcPۻ*/w4g~w:*q-.?1J6|o4^P?Kdt5lLn =sHjZ_QoQq[[ EŖvzGQj6 uӺ}yf׹gtflJ m}2Ī1S\e}WZ˻,4+Q;PiV/KO T1J7*Uiy}#Tz(;R:[P+Sm+C qm\H߆O9u )jII5yi7Vxrccm K(DX,Ī! ,Nb~lקN;ٹ{ݾ=;ZmuEӺFH'#@4n#sv7iR~xM:G.֥&4cp*mHrIuү r܌̞:J]EԡH`#(:G*;QW˷jMq~ymN몵AqWWk57Xa͑*Nvo5;bAL=tMApb*U/x3]ֻwĚf՚&=KI[]-lDx jCGIjfQOԕamIIvov>q֧rIi9wݿs]HeYlg`ybfbY~{c3թCQfݘf){ΘC}{5 KW)e95J7|S~Wiҏ>:ϤV|#ͺi72(XHQzuzO^#Ԛkԩ+UrMc.8EJ g蓽ݎ5m߾Ŕv+ n|JCw)IZ)a*ߧv^W+9"4#ԣR_JDV$E!̐ʒm,y+vnq-1UR]cNږU-m>pͬiIa\;C!EFqF9t{#RݫQRu7æ-HKO5)Q+Í*粥F\oοҭ:R B~nTR81Aڠh~-f\ʣi\}GA1b[!t}~ B]OSk[Q E#*,i_nIr'Y]goɴ9X-VcWt#&onMm)[g5EneͥHm 봣 Y~V\q\5z}=xYG޽" zT#u\Z\ͩH藒4ac17?;NsmY;UG4WN5!=Iu\@H-&(8lFh̛Ogf${(Gdt_,ϷegCal5<,br&vxSUK=򰼒 $52] Ae388M8BrsZITG$H<Ҩm$@veS!OmArpFs7y㜙fpؗF*WS>+N6ɽiIylCX spҬr<~ʌsXkW9vتUl`cpj*V&[7Q/{CR^'cQ$} RG ˘ ]/jR݅ʮyXljSLH/j}T9H9⌞L%w:G*em5$\footVv,K$w73oB؉9BU?rȷ7/ql= JprW>&rqP;>ue\k}UԀH$XjKF7kOMi4ݻ<Ŗsk+r:pW 3}L3mn!gI7?m)*U%Si$ŎY@bnگor(gUktnӮ;T{Ye"F[  7NkW6+=Hu 惦hWwӚ[K1<.gXXH3`f:)J5'wJ?bGt9]Bhc&)pḎ>}宺3n'Zo: &0HB1A d϶lש`I@CρTKsƒ) I^Xj9,SH],/}EPgA$04EGX]٭@nCs#ٝ-׺[2'v>؎8U;ns=8Ub[a(K*#sc$ '?\ YB/T{6GTqV]U#Cث" A<9qǟ5wxݲrr~`D`f^ v ydYڥij77W`vGs!Ic;H8u%]|0\ eIt2F̚>"NFQFQ}]=(i|mtX_C?ZOqyY n"BVUܨ22^~?qJ^xõYAaQa0ʒ*7<78=r^Ŧ Y,ⱚ=Nz-4|{O c[l}ciXjrNRK?5U I];q]g Gt*«'ݧn ]¨$jr`0d}߽eڬַF QXF+oW|`\u)f/*_ؼ{QIiFr`}>퐪KE#vU9 XRO7Y^k5RYdK#egB̙]W 洺T\asKУ.#dc@hFG#`:AiYڮ>Yi׎馋t]KZi}g~7"ܓBm~ ^5m-mJ7?S.+GhӺ>|0ja?s6J0D`z:]YITIa^g)$|r` g#"F#!Vtbۑ'ng}ot7Nnu}L9EHFdpABIZ~(~]Ϝ+K'i#Y#hE v\bF@lpCx ץN(_NiѰK$r8إF.ö@ 3 kbn g =q,DE Ɂe<`WTE^ywfc)z?ZėqD6.J[x\SnFӿ=IFL3X2,4GʅF0%^w|=5!Id2v78! 1XG6r{N+kkXl0ۣ.UG,ߩ5ؔK~Z "+( ($2AUQ{n!s77Jc9⾝gyԔCWb4@x8һj| p &J@V( P]wȅE u>>%ӞBFbQYNFey9rH\s\:u)גMR͊сQ:@\'Ee' NIQZQ!z k/EHFϡcqMsR[+a);ⶵxdBx$D>_j1Sl|Dׂd~#-OIMDVh P(*MX( [M]T UwQj @Z-ִ,[xp0(>jՠ*ّZ,T Ńz[C[ w>uQ=Vq[ ifCt^7a1pfOpmܝu񟯇آp}wһa^:|<Xįt0"M'X!Z|E;WJW_jYvqj575A4.ӺVE_$F$Q/FeK)rb1rm5J)3na׿ORtONzC@MI&5]*cKIKk%y؃,,fR^^Xؚ=+K>;_PKM~ wpgnf##Gߜq7qQ$WtRM:m+ 혦t4>/F;`[ /A$eb^1+nVtӔ^E7EGk :\׃OEj:f֦{-m۳jZ=YKh0IzeG5%)S\7K+>3_SOWP&c] k +N6ArHZT7§8'(cֽ*WSZ]]Ctf˺X{ۗsvT ytWRM$ʫᦿ}M+GK9lX.5uKM֥ @)!gø߻P4sʖƻN uNF۫t;K= =Vmsp9̪3pbVNԚn=ͫ{']g,Ԣ;A4K>2]Z W5Bi&yTX 9+\$`礗9rzb2ϙuCwuj>6:m奒뷂Ad󏈖 leA=꾕Enj1_Qq6Qg[ͨ=%qf*ie]}vK+{nh 2kRHv#.d*\mMUyOn\ixI`Q뙢T#hK\|5*w6`*+tUE*U1X]vAj=v[E f4!f+40$wL=>0z -{bMSUhe)7 })]&=Α_hc]O`[@"!Is o܂mnF{6*i:n^c9ut}s,N:˩&6i2ʖ|곟{ݡڶB&Yuuܣ8iǟTi$jztޖp'Ző7Z-ƌȲaIeN;"H5ӣ<>$sU/%zQT7Ge=͂iDBiIiQQWb}Tgۆ7WNʍW 4P]_jmA5| HUiQh6q=$ziNR |]ۢz#@:H^Mwc[Mi u69TE3s`f{t,R]ӫn ʩ;=G]^gE@4'CC̭šwoa1 Le+,4P\p<g 84Zs˓.+m4I3^&/-719rau YiHl/*sy'nO̬w36x$dVs@$4+#]XV\526Sϗ]?]寻|?  ۻ۞@OvLm}:Y\oh Clkmnk/RE_7^ZIO4A,%r5ey;og8 8wuNyWOM&\ߺZ`Y5I"G&f *+#8]T7mnOUZv7_Yp|2.귑/ӵ6[đm%nVPvo^iNK+gokZ_E%ླྀiI\E'r'啲[~OUCSWu}M{{jdcw$̎vep iN*1$*_R󪵃ixbc]d5ڼ8ݜoM<{ p`7NuGĒ|GGC/.mO%̏"9.XRukxMIݻkxaG{!uZvde{IOX`FjIlXڷ] Mk{qirZ*iHrW 99u4Nn"^XA DvbHhF1ȹWPRE}xj)qpO+s8UԢQ q +}k/&#<ԖAJ-W0(l (jyI J֐M&G⣇JQxmM+Wm <*y@ KL f` !Q~׵" [J6(yN}:\:O R e'ca59fv}1eR#ՎVo}; ;l.I8 Ohƅu6]egw|K.^ 3K<g y4]6劷A+g׺+{[^G3ٓM*|uu(Iw0mq: JK)nYtWYEys}-j0;Gr" #ݏ]0举y__$PldZ?U~ƃYw>ӨYbm3x2a",l6>Trj<)%gyYW߳ãB:eF =Ak' vUNg 4krb)mjuu)?Kj_/gk,z0JLųVpТ\\,|<]DkꮣQE(Vsk 4Ru;Kcl:4k޴ԵMDuKBNm!0$n {Oih.[uUʼxg}5][tαmiq E-d*mIPȋX:㾲xOi˺t}O-Snl 7vE2,f#ܴ>m>IFZASSyߖӇ@uVӑi=Zy!ӳ$2]rg!2ِi#:=^cW,(4{Ti1V7a&i+j:M]bfsG" r;EO$'˖0oRx8Wf!G-z ,kKWSoh6E!%^VfB^nś(-\2xVt~u~+dnt;Pn qs,f]- 6n"ڋܟ+L(9'%|H>;浤C KCj6lv9C#0Ieʲ4v仾nJzssYT"ګH]w=O}>aKkso-n߆yW 淝$0U]ذ4cco)6UNFK頱:ƵOZwt]Eպ;ard30"TGk_<p j-*U(9NUdw~,1*FXi=|;ΐ7]]I}}WiJ$ԗ{Jx4iShvt Z5{Jb$hAk_t,%tS76jI/SXܯWj+2l_Ji~ǯ_hZn-~-ѴcwBYhtqtԝEpsY?$juU]kާVs۝:7[FI (e'$hAiͫM-ͷtM;‰oөcwpjhûj0cm{5bmqy1d߸bW@WUXrTn/r/>K4:&MҮta2ZPiua_[#K D&(IZ(-t'%*q,U7ܛ!M"֚Vt-H5mW& 4q !UqUkѯ|,9%&7sJ"l4z-mH k#c #" b)8g k?Jr.VKYi,a8E7mv3/_v%qwkˍwY5Rk屼MBD,.b,H)?*VM6ޝ\䗃w=Agԏ='gyhc{(^&s,o *<pq+1a:J|5WSLEvխC9]Q, EnQ$_̱|v|vnU۵噳]kk\֍ZOK[={ [ƨ̐4VeefhRUv7vTc)Zmy+v^I]1׺~ԷMn}Ьt4H.]I#˗ ѷ1QA]nm\yQj]5bnCp`dTUQ#H; S"7[騨U*tլ&no[_LZeިk]J$v6/:zOq4R(~yc&PVHg_YbeSӄl%$㌥#QN~uT]uo]2Ispڊ^^ȲA{Dn8g;jB OICNR¸VbD>gTOWzCm~{T!֚hlfUðvf %Ĭi-]'qnNe8tYm"ЍZNc Vp ۽ðar̒Hՙwqz6qq{7xuSk5^ x :K-;n uo+/l;M{>ud8>\%KϪy2j7ZS MR{G2,U#vNWQsmJt◙\*sgr.$3L > hj'nUI(,.N{[2ѴpYԞP L`c- Fk:k那:v,c[^]C55]*B"EѮ+ۓ̀jiʾ I$mnUi5^J߬#z-:m& ;Ted\@ӫ ppb FVuW{ϗUź\m;q`r3}+WkϵkU--1o1O/$R|8^ƛ&4?eXY;~39bv)n͌[ZKv\8~E9{+YAy4lOi/ڰI4yPQu$bPRT <9O O #H 7BN2~QG>R&CiZfVY6m!͹[8q>e:BINkO ҭq:CNIk[}N_*{~q,FB0NCVJrWN׋$M7O^e$"L.sH_VF[h*",> >kr2D`0hI''< P;:'Vj&R{;>v^6J08ܼda[nWM5+]@ }k-жs@fHuPPƕf ur9  8Pҹl]l{#/ zd:\EMoZBRGbV$@RC1;k3 }M[[II~i[Ժ~f"7P$0C''q5T~g$җ5yyK= -J+"DʢbצrحY2͊n7Ii=-Fd+!JautmoP4+WE [0$yWJ:lkV#M,$YgShFi]*x˲YO-pq ЩY/N}M;_P:v۪tK^J%@Es2m V_/Sf4^rӵZxaqO7z4ZW1MBDNNb.P-6|ͫc7u,z)zU{8~13fu%$lf*+w8{]؏F'p%O?~܊h"(r*P6%S5ԅ呲HI$$IER9?j>v:FbtM+A\i4۬HU=)-^-MM5$%MҿO7)1-3^!4qmx8ҥB& dT}ϟK"(P$ ?Sdʠ֬@L-BNտ"\>x..IdHP.;#]'[N;- hsH5,E%ԽіmqvCDSŹzmxWNkm7gCԦV+9d$g>ʠYCKVf;Z'SuNw$7w:Ems-THiB۰m'kkI47uو2Kkp4.ѳHF%J%sW:ҹ=*8+<#//]A4i-=?^KA4@RݱQY0 稚A&1~i`\X"ݼp$m,{W<ʶX+̣D/ Mt!Σ#u8ٞV-'OҬF讻V^(!j4팖UǃG'+ur2tSh7ԱuM΄^!Y{yA2QXc5A5+kTl t |m$+۟$ykѽhgB_2zn޳7ȲkoeZF" N)`296/ ~U;`T Ȩ|28 V9UO m mVl @( E@*`TT`UL+|V]h&TZ8$kiǚ·_W^rUU *ZD.};$^dfq3e,v!g'#ڷ J;~ޏzI[ux}>}+YT~յݼ9ve+qRa;5tp[K_jxJ8y,%Y?6('Aibipuzq a #]b@\#<|O[cj>|ΝnK 6w~;,Tׯ584weKuDXyeyi4[OAwK$={ee(75:761ZMZuaa=Awz~e$?깒$bEi~X=*)ԆҔe*Wҩsu%6֭ԓjZ+s=rIT4kx d(XHg[I_7MG&^};u> }1c+F DW,P6GAf3_R;4[4[-"ܢ-쪋aBrϦiRWs^V^8':V-zd—25%G%G^6;FҬHID#yzrOI[xR]ɸ|f /Ib\(D'q,0Fi|seKӺkET 侸mݘYηB.$0U %gɭ=Ilw:ܗo?<]{?~9؈coU]ɂ*lcG^JM$U<8Sv 7!}?㡹KrL2Dlr]O GێJ W3-u*k}(GPbnG BNoq?VC~O-:k mq]E6r{³E#P4n +łpX]*ipZH4z&hڕŻ SbZm嶺֛t{R5q2z}o/Ti}NZ9!R i[l5FU#c\m:ۊۯ~yE6/ɩXhP5jrXXNuo%2̙#"Gq!xcdv|8+|~\+ݙ)D)D^>[ zޑ:)V4EetS|cvǧƂn8O)qtVz䬔}:PY㴻[:[k۩]zDJ;֐BRp$3 3W_-ҵ'N7jNM8iKun[%/O 0K\Kga DҪch][7ɥʝ+[-[eѵ;a46xhK{hg1)i$DFi&#[%K6{?Z6#e"?-Զ\$\/$4問5ViT~ѷ{yzIջZ]ZL5BEUDhf0S2 QД}W-nY^Z|7uasގGeJy!Xa|yh''zxe#?v2ZH5I SR+F `<<lvjEz>Z&kE2]we-E߃dnLg~U"5>)FJ|FqI<m,c>ԴӢԴg%14sIp12:3IPT*yXRJwZ{Jz~W]V+KMc{^׬o\CqRYnUT(iY8Yϗ\彛wwZڛtLv˫k}Jڞ4fֶv7rI@"FI"]n|/oU9k{UY~Xjڭņf3,2i.fgު۫܌4J54$N5Rړ~ LޟzWk=2=J#^tmR-d Eõ$CO!U^{$'ԔQxV[NkX=9HSK;ѿ}Bknmf΂Twr¼DZCSٻԶ\q/U?摯tq$iS[un-ddeH~1gbX"U԰ZrQŵڔmqwv۴O>=9T]o%1FLݦjwĂRy B t)z\-ˍGrURxmgW<8*}D_5.1#Ң鑦 ZIJrn)@ګw+N)\qE-ޝyڤ(n#~pUЬzvMwO:bK6 R9 -vKA%q}"۶-ji>.FKҫje8ͦZUL^uHKn.NM ։p%_h1 U2#rjRqXl.dwu]ǭޗ͖Z۴3ˤ[MlJ,BT1_ lh?$#rJojTڭeKo1.!,Sc0㊜۴Sm(=n[uE}+Ԗ}ChFEc)YÝ:2Mv+|te8$ȥjv%ov\kԛR>|u[~o@K2JڅQi7wR%q"cbQ,s<3C -2%;R̲5J-`]~=#}@/Xb KrQ\Ge_߬iEF(0 HsU 8뺖vsUwN&򲮩gk|AOԩoO-ҢHA#srHV:}m58;nO]zb5/%i}.w,;{JJM;V;"L6ؒۅŒ+YkRPJWmυOw[N"!DjLڥeEm5m47VY(aMYwVֺ}N*Qm9$˩ojO|]EOuGY>%ݎugg$FQ K +lWA"TVqku'IS*;eϳ%^6կuM.XֺGEIiwdFM GDQp w0^Bz5znxLm^4z;4 mz~%т%hVtFbI#䔨/]&O<4զߞ!{]ێWb) tF/K.^+g8fROĀW$uAGY8V!:GQ}J{;w6Q;IY*+ܑ]U_FgOmE7ķ=ד[&K'Ljkzuռ5o,{n!Ct"t^;+2)%.aE{.0YKW[mvJzop*~_f9fΣ6sè]+0ݹ&kJ`veH܇ P9QmItSϳbnkXxR[r|JW~eHחTVS; jq{Ծ)co 71oR# J?qrEۘ:mECVw_vn+YTnYC>:d{\j=$qAى$h'ViTO椤syiԛIU.zOWLT]:)%ƊBm,v#l˭KmzGRU%_sߡ^ԯ=ddꗗSO>DDddi6|RxŪTW„TR\uMNťygNcI..;Kv]{Pg,TedfSOS^Vҋm +i?-eof62|!GGs<+#F~!*>V M96ݴV*~/uKYu7Otj|[PS͆ykpy<$"ݛva39)z ]Gߡ8#u8vkw\*?uvez;tC)iD'I2Wr ~Az8KV6^_h׺T tH9c.G+}LQzw=.⌸>wv${ '> 6y;!yݓ95R`+@i|բQQک1JZԻÀl@$nFmnGV֗bhgVM)n7WS\#Gd99r+PVIw|0 VQԻ'鐘bH#!>E]@@}Mbj] Ӭ`2wo="@]摎pdl`䁷SJOhvOY]F nC:Ne)nӦSUϛ^fa +v@_cr7?ߛv'hs6MbVy e6F.$L!v ) 8@+>jJ6Z66u4xB]1!8!68̢U{=Qe(! 9>+TF'Z]keGOxg޹1%܂`|c$6Cc#՚erվܫ09VЌz5j#eo38$ϟNBD}xL y9-|FT? w;q[jPѝ7@~oqC'2ć?JpN1foP<̳ dB_@v4z]ٹOd`aϟ[oWOrk?ShYS4oUS0>AZVBȒYsFH+쁓k2K4.bkwΌ!#)~yE5$ h󌷓↨WOޔ(U㚴(jꗶԺY ]Þ Ees+Er^_^3d?ZJ/$ "yBvj@vznY5I-{[m3Ls(;ael+]6]ș6z[Eq$SD?<08=5%Mro V(%Vx@9,>a& t~Rɠ&KX^eD+ތ t-˹w7+ =hvϷԔd,b^XfK}YKcs[;9(¿&n"~kWNx _ `-3n:sW/G& /D:Ў3C$D 0Zʋ;EW$6z}K;*Or20@ٰl<}G^K>EGk}!~"*@`330 \a‚خNj*%ζ 86*\%CWrwaHU?bD7ḯ f D0Spvljtz|Ie)oZX).Xd&.ێGw(nkRzN}+tT@R7TY+ )`T&сY6rM~ }3?U k.n-NE/j7RWSB]G8G7Njw㨒o|! ?z闭=}aH˭N$WDF\2!hRnRY 쎾GV ROjJIb8IoItzԺmƙp._O.JͥOXnRJwˎ_6Siҝ?g]K&j0cS&6ޙmnl\; AK4], 7}>IGR 1m$O4vߗtZOta=o JHn0I- 3k,pf1?&[𧪚ǛV2x<50~_S5ޠ:__N4+s<#^3R<6!NG%9'(FҍRquT%Sq]!ڰNomvBۊXN KƴOIJӥ\l#K}nUj:}&`ͽDGw$m(1TMPo){ܔp /tЬfRKfMFdXmi6~ ȩo5~?k%Kƺkh#UBֺMa^e`z/$k!wjC+lm")爩b X(L9c-γQU ҽv{.uoJ׬!||E{vEK|NAsnH-i.[-^_-N>S}W[n=J-umc{iszVH;myI;Kѷd.ͻm6Vv7ws5KMoi| ~aҞmBK.Vw YcvBΈWQzIP}oӥn'ӛJXs 14ΐqفCޗY54mwu{hw?> D@ʗf2x FУI,[#/gBW1w[gFBCn'>zi57c.y0ۖOW">/?P/g{iI*'FLM(A);~ǽq|^NMz@(Ty@WF( @@@[Kّ@*PWWW:ڎ Xh b@ UA+WM#Q(%$J,_+k}XD&>z7ѝ?hRm-߶򫒫 <'r%oێnVZVV/5w,ֹeb-mWB[Yi \&$c#2r~l mNTw˵uՏA1yt㼻aXiSıbL$y#ſu~qI'?>]Ţ]!7,jߵնC=yn.%-v [,+:ݢ1ZǕWMŸ?O]Rh/wX=oX& ?J,b}.Gۺ {mlaT<Jal^HNq٥ǾjU{_N*ߞ(ʮYt=[zDn JGiwj!ҥDSy^wvw3I!dH U|NkI4K5Ob1QK/r`zMEjMк]E#!iNd`%yq "?Wk`Wn^n-^|Z|ߪMY^u<Ѝ@މ ]Mb쎖 o].iE6E*=V:GCkۡ4b-5-֛ƲQ@ѓ[aZ}lܞa/I|{.ђXG`}0^tr*bޑݭ~k- 04qc$JISWNI1RY} ՛~[Ԏ\dKnziXe`397K=TMG%qj-,F)YW Pz y:'jc=)i6p0$d)܎8ؿ4{YrZskO{]v{.U^Vxݬgu}Ku[ 䶱ԡ H>%.F4 ˴*n$Zk$~ٖ7]z=#}9Yu&үneg@ܕG-,Xg4ݗ}?C9IKԲ\ZJ8{s[n]G&7NQR5ӺP\^@٠H!B')jOݶ (K>_mv,$ 止>tuE}o$IP\ y6ZYY0ݳ:ՕGr~'RV%~Fկ4OTJ]2.;QE$nW'8'-?*珹 B5's=+6zKiQ٣y5VBfId'),#9 ()#P\ UWkrr>bH`#b8 k(1.w `JĘmՔ0!\>9F~x8)]4]⿙m&IU+8vA<Kn{y~i4RI XpIOl~"^Y# t9 T'|ĉ&>`J+ f}W}ʝ-Fs5jr ۓA]V[yN1݈۰$c5#=h:A5ئqݟVhV8JO*$ѿI##O}GӴ i eDE4j61U;Ytzz *renϙ2 >JA4L*TA#ELiZY NrqcĞvZt°?̻L)a~eH8pSx;qtzdzO6tzYxvBą2 GÿUn|]sۑxHB>0+==._, i2]ML5f+)ݷo8xKWY9_QQ>O,.Զ֠&1XaRjqǟ?rѵx.u[z^H5û9yyX3dj*.մ{GnĮ5lnq~O*<5fVOnnSVtʫc>:1œ;|bT4bS;_Z7IBGaÁ;%_|q^׃-!iSҺFXxsmʪf8'RNS^NYE;.]HXe XP7mRHCO.Mgn)N `;3xeH@ qf)m6#A֊a!(79|UTDąWTqPn>4I`|P^<>Պ>M QX1C~\[NzQ(,9Pɱ FVf`W*?1p8ԲcdW[U!ʹ1FSF-j7嶷O%[B$X::02#"(|<G]aK=m\j/nۻq1 ;U@]Ŷp+Z+O+ϼkM-("HD ن8fmc[hU@|[Z9į[fLqEPK"# dyF,8GGQDmgPQTw|QQbA1CTb sB3EiǏk&YcG2G˪#>RWIM&iMђ6CjeA'y40MI%raY4;`"ђrFJ_Tηz'KZ]BV:vuҌI@  (# vE䰫z;)V췟k&U=iw!I`dFeUʒE(kVw޽ޛO#Y4Ζդ85켫4-rmlNKԽ3o~ii6p]ZhmcwmezuǴ.3\BN!T7[ie3Q^rP4l,'zeѢm}̿ zy)F0i,f\FSn-j'çc+wJ?>u>ioms4Q4C#RK(b8$g#iHyJj.D|9])5mNtP“ϰr WRIaPx.ŃIwW8QH"T`f[&BT`U6) vFi*7'շѱW(#Ȧ̍2*<T`*@(l ɱU` V*d1lM TU*%nV]6Xp1[[ (+Ub@2+iZNb PROBNUֹ=͆cOiZrI9bFL)x9'Є+Ǒe(C?fMu~Rn/ Bd9b2DΎ2]]UILY7Uj{ɥ|pX'mpIU:GX 9;mhe:&q$?0vtm#e I<%v.]Uwxluz twO-Du.?;1VI L(.V1q)udx|y_WO鴾$Wrp_|u+7Lmlf/۵ ٝvđ=nrXKCk:m]G*U*\ϧi~ue@Yh=) auyZ eL$KvUdT %y:QF-LvOmCu.ll,:Tt֣K;1R%1IU+xl NQ'ƭf2J{.m.CJTӒ7nY,ԋeMnfV+ BH&w]7Uן,3rIsqձ؄ڼWXXn ni%[YfUC*劙pX|p8SKSM%ipziGF1Bŝub1(%0T)E> ;W=z_Ū%tl2 J-q^Q,?fZ杩:Yo5if2 ı7]0C6ݟ?imVo{R[ưx尵ƕ}*wR⮷2ګ!7HP eW LqWK}-b};DԥHea%m2<`#@Fج żqI R4Q~[>/u)n&OrDpm *Ti'Ϩ70zwJkvkf^GOr>^MŧtX)%n?ʫ-~FHᨵ⒥yxknpܳ:Z>M/Pt\jY]n_D:ǧ\llR^I/"mܺJjÒ\Zkv2Y:NΙ3CPY.o.Vm(E3#4ԛ1q:[RQW{qv+6Xwx>ꯧoT=0>'|j {yesT9y(;LM麍M?D. ߫w+ v)ei>]-+𥦛MLny$o:@ q_GNMS'˕ώ?z0|ARf+3M{x4;;U"^̌nra>]Z;\乶]?Kt֧-_H5(Z-Obݔ,γmX2XVTt7{.nԪVҫlzL-RànnK 43ݏ8 iNPOQTw2]7n羐K{+"FF,BFA>ʠ*G 5*r8"E: bwS.&u2` MM￞"jE z"o>Q.Ţ9>MqKRkl b@V1j[2(`V5T 0+e F1gfZij}j{TMp T4Wu7I)X5v 1Ȭ7Yp^=k>w6un7xyYIבL5S^XOkìzkqf~L/=*nG_#g776/iݻ=Ԧ-= Xj#Iu*\uwIAɧVֶ?/ -e4tP57H9M#O]"ߩ ]2fg>|@DH/^ٽ-)<--ίmY>Uך'5קmY7pAll~Y`U$1I?;v`׫mU+mjI7]ɧ7rs}ˢ::P .>X:j7w+s|ZGyo&ޭ$ψ޹OOljSN4=ҊQ}*Y8~t6􆃫GAhڗYQx5Ns"HhTfA[e=Wirݷ ^n1EZ>QXvB֭^oM3K+j)5cwB vA+*b~zR(c>\eIαNɶԭ3΀nb}6VS/ۖٯm/]w)•2Ç*g׻Kkl+m{Xmi=eFqæu%IV;[MN=Ilq-oڅIIWFr7}m w?5ruQmn𢻘qd~Jh]_Im̤ȋJEprJ3GĴQ7ySIcG=fzM GjڝZewmml \ ZeFf:MM\J=x©(U|]OQkZz?:֠4yl/om&\3a+,(4b2-<]zoj~:2+'Zk՛#Ogul6e1Uh!Ia,;S-MJw}I8ݪRtַ?w:[:F[afnI7B$vm,@CGVz1"ԣ:q$:ROߡ>-/Ht{&PA``%dke~;X;5Uj56_~ꛊ5UGҽR龪Qk^67:&Ž]%Ywx-(g8U-86 ;irTVZUخ1:Hg=3>@n;HI$&D$wY FOGN'ꃌ5,5V9•zbwF+}zK>:iocqq(C#I-Oޅ) ,NodP%TNRKlj򒽴ݦ夛h/>-iiɥ-x@×DH|}]N)ܠ5&TEbܤƢx]/_m.>)n)'fQݞ{mU,r^蹸m\iIJ*m8~~hc~2eyՌBĿ99);w8RXi;?6}FНc\Nn`[fҭ$Q3m\L B|JTx£G&_/юkmsKɡ1Ci~Cesp7)2m1 ";օF],Jq⥻_(~!]iMԺeƙ]j,Hۆ 6#Frj.ڗ7s~Uqo ZwlZ^cWKynkr^H"gH)ec,&X[_-8 RՆOՊO,nUt-"]pzKG^8SmenH,U]2̯52oRWMm[\F9=R~שo[IvZ,.Mz Uf#v}éy.WuN_6i-ǧVQhv0.&#q3҇Q[psT*4MK.k˅khvVU`@`zBPmjʖTd)5ix()պhv7CImg*3n۳qAMz#J.ןc'9zYKYtnŔi,N&\Hw5> n]z gs5ۭPNk+vk.4b!9ƒ#kW>9%MҺWҞk`H`e6 $d;÷bwwb4-%*I_/_lnjm:*JZy\[/%ԑ_A[OƓOC;,BQ}vInŧקٶqu6aawӺ\vֳ[& SH̛xcsj) NM7t'Tnu4DʖqsIH8G>xkYi/Ji}+Yu%PL46|: F)یRփpn}ں,<0"ֈW(nm?Hj|+`9\)j;u4& Ĭd4{PK.y:Ea]qB5}O/uLt7K >%Dewwb3GsGow҆*ϻq^3Ϗcq@Uv&@F6y=-/c4OlawJAPb#% o{~^Mꮳ|WjjvK]cdRbE(XE)@VC8fMfi }N+I'3\Lkvm+Բ"!=I>wH/̗5m ǘ$`JXmv81J]r['uΣZm[kwV8ⷫ%siv3OCӚGKj?7WICdV0E/oP h0'( )&֖SX9ʯ+1}rx߇Phdy€9ڀ֒F]ѡ*X`WdxX0#)$9Sɓv( gOs҆ vk`YZ;s P#pMګ2pe "Mň >PlA$i#FbeʚS]4yܙS+Bin$2<6HLcFB_wp3 2T¯T+@֖0(YGw|x{f/ڂ9'&3h6#>" lghEr3mpOӥn5U:jdFM}Y5X,t}BY,2+;"B ǃ^(rj.ެ#Dz{\u {ZMqgo+ɥh*l&b n;`.ѪOt[me/ջu͕g}u?ѭ}6-MX[lOx#P|53eW;e^+_NkΗ/ijPqͤ>Q[zn-"TD VװYҁ,Rʻ`tu'nOK]*մQߴdX;00ޝs1X>JT;՟9^J.dިE@v U08Qk"ĬFqN3Un*ιk"W |ϓxۻ:Fڊ Wd?^ZTV[OK5UhEwfKpzukkێķvySU֮gY ח2+н&AYn)@UVj ɱ@( #h潺S[VL,TlQU U*]U0H[0Es6( TxɁJ+@P @(irhnP+}PNڴK>j$ ֒ES&Jm` 7@QU0}mDMNK +O(aܮ7jxJ g.P*U.WmmS'?/uW]o B;e &W.YYQgԞQSkn5-*rdK_ԾGugZHY%2fAyY%XԖeW! IOww_)_XG&OSKsuQMwВtk.d;ʓ̪_":U(-1I5\,` =Qjt}ޞb4banuhPS]N-4ߧwH>#b] ˛'{AH2,æBI*%5:u7j-4m.nEO^Z]Vvx{Hn#H.ә|dvbCxU݀?n&Y>4"V-ͪ[ y!c$DVO]MwjI'TOd ж`VYf7˸VڈU]uu#M / p zM5) +O]6WޚzL@6MkJR_{s#dfN5o B\a̻ M۷=}6sh/ 7*FVxYēb\t4<^3tƺ-͝Qwr$x{D Y:kv$קSKzk޼:xNYZOTj o֩ v&:Co1i#a"2&N'QM7۔VmWo8U:804 s]=VNٻilPȀȡJdXNkiΫx{;&c3嚺<0[kq,ZKݖ00X8P7`|`nT8YX_oo2ήk%-5X/ch$W?C!Bbf7G+<أQzֲtߨ:vx ֗a."C4hCHKq}vV*Tŗk>Kdݩ;ѝL,pH8>o{=Eޙik jlm?wXH.8WFrkWcg5{]m:SK")=k Y26[gͮ4k%2t7PuBkzGT;~BGBIn 6Ryu0ք[K,6 oRuM6^f6ݣY"<:Y)33G[6 \WIfżP34[΂ykiCsv? AqȐ(3H.?Ii'%y|7~\cjΒ.ouaoI}R-7}%I`xdK )$髫BXW_j-KsMQ/AۥVӫZmh+[Ih|i r1+:oNnRdZnKw|16mgz%Vtzm[{Y#pxm I72ʬ}r!^}uSVC?= 龙;{Rd.߼- : rQ0TOlK,nO_ֲ͛\@+~LѾSK Pa3Q f\FD1RGY8i6wO{;cuOi7 M]>1[{Eqp r/{eO/"y6Ҷ;ڦ%TɩzԟSѯ$ͶM xP9Ky6$Z? QB;[9_ݷۍGeAqi> 7nA#la<085)W_Fn乵yn8dpcxCM 0^jj5qŴ I^.vU{KN$kVmUNL"Xɼ[r&w rnMKp{| ߉[Mm)tmCMyeO$\3\U+D3,8ov*^%~&_Mw/z&o%@mNl8[&Kw6cWKvz4ƓN\eOq9?}zmΩocs\]PAHUds䟈ՙx#)jjKdjiɷ^rU"Gսt鎋3"שּׂonZx.aԤTD$sDwQkE9Frj4\mSRʳI[4L辀-7[Kk ,-.n&n)1 tfG~}¼o[43=6c+k1vmܙ.lny11Xg\L|{NOVMq,J$˺"SThuwZ Ge>t Hej0]JaYR_/ #'nEmd>V|E߷9[2,zA*,w 0,1rGςN+٭Ia:]VS{$!b@ CId(t-6ܢT^kucW+EPڤ2FK,ғ7K:DU8Kߵ; Sя-b٭~mwE!mCꗺwӦq[BEi {HaN}CklVp5o%:'o\#ӚPAպ^ɿtSIDsFIlP*I)J W4Ԧ칬9.OZ>ղ6t7 hfXй7Pw8S^FOTݾ.mn%o^ wr[ŞZK%vFy&okl]Xeh,;h=qryx},nkMRItL["D#XVeٌ-\W2ԓz*ǫ6rܥkj[.־LꎡCB UK$[6{1;"3ʢTj6"Z|qe~-okӽ/gnGbg&M]&&dh!eeRCJjda].y[RtZ֗dF#hK_f7 %Æ-0u|FZ&]n^m>MjNj|cRmU>(O}A\ԚݍQpW6-l:$S(T] iJowmYa6ω׼ >t΋lwYZZjWB5,&H{732c(T֌j崾ߎZA+g?M.BS]yw+'?NI #=iS^YIM' 5K_d$Nffi;VHJkf핑dP$8W{񟩖hz/+][Ȓ;$$M=ep ǹ=RrNY4!_m= 'TQ9tRɨ[ȻcӞ;xWuxָ.tڋn.hQGwUҗ&QЫBߢNeyk$7J-+XᲲWiRN+cj[wS3+igJrcrCY鎠ӯoTꋋ+Y`ZsƥluDwLч$kn`9F n+CkPXmI4rt+>[KKtH-[{H"1{մ8yE3=2o-ԡ(s\Gu,N*/)oQeYݵwW;UIpR"PӮԈL7!VBOQKmtו0k֒{m.KQ W]c YY0dQymIumw\3qZ-5f#q,(m-anLp\IHKFdY ޼#) ]WU9ObU]櫇);(h 5ƝNړh#gTdfv[p8"iIJVV?Rgڎ-r7X j60 [$w_,Vt,4RdӢi$$$h2@ذ7X/y5DJbT`D9&fM& wY# hW/c<7re5GJ n.tk9e-cf6ጕp.hQ'Y_ܖbӵ Xj }jmO'$b2|nVڥNr8*yw;s_d56Ot8kG5׸ēWb |qJ4d\DF؁P6^x˻_6-۹o(N1ZM uE 1,02ۺ͙4 i\s#n;?m\wMre34kd<ֻP$:sX8"9\Y*?9JNUo)n*=-O"WV}N+E`oLv Ku,!nOu"Ļl;GNMCWn^j_|3j1cyKwY#+Iy*b)ϏҀ[eo $ ?CȖ;g2|:1 \m9`+` *1'gjDIM\ }2qdh]U<TM4.՘c1e +npն}Q{{M-(\"l.㸅MiZ5.4ƶH%`appGGڪʲ4u4VI[m2[x`6+]\#+2Veիku<تEePXgsICGB0Cm`D͒Y"X0\.UZ)$k鵞CG+tɁ ei..'ve$1řN"&B󤴵?_xI/qFGad־ MoHۧQX7QvU@h` :AU`-cx½ߕKSezrSt72Ȱ81# r+. G̕~Ez:TԕOydi~1?@EU*-ݶ׵$gt ԭ{CKw 0y X[֎\xLI?-zh-5m2mOwc44MՕࢣThP e f(Mݲ|ʌ𸸮Zoפoht_ohWɢ²4l>٤ݦ9Hፈs/MөRKvbEr%\JL/ԺoߪZǡF'.:-kƬ%Dc(E^1_7ݦtMچ.[vG8髩 q[+K¬J?AI7H_FQsm /m.;TG`\:+4u}lf<̲=(_ȮzwCM?WK[;H"v:aY-U02LwhkZ5Ru PM0æOu\[b.o$!4rī%*xGUi9n^m\NIζs^]֧q&>vxͶK)Zn]"B>)F":+$js_UUkiFCzcO^~gڝ59 q$1X䈪%:ETgpXi:_Գu)Yҏ3>jZ؛x_MtT"`-dyn2yB%mE旜4\ZxN^ꮹXV KTF4}rAlڄ2E&iΟIRvLj?BX~YR=Pu]+uu޹i͞ko+5Ž'{ܴ{c䵉^646rTKr+Nh8k5b+'ND{)tƣ,6Cs=]i\vdnݬpmkfw|75f)$f$՟=6O~SȥEm7x$a h#,`6Ҥ$rF'(|W^~(ۦj^ɒ3zIΑSިIZY ~nisKM{x\V)ߥaSNqڏ1վ:Vi{IgIT-wr~OkrFK]\[ik[G9:\Vq$Ƕ,~=fHk4xCДA88[{%[}[ťT^޹нwTVYfQ上2Eq=3Bk ̎F:8h:~E:_Ruz{4Ry$ ncAYUf!A55tv\IVz6:fy%PDkIRX񒬈]iK0V^Mx5.YOEeo t&J7\G |K.ܝBX)5[J5 m_XzsmeNjh|&"c6B], 85^vNK>Ž@z 橧ţzL:a}Ae\2RJ5cWV1N/>7O8V7nZSh==X9FԴBlT;% ê~-VUWi }iz_Jζҵ n3})RX$76 Ye@vl+o_W0^Rv1-Bv}K[ nU:~ K^!R b؎-%-VɳsxZ|%9Us|r'h:{/຺ŭi\GnM82N&EW gr*- ۽^ozN)(.IUxmb)v?Eϡ=ҝ]5v=VZ}2[MۭbRl^=.rIM=VcrcQU=8玆?ԯ[5 sn湴T#ywZ$n,koxhkz :k򴢚ItxJ6f1o qסO׽qF/ NLƥ|_G)MvV +^:rYqnURgg5fצ#uaҒ- u22}#2`*&: JZ8w'n^ݥ-eVNuP׾L+;d7B+ڷDk%d(K1'ۧ47˜^5gk|K W]S:/xC-ҭv  $[,>[V.3Qyn++Yk=6i-#!}Ntvo/f-1I2,8ۊQ;Gֳ1=- kWJ.z#J{{ޒ;mNAYky7C3Dfe *?+D_gMSJNuY;RR=vw@|GM}:Okk>D<ܚ$C,FGpU)QiBjCr^V../4bתֶ2uZit YuPZ$eӓe~Ln"h)m)"TG Ms{So%̸YW{kmD~:#?H.:S#y4Vôgh'UUJR a؆ cկ߶+yG9iރ;n-WI5qkyK{֭y/G- m^7Yc;]QD %K8۶5unk_5#uNk>V.Aη7:Vo2\epwmᝡikC)Eg/ܱ`KG >_5rn {8s f {3lv #˩nRғڤnvjNT-z ]b 4")gNגK{(`NqW+u¼U,{ ғu-jntղ;xenIJFэ6KUk(T;JY4򯿕Qz"YD#DG, +$y=XEȊU7-E\s+ 1}I>GֽOz.SK{InllDȷ3i ,$P9dE3YQ)n}Ҵmnwy,[t`Re0dggYUcgf:( ˊ`Hz,4al9Ki,$󑼠f$*0ђ^Z;RO,m+ä=o9'pOTA:$=BR^DPd,n!b$1ȡʳ)ԏPqOy'G\EV$sK+U nrCQIAT="2͟Xyt{X }gnRU 4ٓI&(.G#,{nG5[@Uo4{spoAS8fKT]J 98I+"GNgoUTd71+'m?K=6n7 xAARl%8'ں>hdkM/VNMbhn]b2Xeg9l+pۀbzJM<ںˬWOa+?O+Z0cE9 Ug0@14Z\jInx)hh据,:$WZz`7  IPm(uwF.tVm'F>KlygD*FwnVfQ'J.+xI[i,zk 42]hئA* ؎֤=14yvxql_7 ;ߴ$[gsl|c IM}7As 5k$QM/p꽸#Ir\mR7o*SW0zތm{ /Owa0#iK MH^ qz= s\\lïX%M>.In[i.-cs#f+5|(ڥ[^Vv,Gz;yqǪIq$.RI9tnV'[ʳkhe8+yTgzBk)Ԣy`<I/aD.ZĴZ~}&;]cP?XhjjZd͞ܒ12JW 1}4ɴ7DžntW]R)`Ć)1,\NbHߜmyjN0aӠxiYRGڈ>fknBIA_n9VX]c>⍍+z5[;[siyķra)He~թiFm9$* )@jtuŵ͓Z>#>e;623\rnI;<B:AȵoR:jn7}6x[c$)2*uh mٛi Nqk9*otVwp՝5NcJ-m?JVyIĒ3'1I-g9n~\a+t/RAZqwGQ. eYYvr_fi2l=ū q8WdWvU+g<6Q %~ide`Hϵ?@sE@96bT|Ԡod Rd*0Qfwlpށ3e#ϟlAfEBY8xd⁛j/">GToř[$d g}٭2y ;{uz_^үu@Yh+"k3fVL]~Vu1КXeR|{+>=ҽ3Y:GmoP-GJ1%22^fXM U8|MY+eOj)9:ORJR84rUeP0-wr'϶LUZ}֩ѷw61ZVLOV؍7%pI_s]%7ϳhMcԮ4-YDwV.CFqH#kGZ:R 5LGu_=)]ˣI-=,Y{2; NAϏWe5qt+FӼ}%ԒtޭizoҢBceEG>" ͕mm>SʪRnQ/9{pQuLXu.O f+X^+ⷴT4eE"E V#ʮ>J7<]S *Ik9' Y&Y#i7d $~bpċJw}/w^ߺvbN@UQ x`q^Qҍ<ȩ˔RyojvX՜A<95J]}?.Zߦu+3')![}fbl]˵G:ӞP:T,zTiw`[KsuBL0 URޞRj.*jx{+#UץM=Lֵ/Ol{[`aygK8f~նfI5췐2ZMJw^$9Ve}pD:^t~M SWե+psm v3kthSqZRrn1M$oյ*MɪHsM7uva ]I#i-;  2syt:QZqn9uWuσ]ϑL#f cI矵ze?rQi1⼚gJ&.MxsٓhGQ͓t\ dw*6U(RJXh XmR+_@9AJ+IQ @Tحp`R dՄrEcDd U@O Ejh P(@Th $95w*@(@T `RwUE@( WP+LȢ`V V2* rKtge5Ԛxs8Y7"bJ#C[#)IZ^3ڳO$?@Ii>7ia׺v3:Dq۽m1>պ{DITF@5%de'$ҧIsԖtKWHңYt;]D݁s$ž)L]7mM۲ԗWj-6յ .u]< [8-̓G B`dl=PjZ{Eok#G[I'uu݋it^2 2Ra0'8R~u%OOƾOIXP@@'BRsk<^o9|W%ޭ\fۯahZY]^H 9$2"#ץیU{ROSIj tfڿ6Ay}kn$ ,)sYgj$ZM8Joo}}VU6˺nm@oi,fhwYIvW;<ʳ%w'j>WI*w=EGLӯm wme;I okJAڭvI 96ҒrJI/ck=Qh:44 fPw 2Yh@IrfYHhnVmkaz6NZvعγ$"~IL9:?6ۻI'T{7ު˻yoDk-6Vw pn#*=hrn 3Bv#%W^=G)5W+YFI^ƇZgNh6ךUeqz-Zwɺ廛V"&J6,.仍JӭWE]Yjq^bܑK-ʇqlGjJ7mTWkQVO'E,=o_Y"i['=HL#C&UO-rsяt6Ir70ۦ$3F_%xWFMU;1x>gZxEA /o?&8tmtUA*@ 8W5m>kN.RUs8Qkk\Vպ2]+Nl5-WWԝoXn,sUCfC2zaj-ьYk>Wu/lE >G{tmF]^j&5ϭe$Q<EYΒGYZ5Q?dF')(i.2TQ[mF23'IX:L]jK ظHDpddLH(ǓCJ[Z+;5U~~埮w=%ݼ tqFzxZd./ d .c;=\rjR[dmpfN_y=ONҚ.o-Ђc{c0xc{hH\+0m~1ғa{לVÙ'D ﺯ۬GΕnwy},s`Ӯ/%iGG#;Cxu$;$*N[v\{-k/}}ם-OXӭ$sp"n\fŝ$hd2;w*8N\\\nV_Zqhz=)k3 hodi-g)ć$ߊ]HL]&OQʷz]]VC q_ڢƷWƑ*EoyUcw^q9+\ut54w4ݧdꕫgœzӒ5>A%CHQ $bZX/kh'FQ{v50m<)[I^ˡom{PV[ӯݖ[{"G(";}ŌmNM=dZX\a&k|'GJH3~=UԝOeGrĶ-6bxav9Sro6|ԛw9gr|6l '8rB7>(YzP2ՑhՔbZXV% Ee _Z^Ak[R239IYK&G4mM1QEJl%@T4*dV *@(J@Q~V#d)EFk-+{LIeh{Q,U[1"zHu<}OiSfwht˵D|v̎FP)nd?YJVJ\U^R7:/@;/![_N.I̱0ۖEYQN =M]=Ï4W/Q+$WO\tŞO5IsChHۊqyc-cnn]C{寫%6U߭^S|g =EޛЦ:Pƫ aZY2ٍ0HQ%QcT\:=yI΢R\e'MKږV;ڶ V9ſO.sY\#5qbٻØfn"DdA 5rOu-&IVwKom{MWծ f~nSYIgno{bV5 Z7uAVn/Yjk }IJ&nXU랚ԯO/V^ӯ.ĺU6w3Ӡ[lV|B,E;;I)1/O9t)zK*ɻWKҒNV=4կz+O^k9qi<{%Cm ,DΌҔ\ƒBu=lWQ(Gf﹦'P˩hdiZm+K}q&wfials!TզxOQ%'on~'I%~t5a,1'\ZZ\lqcU{ kؗKHm`k+%[D-4q#Le|X wޔ=3ϧl^j.-Utt~C]H{>u+Y,6T8fs/mZ_T~.>7zVnQܫj9-VU3O=Y]Y`lg mB cwG}Xy ʊ}7_/K[]^ţvw:{$Sk< ?J |h,58EQb 6 | =JRVe?RY 4IAtc1uw,Hn,'qوK n+k/^SvF+Z|xi$3;In]7oyٯFAyD'r)vGxQ~jKuڪyb>gї=[P\kRu2.XCwacHG, K klsV%r(ՈmtҎ\K*7):O2RRuz>.~x" @;h :er̞ɬWoNs/<ƣ[uFKi%ͧn$w!zܥĀۗh$[nHSj)|8rͶګWTJ|HU 3ޥKImR\|6eYw'--Wg5׵z]{8>%FwWwP/h׷UdR,q~EiB'ޕ+w}v|`20>WzuՂ-—1 iQIbА7.aqGk1Ӻ~utPw:ta4JrA%ޑ֢zc(lG qG6ID9ۚF[xo-T *za{ma>ku>b)Ld4`ܡ`6Ҽc=Gk{nI%a4L3 # +c?)l;kOS:v?hϨ_֗:VNke9 $V.# ȪH$9˟f<}=4k-u;,{ͳgSiwD:س~n"@\ [2*U 'iM8WXudiM\Q_tW6iڼi R׺:ob h7=%zo++qoͨu~Bꮍֺ&-;x*K,ml׎?g~6ХՊpG(:gnYܟ$+!ĠOfL N~lѶ|}h o*pE:\'Cg2DHj/ | sLm.kluIe[U,Z@ʡCەP+چ#fw^[n\ܕ' T Q\xy4eWS$8' 7ph [} !f@t `s?Zĸd6&\j]in⸎;%1K3%FK8q~EmQǿeTz?T:=n:~ì[[KBmnFEJ۴oC(Zո%MXt⯞VrI%Ƨ+7EI`tGEgH3λ Ѕg=26kgϋXǷ8g~(Kɴw4u'8y{pU|3s{=a''&$hk.ⴄ'9?Λk}NX. C4rݹjN1ޅ|9)BFc#QQ?`_ K V,eϒ*QtvӅLȑxHę$a6U1hdiqjvld1y+\EQM;g`I%*y@ɫ`X2 !U 9 dU&N<GЎ?qNAn!,WAǨy.k6#-ֱ@Aq|;ϵ%v@-:N2uR+5(%ig[K+a$ePH[v0p$g g?BrI~ٷ|HC͆ihgJeٞi`M.9;{KH0`kc&_utxvU^M%FOtic} TZj6+#G8π6xm”MŵR~rnn% i!5ͽh+h,DZsns[qQXxSRKˢ<^Αd!Ң[)fkiF{(f >'Ȉb)dKu|URAåScѺ1]Gk&}̖r f1 "S(ۧ,n;mA+?o'v{Sm#Ck+|E+= 2ŻD:~NrZTyX~Uvu^!˯jl\%p4o;vY }!)դ@~Ќbno̾eڶ_^tujM펡ݦn/ di.El\(ɤqqnN{պoԣ/sRǺ-.wm\ZZ[|2}̨Zxe.XߔN~?J۶5ojޤcs> ,+%bXI9&_HxzQ!>OAw#fJuF`Yn*PP JUj@V[KH[%e浭rDR'@WFf V*W!Y X'0j*pi   Wh P"EdPPc%TF]Q +@R&@3K[Zȫ`S@+`RY+M>:G[ hO/CYj7:b![w.XU*6C0i;8x`twQ}V{{HQ$V&9X"0iEI׽y1t{>}CWҋJ/WыO8uc&̈́;̸U< i (dgvZs5{M?@kYڽuoEd0aՙ°Ȩ3-Wk bNj^+GMÔ1$=kڷRkt>]X ;lje%đ ,du\4NuTCYaݰF*-I $`FYUryu1ԕE$=1NGu Ү[U Cbf4yC1eeS,B]s+K>3)tXhP,ALa'qWmMH}yA?^Ln`IyQs*̶2,A1Im_I(jQ['So:G)E.:h5kM6X5綝aI۪ܻRrמf6ݸ9oQY;޽t#EuRQ&m2Y-ًKbl6,07FQj'2PʓnMm.yf=Y,4'{F6VRHm˅Llh۔5I3Sen4*GՄksakko*(?fK$ >e' lڢ>mI7mgkk(:[2"a ߚ(Ơ*WF"/g;YT⺭7qy|~c;{ѾP4#$OUoIEض&uq9|Tᶡ''xOKi$Oޡ'K{ A澷/$vfN_zfe:e/Ԥ/^WlձK{SK]WCul.ͅk3KQ$l'plȘ-eOUIܭq|sCmzҷԭwtm6}>+m@A8U"VѤfǴe\w\F_3Xx}:Z_\_k1_'NWY];(HHڂ'=іU&#,` *4cu~=ZWCW )Kw"6f݁b6̾y'Ro v>s"V}ãXlMmLo_K;;=\=Ѡ0DaF"T;_fIK2Iڻ~7\ӯMt~}Y;P{[ Ja,m;Q+bc$2`32ږ)/U',mnYTWM5o4)Խ7n֛u4vlcy.cvM$"OCfZsI:vrRRzqاvCz'iԺ%9u+rk9ƒq*J?[k%hdetև1EƵijÍ\vL>uv]馡f{W7HZp-ey-n-6.ՀUڊȸ嫤TVӓ_ˊo*Ow|Xje^?Q<.u=7u=F@{ s1;1tGdct77:ܝ[K_|8'ѿS)Mu;אɨ3Kwbow޷wRd'pn-4cZmUmj9/1ҔK\=[OC7ZQg EܰۼS?sk"zs|4j_ZYKXT#$61e=Λ>_ 3X"VIJO1aer٥)>W*VRr>{}1tWv]h3qWʫmios)١e'ﹽgDXikJ)A]KO.뙷mjshV_^]}Z-tƧ>4 ͩC"d1Iq7|bV\KWR7FRIGj6>崅.+;MzϯigӮ.Voikm9y]{6S85Nz{ܢuիe}Tt~cД鎣}8MGӤ_2=kN"ʬ:=Hv)R<-Ţ[km%꺓_[^iEѣa BZ[2D3v>R#":vT%)Ju{e~):2<S?UtDiԽiڦ5s(h)Gź VhfьtI87i[e'kuy8Ժ=u-u&ho[-Ue#"TgUԩ-R{_͹9˶6f٘"淋Qy4N=6秤MV n!#t+:$q|B? ًt~)~!'ZYi6|[{&.,c;RK;Knq23$OqjjR,$nǤ9?zG##zoT:VéIoLؗ`# xߑr$1'u]GNܣ^M.#K뗔{S9>yއ׬}*LC=k>$Y { `HCF7G=8sKYѬ;&~ցY5,! ~tiWQwͻqk˝@>U 5sf+Uv Yd%N@v Uգ$`QƁ5V#Ek PZ@( 耭@(V7Q_p+m 2վ DR906֔Q'Nk4dJ%jH#Q,#4H9W?x4n 4;!3Oa4w#<4QA7#~3HI4I{j,ZW͡jfn`n%^Q%Fˡ5[|Wu9zvOui?le#KA\lY.ISa'$z?*U~-,^3wrA-TRzHH,lAR&~QCp3G Mh$k.^Vp*=Ik-6ZQeLh4Fkk[+9Ỽ&RLMT>No[᥹ɸtWeE^eIM]7Ph55cmemt" s+N'. KQ9-:SIQ;G_J[z,' ;Di8U&Xh`c!\: R:ꋧMfvڼqK;O^iVv}584 )XDRgM,[ ecV Ls/9;\^LJv~=dP Tj=Ӷwn"K,"Yx栭_6zAVWZvYɤ棯|u魩 xRDXPcy%d22Y=(IOMr¦tYUc,?5m.CuHWsIo[^zNڏ˟ J;§3tz+HꈖQw<:yW"agQ*+óf;KOsӖݸu^z[r=.$'yx mb3r:Wb*D0]k>nܔjj)77q=?%wtvױZjlב,zMޛ 7\^u 'cHcV8Y+}BS]nrҦf-q9[+/Ql[mKO\ѐDVR@+"}5. >]Zgkeα:u!<G+D?G;ҷ#gZv^u+)mNA w Kw <4QƩ,O#3KVqQJ._3XX}KQ>mB.鞖84>޴^as#mh!+,a{j[ū?Sc)J2iVi׼-hg}vt}^}STY1ȱE,PH<5Ԇ@λh-'VF-6GTE<ơ:ޮW+4`H,U-1T2[%§Jn.Liހ)oj[]iqjZ겨GVm$ݢ. D'T3?RQqpυ,G9=cwyn5 c :fH29i%ZlgZkVE}[C:,.3[i<@C lBOӴA=x䓴cYɏGOMܳ~W)c7E> n44y=8}R9^-W] ]:dfD2"/(-wJ&x~cz~6zZ惨۬ZO.a<dA/ݶrk-Ϝ4*84|{DoPдm.{Bh#,$"TB8)&9VVe[u:8+mcyk8LOzuҽ3qyuNj!) Ef{CyS"O2LcMGk:J.)೹6:K"Jcc]a.CPq: ǚrӻey=L]u67qi[Mes,Z3vo-C3~ 1;K(&,pKJ^iEqHZ ^i${GR`<0\@Gsٺ9e܊Ccz~i+^]oCzVXzal,`i%{.22N۶6W>;u_nx˷=Y-Lo50G$ˉ 2B*\ڌKrMOǭ]N :̏~]nX)n+ = &w>=˵gOMjzmjͦƄ+o{rܲ%i8ʩrk}\<.kع[b$Wb? ẠagmүxrgiaY|OaSᘖpX嶟< j?-QmCt7NҴeunh@n("Z= oºU'_Jk+nty΃K:^++[7C"+*yۖe;IsKzs/MYq؆(;u,*d89 \>jkl>}#6tοoR6 N`__B. 4r d[>Fbf81KMŦox]Ϻ:F~S_5XJ]BO%#6--4F#TFm<8JRb+zKkе^ծ,zjVdXز37 $^U楇.M:vɧye Ӗ-)pgߞ$XYre=)m_9Jʠ-彃XV?L$m)mAZ[xҼ}NI5K?4nI'폧jةpݽXw6c2϶5heؤ#2+29B4nX<׾]+U] 6#w\gY {rU Lm"zqo뗟킷fܬ.m#*!UW.b͖'&F5~\{7l5 ʤ">$ A*|WGenk<{Jy +i>g+ 7`|8Z +9 8G}LuS wqZ6f6nFF4x>5 F_C/i4TTx)U?&7E~TF6H1q_4 ZebG_l+@?l/5q(.H?Njqk?SбKaދtg\EWjRK oQnޯ׏ юB~sc0[>_A2ۄ!An8%1o$ޥzjeK'J JR5 F * 18HkMծWoj^pD#0BI ;HPk:zyɯ wiDn"{qw%G"pmgCZSi_qWK=w]H##Vb9Ff8TP ,@ZQ_z}[5VC[&%Cey EqpfrcdXcW(p>{(^aP[[hL !)?@>"N^={2 /]MOPmX`fXN?d0y&xYKI2%g+Pԯ`TcmMx/$]AFדZI3Iye[ɸm:yLqHIVk!Q:ުnu;;;+-\FGq h`v19a_3-&ڤM$*Oh]SBnliHb,*6c4)I{iƵ=KۺM1uJ^tfꞓii3_-x49Qz>S~nDz_uIb)ϢYuewz ?i4kGa=opҾ`{ #Wr8ii+i f;U7ov%M%4Np|7筵.яAXt觴I+Ɩd1h N8Q}MjN>#ZepͨZʈ,.lR[fD@GVHr>du[vH?̞n9zΫ_u8eKIlᵶ$[[c$;6X|ӻmm7V+MG&|rK7I۷0ŻHlnˇDw`d ajMJ5vyۏs(vɜꕊ8U.6-s9U)ko#bbU!Fpq6X_:z[t=۶Ή<jFP$ҫ$`riպ?Lru{|ibcd{C"ʙDPFRkzmET_"-.O~+EcM_FԺSHxM鶣N 3b,Qw@$^>KBQqOs[өKsnm՘6$EHr!Br@ܒxRn<$ Ĝ ZRtcI MsՓx*<BQ*P'Ed 5H_ϥi V%6O#0-{X.$C+۞׆z~&ksVUBT-m>ڲGgEEsҝW_[]\%pLD~2F WBsjI?x=zjIq\[wi! $J8{0lڭgk]Qim;]_:4bX^YUWw!;]\!)oOkQ~Rknw'V+G{ӻ'WUק㸺udEiu9kk!~KI8h!ۭY|h|FWQ.moO9)[ïKOJ:&-W5-#O-kJXCs;\a|bl\)$ ד_tw=%YJ5®y<^c䴺}BHxPm7ٌRh ʲ3tB6xnR^[ׅ[#1/X^taoaS^A{Mw"5@m.]ܤ$q.@5UۏEkVp%R{|M웭&}Ih]\Բo&XQSTR:p_ysipjqOڙ&)e_PXqoU)4g$ۂuҮZ?N:#:kZފa#oHIpK%-˗Rqw+k 봗s{zNѮlVa)Vw~7X,u8`SOeW>'*,O\\ܝKuCX'&mB[3+15!򤾊M3"k?>HNSFj`ggmR6=m-]`VF#mbqDfEA@3XJUD)@O(?ZQ5T tEjR6@Vdhd+j(զř'k@V8ǚ@(ՁVTR ͂sXjjֲ9MN0, \UbhCOܟoNV3t8.V{iMIq$HQIuYZ|?ubⴝznm˽υ'zk3/f5xtȺKG[[CK I"KIMl4vEqOWA))E{iMzJRoj G֝֗uk+;>;Y/d& r^6:$دFI{a=ǦUꏹQ:_GQ.V=h5 /gJtEfٹb1'qzzOM9?VJUkYOP }Ϧ .l"$f-ц )it}#M|]=ݕfd~j:j3O}\2WieFNYӎ񄌷g a;R5:Z%DXجdtT7s~U-Zlg 7F+>Bեk{{"Imkq1- G8tRIhĀԹj88]+,{Tji]$:sݴCr`ᔏID,K}QBS-U]AejTmɩM$Q24c^̛;n [&`msu䓸f5Mܻ3&AO-.rLcp$ Y |3&Ctopq|ڽ3YqLGNkn$,QH{2nXsS&GGGn*Is=Kz]P]ZjK}~~!9\ȧx\|5F{ڸi&Ծͻ]tu^6Εpf,6E IcR$̙f5! |'*rQܳUIJKs1U:>1_H:@C[:y(n.ŋAncxv#FOEjž_k}YEjϮfRҺյkxHGm ;d U~EK l*]^gG#KY&-gx%EyD2ܚF.wK:F[pZzzG3nX:uI$.]UKut=>X4Dt7P{t3$-̍+=+{ JJM[b\):pqbSD點baB%< {ghgTf#5b{|mNE)[II\oW t~Kmq6W6\b^h?);9%[æPU(ۤiVڊ&L&,<.-u=ČFIBM} F]GVy( R]2$Od15fp?1@I]g 7+?z?5_隵z-{ggc^-rYZAs9Ec5R !FRNJܳ)VWɦ5tkAzvags]KiYA$WmR1(|azВUHLHc(;V⡏3:j'v=,S=/m]̛=u%ݴt[ۘ {aQtYNZ\n-TieWY-=MGEu9;QMi.ay>V1stfX>hJlsN4yk]RIFza:S-+kWh-7qg̩@tH6ϕRЌyWMb7o1 ?gӝ=z=u7P6>-E^霼ip.[kd7Hv\ԞԝQJtaNӧouWWMBE q'k#d/=h-b;on\՟HV鮭S^>ǧ# sjLrčdg#?^ӌ֔Jۛx$sU*^ 'Եn8-1 ]LCp[#HCWg/om]J }.]m UQa!cmWn#m}|wG讟kN4{v5eFIYPXJ8;j|-7):K,cliVUؒ {c{q"<L!p:*e-mKNN^+e7O4K.]fS$:eI!JՋDA r6xvѻP]ꖖ%g\$ݸ%B܎ |/ZT"5Uo g8/aOյlwrۡIw\n] z5x%Q/4mZk>f-eP% w{v'M>JpW7|{|-XYn램莜/0"|$cUw9ʆɭmI+qyo9M}m}Q꾭zOM6 }wSΧab8.%X1>@2>d {NVI?MZ;S^mE0u쾓Ժ:jB;#[ ! /@O4úa]Panoo?*?2.ǟ#&9e"+kxnI,S/fSV({ly֛ԓ}w)^v5,˜=pMr`r+L (8$5-!oA݅H^H,1IMW{c{0 8|sRx jr(h9"pv# K;Kuwr[[ SbI$Jr\ FӍg-o_؈Ў->>@>x7ErFGp|~>>_cGKbMҮtКfkSqM(N[VRiC:E\DŽQ:nWQеw]Z[ ^6[3VbU ,1v>"Y?w֮ۢzFL]Y#̭X/LFf3g&dMYإ{z5m౓G۩Mc^[[P&xt%k9rc'xw(@xfj髥:ic+s[\OV3_OS:wwleLTm8a$ pUriiڪ/6Kϒw?Jޒc鶗Y0vj"-\JExoؘH/q躽]Y=jmg=+_jܒGN_F:௠Ẃq;g}Jn? 3ʻYIe]CJqidT+KW0/MкUlMoQHŎn$Ȯoir\ュIe^cD=-=A4N}/Q,dkc')dq"$DH7/ s5ۖnڝVҷmݕs<'Qgu n7W6zY6 Ùq۫n-ztu~\^hZFVvTaك NQ2Wi>]K\˴SOsZBkmꭽqo$&7acMn\#wE(Sp,s$Mk<~in}>D:=LI:;7ngXm%\jT P VIյVs',{M:?Gn+sW)i潒2#IAn 흇g1u(-QR.\Vi$|1;ogyvy,YI$I'HfΤ+[m$k1-p\]DxUHB˲@9V8 j? `#$g<穭&N.3ɮj m@mвi+J G ( ~};껽s NjX <떶Dyd%FWH[Q@U|ĺKm[iJwb7?[=A-zEku+\++ H0]a7˗H5wnJrݿKVRھJcm6Ri:Kj"FRC4|*ȑ*'r~uێ?sxu֪F i[4dV T(@RZ:`RV2V p `\@4P 9;\-QzA`s]$>ku R@V (P+7`5Ma`MZ`R@@UN=Tso+IAT5**MDXZ), U*pȪ %Ԝ`|j+ +t" , `TPD`@#n@9&-[2*wz{^4sv怱%9h\G`?2PS[eiᦸoJ)n+,EU :Fd=`:K$5|γAeriQXݕK>sz?I >uZe0[mӺ7+%a5,\~3(c90ìjM6Qڔ㌽'c^i10zE/=*}Mm5̉#03Vm2Aϭrܯ7KXyMw_UD~fN^uuJk6us"mB;ˋ`es'lɼv?J*3wmU=@nnR<\\ܿv#pcG*N뻎]'NMD !:}Z-RLv g^ҭwOtvhJ7[n-5?ZKh^[Cotζ-EF<3ܩf"<.7¬YӏQ 7*rt굄XuYi] \7JGeu67:kz|'nG7[8\%G|~֊v&(lN}1% //fX"Yl2҉h1?:VwyI85vc$I$~Oz-XZOe\=!X`ܰd T?6$SWA[TvɷMyݞqtIi:ΒVnޏk KM^kKH@0,nlEv$I\BjiJ{(%י-TѶyٺJhZ~}>z?}u;I"j7wi>G V]ʝ6-%77ij{9S.Gu?Z6Ǹӝ5Mv+|,;8T[./KnͱJt9E*i:T4]j􆱭њbVӮn. ͟ʲVچKY.B2v鮗K&T$*Rk*u'$^~H=: LmGZ[2YH {{aGi%f=E9yh@Qpƥ˕]UJCW|iشxzW: n9Hx QBl5 ?j 7ڌjkO,Q ZeG~}2}Uo^ӵa.,ⱳI3 W#L hp uWv[z;<$q*q;,hϩu;[OSMUMi.#CϲXcx!("i8-MFR'*Ķ楻>0}}I86R=.u޹jMz|ME^{#=k.t9PCof +͟/Qu5'_Mp}-7F_Cz/k8YGeqz3M$ĽN^@P6zt&_sc#[uwZSյ94=Ȥ:wjH'vc^i? M -nU*NJI7+*gFMK:B'oG]o[""q`*%X"Smgչ'үMi۪ik4,zĐ\[k`Imۃ.?1_+IUǽj3K{:C1hL-0c!mˮ3uߏKNzտL>G] _EWoӢ:Eޜ adb i3k.Riv-~]ڸd8=wWv;oL./eN|_Ma2¶onښ5TeOKssskx=dnr UtduaWvᴊ1J|^ݚ,[I= tr111{rN=J[b%ǫVyyE>?i^:}R׋umϦ,!$80߲΅hqoɵoQ(^cN8ݶ7i=UFq[<6{,VWHʼ(~ڼGRMŽۚ'K RyR#EP;GkAcyes$GP~\/f3jB{ˈ[KS;C [B+<[Dm223Ĕm*ejFumܞ|gӺ:=NZI>ysoq{ đoHd6ARPҴlF.":6Mݽ@^&j5 Ȱ`Ѽ~|4co&)Xx;GQՆem=T-w* #FDx˗x 잦֕7wlX:}EhlORX$g0\1G1T*ƿ-v5KUkw*<ԏwSR˨%/2K^O 9J(ca *1_ii 'W|x>$'@:5fMk 2Vvg q;׌yh @MVˮzV-W\J'~k{!ĒȽ$&Pjij~qM^M5=OOaҚZW]|SъNݭď KK`JʼԨZα_{p{T:wMtuX4"mwy"Q$YHQf%#3s괤[]SInങ]:^MN֤fIm"IHq'nN 0/̳ލObQؾm:^)<mY,^uHLކ?>q@Ilq@SyM"P<{(!jұ$mު2dxLG:CyRvsFD >y*3`O$Q;ό`҆ge˻YIb|,w$19NDqcZ$"NwX>aClllB%pG2ź4T»4Vvg#8>mOIe 3,@E1?FES |1uWStNzm?Ta{̂dYc.e*2X> Nu,w=8f+kЬ7iٚU@$T+*&UkKSN_5ͬx߹bMt磺f Z4:}k3$?3Gquv26*nGY7>|a7:7+nb1Kkn[_ѻmuI:uz6jQ2lQI-@ܐrLŞNS1&U>=UȟVӮdU7WM1* ľ3pMZ}+lpV>n1~pbL;u+6D\[)eK*a2wq;LJN}DqtOh:k jڨN[0+| Ims"]7nܠ?+;(wuNsޱ障gQn,49ۻn'a#^oG# »W*\~js7U^g5KttޚԳEudR+ven.d1oUt_ _6U5%mܣXX 5iy YFbtq3,ZBG ͱQpۣmחo0ݜ}&RVs]24ـi &Y 09bU#Z=GkV5mykfaXH#c>d45uYRM/tײ\K}6;]y嘒r}?_54+TYg+z%ܱ%2Lכ?G`F akUwyonʉ&xIFi|rkTd`Pv&171.a3+m?+:m?Pแ)bJ:2A`JjӴ͚5JMTi| ~ZJ ?t}Ӻݎ/XkZc\Xytynxƿ,m)U??թmk cwz,OS=!?_7K:ֻMw50h-d@[[Pne44+>~t'-ޔx|MYc.t*)$IJJH~f>^r/쯲T'|*j|F͙+ S}Eh 4d  )Sh"2P EFm@l(V Q+[,hiZF&UD5k`k@5tPb(w@9]"T3MŠNj#8r &] A5\޹9_pZ ^@;xj P f`~w 8X@V)h )^@@PT'`UN |Y֒2)V?ѯUwZ{πցH6W`A0@G*ȭvj]ҬZǒ?Xqo'0:nZPѥ{ȝYſu#(p6yX>O9TT>%O ӫ.^람֬a)uqtҲ2<[ {YT ۼa[@R2f%{eqö25|~ %~zfUIҵI")bR9yXq&P*oN*RKki0'.H!yRH%|4?##bS^j-G^.Upw wJ Xգ3ZR+NϾvi* vt JIݾUW?_%ɡ5)-{#0g1W_we`A"Ww8'mc7HcPNIsܹ]W 6$Uo{Xz>ϯkhGwشg}#DiP>V@q^j-kĩfpTlzES +ỳ'mu e0Pr[RUھ}炄Coؠ`"-@Gq[st=WM[rKcv OڃN[.;2'1m4<[Ƒ0J̜iUWGI|':Dz-riI(٬[TۓDO[;MKm9N<%twTMj]EqqEŅ$[I t I*1]T}NMKrJ7_~Xg>]E.N`.ȴ]Y *3ŏK=TaҪ_|ܝz+}2m~׺~YAnKu`q5$oP _8,,hIӵ)<,_\\ʚ~qͻܒ'ZMmuPvڏO"z~FQ t$[^#S+w{ji8¹{%OtʥʓEk':ǫ:'ӝߪ:7AkuTI5'iu h]س(ż:eA[55t5z9鯖ؾv]fr5hTKA+=r>/+K YcxEY"Q߶RԔv%* u'+I˂sAj]#PigӚB$m{8]_Qq*LĪ[{x8l[&㜥WSi;>]wZ}/VezEey&"Hn"#g jq}(w4]M𲐗oR% ~!{KֵI`K[J'}I$\KrHgUD@;X-J*3KU.;ݥou[K};"u]?M+n]g5-2oְ0\R@1NlQ9b'VIWRj[O:>}7=Զ:Iꫭ P[iZ^Jc wl=;Rh扙юz[j[Z%wŤQuޣhΑOAպ:4:=f}g/lnʩ Xees햄dҗsi_Wn]YӡuyzPꞠtǵ' =&kM0XG YZ9}1i=U1ZJRꒊJQvU&[ݝKL5k~QF@LAյ(c 2b<Y\\I#LuΌtinu*j&;T㷜 Y4UgꎕF/mSPi㐥P4"JyD;& ^ N3ri7 ZVzcMjIslzgK`f4}>I tga8ͼs:G-$36Nєayj9Te|*vmy?"zu\ywV:e1Z5c+(icn􋦂ҫ{^d@(g`@S@WD *nگvߨih{ .6; m~[~Uw>k{_AknȔ3*-g^YɣGk` )5@FmOV֖ lvPމ^ƕgWh1%ē\# ͽ/]k8L^I[` liZJXTI;UtX?O\4FMb[K}VE++F5slACȍE4[hKZ[/Mb(+Y-:?Ӯzkm:oՎֵ|^,,@ Ji;m.]CON)j뿔[R4{O:_g?V{?o/:eGx-`h$mg)Um‘,uu:Zj[S5v⮥NʋmK'zI껛}Vz}]H.0m/aVYyŴ`)#jKOkQ*n04$?*Kҽ =Jt3AGo*=ݷbhhgw{XaEIdhatyۦ-OuRwÍcŊزxoQ;=SzR\_:v6j./ 9+Hw{? e nYTm۽o9y}l Xm{>g*MTxe3H 4;Ih55zs84Qlt/PQgJΒ0/yeƦ3![m/ic{iJO? -}]d{}[M%TYE[e`#dxF,c-M$RwY/jLZ 2zaL:s]hqɣX]L?tN`iw&TYQ&arv}~oJiGҬXPuzm࿼m摭̪ʑ 4vӃʬ?EԔU&~Xcmk@gFd!@##YP?`uCKYWI:k,J*R*: Ǻ__Ԕ%[m4[\/ܹ>:-:&, 9X/mn-][đ6񘡓ţe2voЌU|T)*'>m}qymЭ/B<6?sg! $x{TS1¬#ZMNu9oiz;i} &Ӗ],ήM~^;=2MKRq##G Ϳ#Y[m8孱.8,'FY4K$)%pŠغpW6Ac;[ ^9*vgް5ZR_5$}qwr:.DžYʂ)^tN~+K=(]tI`4x{o eSZ궞p/F=V?.ׯt f]M4,ȤY`(-؁ +6/bSInJ1U!ҴFmv[ַWC]GGA5#0QQU{j/+jJ5=}$z{tުusLײ=)mm2:߼YJZ=hOkZHiŖ\O_{#6!X%F+H F4 ,z|_i/8N.-TiX̛ķyV}jSצ0ӭ?KglK! #h D87Ӓrߪ1UNy3g[I~+lTX$ DvgZQjMUo?+oF zvS՝7rK@ sYjʹ t*+P{·:jt<~G̵ȪEߥG{m,<]tؗG-t{}tyfD/,HU$$9oF[VheO7 ,Ѭrc][:?_Cz?Ro^7Cɻ`f8|L˽a_9,A`Ik.q^:iS pI` =]MNl31"U8(mVȓ$_56> K9f̓XA'*Nôi r V s۫*kmW:hN + Gfgq+;s4a)Oѣ@NL;h 8g6b6 s8 Nԭ>.-{lm.KF%?и#+#*õq\HoUUo{]n,Gw[ZEOk֐7V|$, A݌5sܳ}j:s%*xF԰ݟzN=#bY_*o7 Wܤk$I/˔ۈk2}ձ͢t/` Rmt;y$Y1۹wTfFO2Zo|ٝ-*OJ/5HߧPO}h;Rtk!eHX1&w+I~[ (w?"ui}K7KލqX\96r[w{O5OF%u̪ yi+i.Yz>C#]K *dTGrz.جe;Դj5ۿ7+WMQ~zo\nu=7SIm.`UG'Liɕdf/#%Պ]2?;kZӗokDRDܡe<^=EEG2DuyWzNnN83GW'N&ƍp>L1|*#PpT}}^ÍE5w.ֻ'XEU֞ޕz}'I/\ċknm-F%dWe#:r4ѽ-FK-]ךV՚yhtǭ:_R4Xz DQ;(IR,^ acr׷}46Ivn|wk2WK`VP,xkIuoDk=8m ʁVhi6`Wv@`vi85a?Z QjkN=o}:.F0T֤W)4pdX-ں|MMJI{F8tv-w6>YtOYu(]1zQT ́UW)TTEMj P( Z1Qƀ%@U @( #ѰE` KVZ@1EMj̊`qgOOᛯ:?KeӬ,C4Jjbo$x  WQK=xͧRuj⻳jxzYz?YC}A= wde. fFI<^ϕW{5bJǯLz1hz͕Rd0q5MnBE,$~K?ҚunyW}֧ V7+gbԣ&W U?+FzobQ4-ןN~Y³t:k""k+;{oGgI`W'ɴ΃W[IͪmVpgw~'Ktn\-KyKsz,ݨ|w{U ;m'̗UR|aVb6꬯-߬dk=V"ɣ[[K.4NG*.{CU'Vp#T|S߭ bM ͧ6Z9r92m&Q#fA`cN+~7njrLzRjե ZX[A$pCU(V6]$:Iܪ={}0ݟMר5K^Ht"[8)ގ6E^D&=CZ>i.MSu4IE~k^3^uXWG1ŷQjZک7~/6;ݖ-w>W7T_uHm&}K0U-\o,*؍"tO9:r^{od=#kk}Cqk= NLۙ#հsΤ$by:u澆b}+S-:uoMS[;owV(FLAIm$b9 CGSWIXjW1v SbyZFH#a$$`*#]VbLz_zqԭR_{(|C00TՔjMۆuOSwڍ$}M c&Sӯ&:j Y5Z4M H3mӎmojM6iO[- Զ>-ͼ7s&fQ{fRϢjZ:}ҵa(櫹Yӝ7L^u6EexaɎrJ%Y-9$ ;_K%m]\:JDi=:ջA~Ox %.@m߉ 8֕q{mܸRکۊ8U\[ԋf[{M;Oıo v2c&G ̭Gt.sK|Gڣj\$6ϡzֿYůzYY G.iڼ"]j-wt\@". IЯA-6g4\jݳTǮ}FUmeСN;ۨWX[+]۫|"O 1vR~GJ+v7N?mJI,R=HԽD?@U`okGV <"6Dpwmшču=6QUsIw'{cgmgZ=5Ne&ok=j+m K28a4*a@JV.{_1IcrtTnlwʱtשi`(WQ鋩DGx i[EzNFE>InO;ěVg>>ߥzf.Rgլ[:Ou1pȭ5fO|i[i>V^*Kog=d*DҥƒHn좉&9XHey#9ejeNUI_4vI6ϭz;tq7[?OIXä2i!wFhݦt6SoI$I$T/ۨQjW$T>kR,=/6Ry?6MӚ^7Ov6q[ R h$,7&QbEkЉV7jFʊkqlj)Ren@Ӵ[{Kԭ>}]_NƎaj{=c=-m]8ZJr+nQW}^OgO_W1uUδgN[70-omokf{;-Dr{jki/NOv^ݴ^_5'WM6}H{iTBDGMo:%B ?8vN.pNW\^Zr|u]sTU4HhwWi=?"\vȰG,w \*gnMai/WIi*UUlϯ%T:FSJ"D-V`LrR&VVשJk15JxMZyw앶d工ޙIiOɠI]qM>i_]Ooe+(-@$43Zs-zV*+w %Y0^c]ukk {7Vt=D7 t;ŽĦ T*)57jNJfOzU%nк'rfYw7mfN[(oRxD&E0dUdɼHݴayolR(vRtu4I2ve)"0AAE~(kT( P VP Ⱊ5_ 6/@Vx`MOp) X@RT(*STǐA}A$urIw8Ey]h,rv>+3pjDV^dk/ ds@`W5h-uրr]- [@X֌x@$VV}GRӉ'YnnT$o+*W#\VF:>ŷq]Uޝ#]a$R?هڹVI73?=/YCw/$6aswrAgub\ڤV2FDr蚎M]{7-啄zSuVI m΋ׯ\^HVKlmw*J_m/r+B$kxGOiEIO7nIϩ_ƗPk -w:UZԷw/5m˪0 I2fѥ.ʚ2y\cz?oJ\u^7SowVjڭ0:C pUx/!@a5;SN»o 4Wn<_Zϩkqk?ou5[=r)gɒG#C}?I-ru?,Õ"U}5WRt6lY$o|/V # I⼚ntdT[?KG(tM:NԱַjT M ؠ|Xn#S]YKJrSQK_>}]-guKilI-UK; cGFU1|ᔉ1eiOkpiӻix>yԾSKd֭LPўI.VDf.T4qSL̛]3#l}Tc.ӿzf^ӽ ѯmzoO@cU5Nq$vve0iěEy{UӸj۷T,/]/6wM>Z7Ikk;Y؋ zENQtk$q&2/~'=m%K}\I5qWRPW|n_[6HttUҽ;jq:s]dK ۭinIKY"aS٧O=IҊ87ZKm. .{lb}Fo{xHkY$)T*E;ZMt;wJ7+ڒM9cmh>zs/GO𬷗c-dl V 2O **UHE O>zp,|.cnswu.O[TzOh'Oia*|] 씷vx|GfDyCN˶߆|]y(wfXqT*%< ~ת)\]_Twwz-rαP0Vd@fp4tמ*G?V?z{O?wAok_iRLwd9uKD[sóΟHu]V4_}[Gс@(7l.4ۈ >F XBUYHFAzܫ>}h|q }2\Y .sW2 '`?:k1[eKqlmpD&2%CdcG {uwvW=4,$.@ ~}$ pz;MUVWagSqjV6܂we۳N\ lmi8Qړi%T$Pzk]tŽ=.'KBlb_/$_i&w4ңuNtt>#iP/x7 [FT],UIEy˘TRUi~V׉.)x>OԺv1=_t;V8IN˰W[nԋ,Ws+UM{f}icuڰ^Ωut[ujViAgmnCo,l%GVաxmǏ}dNT3rmɾ)׹ jçҝ@ Vk0Ivpk;֪AnȧQlu5>g+^ۉS1z5KxXMFåk]Kw;D24i)@F$Uï~i8ksMj}QzLm!n뮢Yl-Zm8ucXUJCo*>c$ Q-Er,ZxUpm׽k%E/;Mcki'*#{^,~bm+ݹM{K"?IgV eOioykoݖny#nC گX|O)nK9MmG;7;WGWtxzZ4KZʽƜCW ¨cI`YݥZ1zIvy\qv\xR뺷ViqzM an.} #*o6m=8Ojk&.ߧZ:&bVܷjdVILV2R(ѠݹG`F}NQtV1W˻M>tX{ M.ɍ@VYYn# w>\ֲ֔~NX|'3ro7Vp[__U$7,4׵?Ul697$~I"c;` Z?zP~sMK nx|Yb]]B:acy*S$H$n""96"$_*ggaQ0i9em>M ~ԋ򇸂3$I[]:FISҒ25a{@׺5ލX4Ӻvɢt41<)۰7Kɢ3۫J^LRi8z^1|mbx泿gus /z6i 2(7!6{memJ^לqopCЎҺD }3Z]:MZ/3)GG(Oi m,Ńo>l2r tDo5}igށ:ieu8,+X;T Y"֖U~>.ߵOYB_+z"{;jVG#5[Aٍq̼. 5Z[Ok[8NsΛ&Z2{=E!2\bʻYv݃WՂi%]Rvct%hXvfv3#[;߄MUUr+fi}w&8;y\uF+ ]龣^᰿{.XH7c_LNߌ'(jJ65ߔTX>ˢ .ueKJ5M7[:q,/u)L~ Iѓĕm|On\'>A΍=C>:8fcYDIYcdqs8zƾO+=f$<QCf6 FG(bɆo[* 4%6I.*eT֒T)E h$=8RSxij?r3,ٹvp+,/LVWsQ=L,SNў̅UeC!!5?S=GBa G59bu6ݵ4p !O,6s48%Wrψ{<'T;@ sګ1 P+`BgGgOҷ!G QHT* D 6dc~P |հeiU+n_ asjكRiVAHxQP\ThlUm[jڕΗoi:۫۝RʹVdr|m6_S5eU0F0=5ФXƾ>D ]ӷ(#$?$ ]̪hpHR2A?A3Ʌ`FWÐ P,yDR>E98T"84˿;w.<{I {&[ֆX`戀eHYpBem*Tzy){{Uq}xgп_Oz4f,w+..G'#H;D"Vm.|tNM=Yh:[=S~a2,Y2.6YAs+NJ)&ܛͷb#T >jӧ%V^=AӍ:mNwwU.QvNJ8NM)->2**2QI&*vYkwmCj@l",uSlctםN܊B$&'˪ظ;g?VvRIqnx>A\A}RZ= Yܭo&1Msn{oh^8Ϊd'^. ')RmnZm"xzgFkԝSY3!9,IuqX! PBY@"I {g̮X.'smRNFk8ݶVy7XtWGTXMCMI'{TY`-,U*c8|SĔ)t5ko]x;kS:@a]*U}WD@i^N1HY"4;KZt4(R츴LWJ"y?kKijy<ʍP(Go6?_fX/+QZvQUZ`St0mCqnҕ" Wq]qMvj{bڍb]k跧s&AI84UH7l%{uL%n;m8ŻǧsK$cO[9zZ^ P~F_+*rوH[lqOſCh$mWe aQOW]ƣjz͇\'h9K%i l ۪"󱖻k%7=swIm~]^،;򺗢AjuoMIzik\[D8Abjg db]mӅɶI,R,쉷;/,Lcj"ۚ1Van៵Rs+w:iu1p]c.Pn;ҿ8t}d}uꎋ][sM6KMyAv=̐DG%H> ז[ӄ#Tj1ieWfte=KRG6Pnws|^=ãtO/aҺnqu !,inVmnlUWrzu]gnR,cJ6st1^=#P-3g[V"kH"ȉS}Sԭ渼.t˫{ʅvDp>&OMW8qWPj<^^'p~^K߇ҥ^m/O ܘGKF^夎M#8U)~չlMrq\Fs]Ϯ =a?G{+EAu 7 m {bdҔ<~oܷ6*q(ESMRX~b+Ǝ[4M4+w2r|K[Ԍd`V--Z9(ǤG=Af6cj׻MKq%u3FcN'|ژ -G/V䮚I&W|,mP^-֟7څg1]⸖)`1r!i#s|ɯ]mmuڧki:uw]GPj76w7_o-Ë1!^KA~::?1RvԗwI6ڴ_6JT~to4>VMGu8k Ad2_IJw'F{R&ཪ£e)iʶڞڋII~їj][coszkmweyoi{|~yӧf$ʐ^{7!8BMG]=ŷJ+ c:gF?d-ƴ-绻k]HLoo-DMo!bf;roPW]$GQ*s]+lC ?g:Rԯ[{w}JKA+0j(&7gc[[8KٚYגiF[ܒon#UuW̾e_iچwZuZ {K$ܓmD,Dш%I)=*tTSVe۩y~OPzuQzgOFAOyyԺږ#6zυaP+JSnR_)6ulzv{|zzǠodzI]V}5l#,(Mvpdʂ6,8E܍{#8|Impi\Is]^FW\ֽRf鎵T x}ŤWW;cKS'D =ߩ~kFuպ&۴l|;=aC)Z(ad{OҦ}jX嫽VT7Vu>uƣwt6̗n;ʒO"f x T_ a7&qMG^5OS.o..ؓ,drw02?'hE -V8\/nWr@(, @(fJ P*X)n98V come3%.&W Mk+@U*Rh pKP RVFJ`W= @~+)X'585H F>_1S(&U@V=@V]O:nc\*q;qXH) lHgA5ǨK gK$GP}@~꾃4mJ7unlA"5GfllI#0 wfRύ[ܩSxîe*xNݧ,noN-&gu.$ Z&# l,6b=ڒJ f߫ɕV}H:{5mO [GFܑB+.I*j-^We*o55)u|Gouqix֓Gu$Cm$2DZ#m wJ1wIjRRMii3=]h:nA-:4=Cqa5\`"m ާ'f9!|[g%Qtk_CVZiiy{*om.%ȲƢkv]$8O˻t.|:jU.ޙtbQVh][^uH$ŘF~OnE]rsů #KE2Oy]TD0$+F3l[Tij#Q޶CO5k4:6TeG`IVe%o> z կKkp^Cao[ؓGwly-5|Z J*˯髵tj1z~eݞ3i#my%Hc`RU~ꚸ厉zh=eI:Nx3XCk׋soj G䱸VN3D0Whږ;I^һ[^cndALISizd+3BIEKBic]TUrWew'<k7-#{w0z >apqX[YoV^;Ym_BkwaD[`ӣ2v6 ~ŵ{.rnΈNRI㻸 4NW\WIޮzSW ܊&jZҤtyܼzlr2@33E$McFoNI(W3jMpMn-m.5k C:29->`ȍ~ZxRPNqvѝmˇ}EytYSOx|U!DQH`uzW.|y(>N/IkU Kjwn ӧūE qbFq2:i'7i̛VIVv~}._Q:[R- \աvJ".'f2 &F~kaܕZN_7u`N稚֫t.%ދmq>c=hb!T&@[o^-9)a".鯕R$~z>ґtܺ5fԦ.undchEHX+`f0kitnJ9ݶsK|~nDv9g7p;WքwoUU]KVEO]Iqq Hpr~% 1L>f֩IpbذH8PX2I sYxZC@VK5[[F͸2F= fS!ox֑o(1"+W8$c=Qnޟ<zַҬWqx{͸9囓'ThMk߷p} bՎ\/j %mʝR3(Nn&׽.8 Ļv>2g72F?K?KČrW ǚlVln,=T@a vJB㑏ڀޑ#q@`l$y!Y.kZbaXɐHr՞NҼǐz{޴T岺i.-@w3ƄD;sxᥣJ^p5nHa5 =VcɖHدmShJ륩ZʮkK|}R$X-yW2'lw ]Ae]Xx&-WWRno*^3):!ldZz}8*]X=_Yg=wl&YnIRT1!k]tf$bӹ^,gsS/4:[Ӵ1H#TnG2@A=O;Wwǵxb'94h^+-&JӴ뛯T aƲG!om1矶 +3D#SoQi`ywzk'D4|Ӯ?Sΐ:>nBPA rc@ ,w@9>ޣUt)|JwM˜xʊº2^t7Vu]^8ҺfU:gJ-&./f!uRقǏC); jrnI.4#7_uougj:Ě3*ߎl[4V ef6!c)M AwTq1=W Y?Զ1?D,g" QBRDBoq];OƖ% J)_nyۊ]: ߢXzYњְ]]L0KǍ[hlniwFܷ .Nhk|E4b#I*nja[5yGcz=GZ#մ눬.-ufX6!&Ydr"UZRтѼ?U;'k2W˩^FjB`ޚdv#.%(RԤ5oj\'$9va?*Rj_]Q{qwLkZY\bO^-(-I/ ]L@T <=c/LOQC׮:I5-6[Y%؈ivE/o}BuTZMƞ7&W^~[ #i>u=iobl~u=Au5XmcyFzƽ1]u7esid.ħ=F>u>M?_s~5v%6)'r1>K5T?{ɩ4}~ #@K$@~^SWtѵ}oZdZ4ۼ{w!% 3I5["8Wi$ڴLuCS״= =}o(oL] vigeFHǿ^7(ZYt+MmwYg辒5MO%}71V$h&Y^LNhѡ3wmThuɫQ[ouRJƔ0~FwпU[&RL5xk(Oy|Š#3%]מ]cZNe\.W|j7ivL)x*Nڴ8t'FvPqJZ]Q@+&f>?qR{s՜G%ҢFYNB$ yKtl)8='fׯMͤkw?uI2]߰#S z-wMQů>E[寧6_î5Q֧c.i{=ԶmdT3[\>I%@x]>GR%fĸ˘NW5[N/ ;o;*UHdx6J/,+7c3 tOvuXnߪV):rmpq=뿥vu| ek6w6 /Q U/3d61vdSuRֆq9IQ4:a7%h0ng7Q4{ GEz YGd.Q7;2Z\Y=vHe)_bΤlmJ e+mo8;dsޑ/z&zaistO^hvmiynf/w猺<70#j|=ERm5o5_c隮ڄrtI7i\"#H;4ǓT}Q뮛HmmeNu {m>[i; 9*'Ȋ"e5Odܯ rywF,3jwwZEYOs,) 1d* \.dI'n/޻l] t-$\q7(Վv׵n_Ա:VZjPksjz_7(˹T U8u!k:eC"DaeuI Jxzj|:җ̪썦'K]^Ƒ] MMF%$1IrH;m=HG,cIus$ݦ8a/nnm^MSV^9o-8;K>Mr@ ƆDXsfydT~ݧK2i]>wm8Rw h" c iҤ(ܭ{Qkvmץ{ɔ]6k!\u#:w6QE(.>osgv3ij3H#FNT&meRqq^3gDjs6u 7Q\KmB_|j<3HЌG7$Dݶ5⛄[[rmKaoͮj]E|hΝu}$KTi-ė73[cTȋtޞbnV1k%y>zEIz[:vM}kyo/ofvB @D ᤑSdL@}ڽSӓJ J;i&]>8rƕ)sg5 iiYV=?gx^]+_[*4+P'زo({)62CYjur\s*cKj۬6g4z -;uoO3S13bkJB֎ȯME5-+nW:'y ]SAf~No즆 Hxa!h82G?}=N:M6OISkk$ɮtW.ws ƻu rAX\k%+<!*ʉ<ޘz?IMF1{U6:w<$Y׺+OCn}=DӴ}+_ӭIE[o4 n(C@ZH.M,} 6r(?KrwR/Hô}O:YmODZh4u-ݶ{ rHZQnoK6tt6pҵ7R|H&5CZi=7>(2mg4K8k6ѴnS$3& I:Q'dԱ-if)n  OOD>5KHltݡx1npQx$v<6'aYfMy''N4$kӌ%]u(cZ{NiMhuXVai Puh8oos' )7i^Ջ$;6Y<3ZXiړ$[ChCIv%&Q.MI2ʧ-4撊n*nla^iro}^k4ɯhR^\Kj")ⵊKfF"x|Y'J5%OܩEU"mU쬺ёg_5 ]c~~XMq4kGOr H*,eնܖ%[j-GomyTn/Վ=[MM$MVmmQԢ(cm+mmI%Iw zmI%5eRU.ݗ_t[ZO>A='6j׺:;usr6vhsH. }ri$xI&뛿 WF~BUծq2XEeir {QI~79g-On]Ǔuԯ-tkKX %jY̲Fn  ~UBӄ[ytwI:NWWk}!K[oK{@_ÏsHU >oYqf9-MŢv%V;ebF-{wOkfUۺ|}wAV USR6]/Zxtk).MZ?iĥʻe xuȯT^JSWuA[ j 99&g螌Zu=+-5mCzY%Ab+~I$S?&vD:WCS9eIR꾤}6H Ҍ4m 5*,r,*m* KJ2yq}n3Xm/LҥҤ\][Ũڑ(v9R ;ȥ7Q׋Ӎe{eY֣7i>tGǤ7:kM̦S$qIȑb=GbjhJoFs{Rpqj򓥁}ζwAi%V,è06khf%Vdx5$ҎZ/cr$xQqizGM'DvzՌHU-b){rȸmň;f )$d~bW{bPؠ1Ԡ+ P [Yq@e@P Urk)ḅH䍊:+AG %%L^!K:vCY/-\Jv_,셾r*?MO}gW˹|Vzs]{ JMFֺΡ%z- iSk]k ߘ)E(o[ڹ||Rv&#֝%Q^zM5 G{I5)cQ"eUfvG*;Jמ> 7Rw{yK+${O֚Ι^-♟N[χDMhHLrAªmbdg9y;tjG]7˕se1}v:k>4PVQj6sl3A +C~e&idy*캳Խ?:Ӯc2gF#;_M9hBcGn۷8~TxRw+k]-΍Xt\\ ;C i Bl%f 4NU?߂4uNN]tLҮ,;kY;`wd.*B9m̨N8jhGgg»WWeNw!uκuCmego{lDשS-CbS%_J-7Ri+[y<ue]^iZehcQ$[&̱, +nOSZz-{w\6k(ޮtT 鷲goZީJY崘n[n(H)ҺiI[\nu΅?k:v%`!bK_݃=]#\cY-evW[pK +m'm[R$ey/}1Mӗ=QugRi_j:L[Y Ryf2a"XՆ7%[/URJ>]N#= /ZzDWWjv6Oebi0*_yAٴb/^:m7J3Jc.xXtޥҦ$2_kir= ëjLu,5|{ڣCr#AOOaӷ̐Z+pDH-ݙ63n+=u n7㲷Dጂy52zm]ab-Ǩ\ jgdǏ w"k=uu^\Եg=3fuVȗV~Z1<3aR c+$kvN.[R2ۦTd7x۟mʽ][t펯%-<",wqq"2ӚՋbV0{@ݟ3-Lv7`=zZ&|$yL.r7p9( kpFhVb:WXd ȭdq[12K>AzeֵMmcM:v_I#Gdx{k%|FU2#Z2zQMZ|km> 5InZi) ĝA H$Ch2I ;Ljh=&]gu*Ut)~CIk:z!#ڛ|OpwG܅.;e#:"m\[ڲMO-Rx|M]ugt: [>u7Vؠda& NT!)9%IU;qڟ95r# zu=h,snqNxw"2dF,X>r>+E3IǾ[8wJ3ղQʛ7['/ DRHx(O>Yp pOP2j*xJ)!_jڜyVe 9GDPpHEJ$A2"p1I; "7E,d& pW UgF³mc>xv78I8Ҳpb 9ճb/S2{0x><N@ B'[myslE,Qr+`*G#sy\i3QI NȺm%SݫHBoaM7ϖ啞Szubç+x+xͩy3M4P{ίT'i6I5 WV(.mRdHĂG1"JCH" K zFҒQwkk6+ZRHZr6s>@o& ɼBYXFvvU~gf Zzjڗ%j]=U vѬ9mkODJymv4%s>'ohk:Osis*bVM}+Ψ龠m+SFwi/Md6=pxU븜?QL&Sj򤪳4~苛:]xn>Qtfoᗃ)6qk|#q(Ӷ鷺?/'S·X+F7Wp$-@*&Gêu?RzsM-gStm2RH {ȩݘGn!f7P+;6>r6#&ˣ&ޱ~mv+M1mV3t<,3@۔]Vz6\nN1zVOōf{hCSM2{ s|Ԫ p2[}q!bSFiJ;QU';>JJ/M26ki i# 6HHxbZӊ_54啄\j3WVt+,x.Y u ʼnal09d>uTJϵTrhZհGES )lq&=0u:IǍ|[g]+ۊGz >~]+HLWu>y&#co$&;j6֡_#V^>k>pK<;fGӭދ㭭lMG+NEIHY]F{  O]ɧn.6(9c>^#'7^#{R@tqi6ĐuvK=- Y$.~ EªRoǥSٖ򯩟]ūEYlϥ l.t"{a7¬C92CBrzj4SڢŶԳ~`4[ԥ.s@[hwVHY I]:‚VZpn_w/>cGwRjs뺝_^- SMƩRv9ngoSq~UH^0ss] ٤#x4zӍzߣh7p-( o{^nUH~/Umix$_zmږryn]_ތީ&k 2=B8I ί2Tn,w\.Jmm:Wz1YB}KuK t\$w*M ,Ek[WWX>bV%Uyw> lqnɦtea$QG> 1Eo*,jDFVW_ĜzvRSinxiC9=Y^F,5᱒+O o&ite{w &&8źݵƲk7{+gTީ?"]J{Rմ2Ǩ&xn/}^TWc%+[I5ٛw$'.OK:zYirec,_ +"2KjJԷR5i|qV1:-MzEn,.[iJ#{UwD^ $qM +iR6sZ_f. wJiY;mU#Mۼ&KKK# avxzyBWN-NN9~QaʒmV3vj1/Eoޖiqkz/u7Ҡ&2M#SnI}ER]>zJv6T IcuQ^\%tb-"a<f3#ѫӫJ 6i8-f4\(О/U:/IXy-\۽dAq2I! alhh]E4?8MmYy :Fi1agGMpWO-լM1& v98yU˾UGvTZqnJ+zҭ{nyٮ2^<֓g0mh,^Gq:_zrIq^_ڒRYqR2Tz/T:TΈTk '4^\Mep6oo;$[DĮq_u\V=5{>$ѧ', JKGt gNﴎα=ơ<=[k%8aPd9L̝вs N(S4R'{S]G]2TbWy v֩vrߖaջLy:c mfmG)%c2+oOeΙ&,"ӭ/4S-%WHd2\G^sJ$6tqݺ[N)vn{ksKޘWk#OyoM;K8{]H]ƎD`;&td~xCe*ӖSjPyڞ}I<.NUC z~Zڤ6Q|.oUdKUwA|kuf? *V)V̝ܽ[}MM&]CqimNBgIi%HCA{HØ7'8)$fJ*+rSk˷wJ\ŢdךLR[xYE͜|V\CdYd"51)ȓ* M67o3yjWݶ*gl=NmWH;]:t:zCdy5 ?wt<ڬ:Ǧfud-Zu[S/8*:N΍D6V汴HgZ[h~̽bdi [f׵$ꗩTI[)E]5I`uoWk]ywY_Ok7ܸr9(> 0* 6tbIWc"͊P QTL"X9$۾'{ J-c8xB ~IZІi(VF~7W gsMsl WpGhkjZ@Vf@([@(( ɦE*g, K re@]@>Z;uVҒ,=n5餷PщyPv,@/S=$%g=+Ho{Myl. ԭWmKT0 w;92ذTriU5e쫌x1D P(^t/FԶ]%̱5zveTY.$G1*;*8i:9#kTڧV}ݤQ#~:>ר=5K[tQ[ >An+elD4oYB_R-vjtUTJ~c^-J׽\Wvv)4A+sQ왆Um.nHTNfkj3-,No\uS^ZdUfH!ō*}+IJ?[*=-u~/8t0OC,9-Hr v9SASW)&wܜ"JŐk;V KkԈ&,r`rNO#\;mx4}E-$C 6K8n! v)\Uu&\~#ؓOmqysoNie3 G`a;1`P T`}0RiU.l]{9^ics 7q8 an$53т|<}&]鞣Zhr-ꪾ} ~4']-dt#d \4Cn EN䲛2O } &n鞶MRT[=mcӚG/{=f;H&{M4ځ!iVsU6?+i3}EIܦv W1C" *G^N3W}뱖ԢR%P( . 7>n4 8VW;<+xXFΠ/n*/(,?fz1GOQzMSXĢ"W'qā]0,<} kuWI+x}ZDgeFrskj*ٕ:~z^[c=b2 mn`/U~{krbkQm*Βup#U]?.qM`>z n+x$Fˆ9kO eSIN~={wC ~ou%6|;3z]>NR+r\c?q |un뾠-4=oqvzPZ;n$q5JMXõޞmUC[Ǧj:uŕIKLUX/-B%XTNB^44<:ìlHK$eT D8uIeVuG:λ>KUJX{N M;]9^:5%ET2&o%n 1\4M E 5y\l5LޭONbWZwLaPI$HDh0f-S%s{2OѾ wgP%ww=Vj u>Ig#d~֎pPdIuKjinڒ3iסM7\TgP}#]k \=AmiZC<@n#ŝh+o(ecBIjI(χϥKVire~2s =47.m|<`vmc;ٌu8)w' ݜWd8@qςgq LNrĞ@yN.ii;gbbY%$`u Xzk/U}+"9wy=Ih Gxp ai=fC'nw6-IE%Kuߔ3V-u8 XHħ!s>]gq5ۯ9p?kgh|#zfq <)fMr(=I(knщxUӂ>*M?65h.`Pp pOҌW=5L.Ydo沂$XB$;ʙA*1VoQ{6*Vo+WZ7I׽?k.1鋝~#=mIU|5ĚkyT|ٔi{2.//ݬv*f;uAE_#I1%FKNktm]۾} i ʐ'?j4S# 1~<ʲ*88(PxZMqPgeb16MG831q"Plf?)5́$ J)0Fl?ZjcbZ`qY U)ԣ_>*Jv9q"YTᱏ% N>AAC6c#f\p3(@HuĹqTQ(pn64u !_?ZotRAo;I:|$WheR8 v/FNy:>E}LP.:k}faq>{ N85ʥ$,{qfǬj$+4),a:pV86#aeFٹuj{Uy#5+.-;F$9#M7ޮŔg5KB0LEж  8=#Zwӵ:`fbmvW@>>dŨpq_5?'uSskcw7WB-nQ{wvn"PڣƘ@uz,IZoMq-<{#1HUk֟ĒO|6vk)ǛַlmYmmb-t<<70؄ܴ$dJû! w쎓i6uN-n{j~/ogtzïd4_s&pTZWG#.[ 9hY% QON;$ԝEwݵ]Ko`➼h]G0CE`\Gd-w]1DEY5z:9'<,]|^]mb w?(-CP55&a&Vc^NܲLE r76~4?ӎĹ7{w~8ίQ윍;;#YU6?Qբ޿BY/қ3O龩6IwtK][aK=Dcp.y`%"N͖ppxW[Ԏڷ%_tZiRz|ndMltb5SU,R%w5CI;+(4W%^28Ϛ͐HHG7 b1w w0r1۾NVF|EUFPi@5fF8S`zJ5'Dm͌EcmoS`]R)/b?zBT I>kNZ/TkC׏yL:BF&]3ҏOԍӭt:+۩XgX&6D0+0![TuiūK)Kuլ_,d׼/#֢yDjrl͐Ҡek|ČǑI>?Oך_Y zϣ:|6g"&%0r$ oI- B SOݞ7UUˎ}x i4K}*Lkr-CFhnw>- acFCz׾Uj^e-Ix?&7Q˫Xo]]MS2!|ykGEB^j+ӱMShr.ktرŖbʨȉWw-V%汥¥jo?J ?yoMMԾ-01gmR=+ĊMsg;Ts"G~]8BdReާ, ܭ,cϽ~OPu7_5)VLPqEmjPEq3$fHbOD(,Zz*qmk [|y୶~ֳ}==O-D#{y/].u.Z)7~nG>KHNӴ#=Hx@^,NڼnҳVuHܒwҝK**km}[$=_ }=-:ށwo$|H.y4.yi`WpO_MMB(K})|HnI-;j6=?vj u-C[ZKgZdK /m,-",xmP:-L&ږ&ܮ.7faOT.KPn;ɦVIjB"p݅=xKMZQlĽjro2ora;I<ŕ:էEz}e\kVtܥv}0\dD <[beR^F;JQkg~;w]G ^.Ѻd}fUr1n/uht %D4n/U Mni)Q}Grmʷ to.OPt7Gtm&mA5{*uKv]Y\’_$zX#̮MQMkT]ܝ:uz]=[U7̶w1I[ݢI84&>-9)&j/r{VU;VGP_YkGi}hW).O47qHHExTH[[ש(iEI%<(8W-ӖvMyN߱g:ol4=/Q6.v%C02$*{YJM[*oYWǙr*u׬rkGSKs͜/@ d{uI{NVEU*{/)wT;./eoSi ]F Z;qZɍ%,ǽZ1^1nܭJ7}צKjiQVMD]^ZV&kji7W{z3mu2A Z -8ۋgQ̛Qi7̽߃V-K雝&MWI$"%tyG~ Cj$đ?V]SeK–%Cy 6ѧ:/C3aci]neNKr0^$ok_. IgjJu*+<Z P @(;:Rh3Ewkq4.7_}sw&BVuԝOy>J]H,rĖ$M8lTĭ@V\[(U׀6oZZ`UP @(P @( 9dVG>Ŷ)4*,C&KNUe\]Pp̭0ۍuQy-隚ۺSH%'[xY%+)3$Qghk?2ڔ0-/$GaV-mV F%%tݶ1 񭴓s{=USTѴ>)Jin~Uj*`o1UΊQ_/͋k[ty&22Dnm*fz>ip?g{ΰ./-JϪ6KWkm,v7R%Gue9KYs\c_d> [ھ D%awX)w'h'' I:FμFLoY{w ݼnF6$`UNw:>2lRtC&B덫={ۥ66tƭy467%fFa,GsV5iq9&R] uMzk:W3M]yh&*H }۰JGW`sXaXMx}OUX6EJ4cU\Q$5Kߗo-٫o\i޴m+ pq99gJ XaΙvǩMDTY*4(ō@@`i+tQՃn>ww=:8Mfj49ٞ%?k03ZiK,>L{_==hC{}H[[D,TDRRPV/rGoEz }lFiau42Bf䑶JVMΎ h!pM[Jia:4Q#kO,aO}t4❷\ݸ|#lwuOSWQFn沆'졋l2B$ҍL+_+іW*ry4յ9Kxg~?QFK{m4. pZi2s(AcQvM\*96,MSzru%TlN$qzh,2dW G,ƛr&~h7_oK%t2w,g˼ 9J*ˬݮv ?vFNZiIm)KF{BicqTffXyo <@wYF,zPTlC4+1L QvsUWVפK}]]x[^ߵe%#ߝ_tںN&5̱ܛRQմ< ލ-oTР:9eHv$Jo^|>xZj$ے2<6?JN͠3K=u\ʤFSiD|۷H3=ZsZXsc轇~z'Ei/UVcM96ipaHgw,č1R7u>+SquKr}sUX;;?uECк$=uvm-'^E^EK@PȓAfBG^J/0j_40K'?]rE5Fԭt49S{WkY!20 ۝Jӄ$jR]esuq[Eӈ=E;)/&r2Im@O\=M+q?Oj/voŨi9+[ MBP`8o}^*qiU51>5nB6vwW[]wXY6ǴǶ>/=T}%A\G  1M&t'ǿV:l`+dA$rvI#;ë0W#Zv\>u:'n%[fI$!+Emˆ$r:Tva:>=K|zq{[h"Hu(cqk}mu(GݕI• ʹ toUFz,bO_|'Aun ZӠIo^4!\]aat&ZEFoxuVBkE&.ϽEuaX 尽U`[d2"8AipK4V?OmiTmi,*M~}鎑?wotֹV\:kcc4-ƘٺcOpZجoUvAmnM_5GvԱ,eT|{:wd׶ɫ8ՖHg> #3E"Ff@6*)UӤaMnn&Zy<-}]C{oI1#KN;0+ujzkQ&ǿSV $9q'^FJgGRF0OPЉZ9ߟ7MqeЍ~2]W{sX#*g+?AS+`v9?րqn|pB 9|VyFq֣2yy\'?Tm qFk6 0հPL ,ǟTuO(lNN?sCwqSf0 1<5R*9.\ Rя~z1i7:B3{r(,G'>Ֆ,}JMxn5 <\]g$Ne7!0+ȯ2i=VܓIJkj_ͤ VAc&{-Ԃ0N)ur xuSX^2W jZOqKi3{*r$+am,aVy [GKrΨB~l|?ZQdhH/~R#\crAYziXRimsya ;":fC+q'w0T pveOx\>3/S\ɧi׽Cié\ٶśH/!ZC#I;??turIŬ79vO>+i-75sX_*wzU-*qi5jU&UH}My kqe5Ο[ث[ekւREo1tfm{az=(ovSC^v%[)6z #n}@obb[U5bk7aHͣ~S iҩnGoR--K-*} F^ѮtOU{IX?"gt9b2J2QoکUwj9P' t& TB [M[o|<&(1a6e)CjV$8Ǖ%gS^zێ4KGmܖ.[v)_hJiM=Okmqu+Jͮ~>+IZU@Z:ĕT\ WX('\J/iP⛨nX2**j49H9ђ2Mm?V>#\#" [4R(UHZ,QĥjkT x\wⷆЭ4N@Th P8#ǵV&F>#ma8 #Ҩ %LYIw4GO% d#5(mk[,`Z)5pdPɫդz~p*|8rYVmRU0FE7M֟PMF]jP( [2*ՁY4(V5k@)@o=\дYt.96B֓)J&SWSRyy_ZnZt7ipm4+uP\,!wmUPm׏Fy.XvQ*sHz/RPWN|]FCE vH2>Khp]l$Socѵ%jtΕ%ږ W)'j -!.1k¤yDWsRznbVەΫ_9xQTuX6/beo-̑$7a1ʛҔ!nWn+niKk"|CdJXp7{) l)GdnRkۨ$Zy猯0ϩK{ &}zYjee/Ye__njijFvǷ<Ś hL1 3-?! '~ݝ+oqԚvMu,E)LV1 fUM(R0xZie6ͻ. Mfuh{hH6FF "Hn}8Qf-{?6&)O]vKE-t.t֩vy5ij V9~Lcq]2tJY͌zR9[kUy__Z$Lm.շ o8gnJܣg2ٿyw]u*j6Ou:9ib$7,结&3uPts~kĪ]Vz7MՖEQ4zrtWKDk9$qmpPű7Zqu+ڍ/^_]FkN:?OGt{M4N!Z HN8;b0ZV;Ps1ڟ֣4=i\]W^e*Gӽ#Gqy}igZ:Ty۝FKĭ!)&V[hA K+R.;It]58JOҿ螟U Wsoy<2ClR#|L(ݾ:V(okڣ.cܛvMڏQ_Ǎ_VInkH-wFd";EE"G$MW.}=V6UJtvOs`SOV7)umH[kdoZMAXGytwi%\2Җdm㻌p;%j٭ޮ-S=՞%ץIDcmq]_舖b&W!2g֞ITSmf+zצi6YF}SWukzn5]_otӴMCUOqr[M5ђA2MU(FB8&j6ou=IU^N}'KtESԮri_u]BS(fݼ1yd\G*}bUmE={k1TRBQ>g8i]w7SuP=S{XRM}:H"KR7Wxv0J[\\m{mwXbO7S\^ֿޥ=}fjNYui i13P%Ǎ KӋ]<6)wK*9;{w'j#;9)6ƍ]\ŭdfV͎i"X>JYxmYMꦝmMsy˺q^}ZR^NquOTڕ&e-Κ {kspwW1}g0Iu Wrſ*[F6]CRu)D.;+TlleVDz ?ViZzZJ8ӝot:^uDijL"Tu 6KD2OG_SYg2|cigoz+Iw>0V]3&IHo|OkFsg䷙m H2,Cvg MsynnxK4ݔt-XmY&ށEFʓd`3ig>~jk$Gm˧=~"6VhN`v\7+Ri~ΞOu"^HI%pc4$/.GWs$bp(Z:⃄;dw{P;{s5sW_pr;G| `@㏽Qi<_쁈x O<68<rJXfK jmVϣWmm7y7P23+di \+j˾1aY|}d9y憍ͤ z)f^ڬ{R>..6I۷7&OFl@AJj) FV*'[!g]s 7Qn{9R˵GʷUTKmcwAl$͟on:}]%wZD|mqq84ckx3F/3ɴvVpU^---XɩSgr\c.eVOZu;\:mm*"cExHQt,r3nb\6+]> 6ڥO35YS|Sq@t[%~kx 3) >BņFF)5{1*;UX뚄I[K&,HK+_&ii*m܍ٓ5.V9Q ep%kبR]*SJSJ0Kۍv]}se(#>HtMux.8'{-ةh,vL8,JUb9~)NRi*JW|6ړFgt jYqEkقY#y`IvI 8羉_SMs/JSRim;Q۹mJ}B鎝}M:[n ɵk+-b" *5_ o"hUcgfO>0+`_Etv<; 7 '8%ݍ˞R6O)8:u:ԍcӵcomcgomOKXfkudK$r\lbb@4zH7%/OgҾͤ[bDTa"ܸ*SpǴ5-Twϔt)gxX<x#sz=j]%o$ZN#CyodYb7pY0grVJYM>bv}#z ]5cWS˧K]6XV}F \7huBvZi̚ {َz;w/jvizw,!d&u&%m#1xqq┕)&Kjx>+SM/׭ P鈯u:4ΦdnF] eUEg*x},uQܝ%JW GYlA6O ֖iK;eJY$#}7rnuUߍߟ!eMO.ӺxON;Ʊ\9;p͍4& 5J;::]NgY P>"IR<(Z AH.0 M$j7iI?>qB^{cFд%{ O>DN"8;FNWz%'|.8Je#ҺGw~&tu+3;{r`{{Մ3ND_OOWOV/WInkqıni[zP-ǯcsKt E,zE$LJS1a] j_E߳>8cVi)yð" ##WzRigɖ7`Z]Lnh{OuǫvzOu ?MGؼ,rQeqia|`aRxeӕ0?`Wɚa$ 5 otS~bۨgZV1nQd@rb݃jt\o ;ce*]&~yr-a4BB3d Vٜ>uHmO˯ 2HpZܓYk>ͯFzAc%ֻ6uo-#r&WxLWY"#v#^=tvӼWli?Fu=C Ֆ6&DAa {kXM<꽙t$ϦܞYrǫ'n6uxZ6Ր`+D3)}h`\@0{xϟ( Rm. Tss6mwu#c.rAR9_&ͻdd$bHy< NUX> 4`?q@eݮJIjiwm"0ǝ2xԜy6~#'mKX /R{km$+dH6o (G>PJ.&եKy:AO{72fw]$n FwdvRo(Gg%V:K;&qk Kyew`._{K{IY\/<}b5X\ k+FBVg`3/Iă6Gtu|~k]D[nl"&^Bgs#IC@"Al7+0Ԯ?moi#fFWVGΤ|Ef>?b<{CPM^UR4>y F 7#v쫝vvo^:mOM?Rm%sn !O%nC%vIq^izbC4?g"\mI4=}7Mmn8U-÷Lz:/_t_^ҠU[(;!kż U#a!k%69jKc5'Qqqr~4}gӿI.NWJ^;{Vxݍn°}&m- 4m4SNIV.߅.w.g ԟMKxž#b%xH>`}-=}ѻp<298Xz7h&? ui@m, m rR$d!9M*17Vݼ?C:Y"8]ˉZ eIgYh/T\QWju.ľWE"{+[dziFkrF\<W-=\զi:eS^ޏO.D:ծj=/iJ'wd2G%D'P[4TU+k:>׾C"#>!\Ł,"|Hbڏ&܃!{<+x/K[w1 \9dxҭP 3 y$6\IPvd϶rxjqŚ6:M- ?٤d8Qw%"UO@Cm+;}|_ecc5 *@*P@ *V]׍d94MjdQ+HD }+. cmoWEĐ&i*n7 H6&⢠NGks@V Va0F%tb`,`{V.Ұ>mxD )[)@W*vh \Ug܂TQT X@ RJ5VA4tJ@R6m5-$ڙIFF҂\Q6 $V5 VvF1Wek-P VKj Ri^@@VP @U*Ph R'\VO( Y%jKVBQpw(p '?J'̼{& &l`x W7); K_[[Vf7ݸcRݚNJb2T{٣GXYz7wgњ]k7m&kguJ"wJҨ=| : {,+㢉KԉHiڳY!:m\Y=⭮N5׆P rB=fXʎ#rg:Wb--/byvUX.vXe Izj-v y~ȉY\Vv7RIV)R=.Yv)&aS({Za<:®Ĭaܗm bO5tӊIuI"g; I²>kk{ڏP˨۳4a\&7+J{^ʿ{kߊǹS]G?j:&IMkws=큙`0dR{B@Ԟ$JUwWmSo*Y?_^Մ:JMJ 2k(cwNwZ9Um"J* s'v@~GR'h'TZ^U46`/Q?tAivY tfD3]C}jdR4Il!)K (Ңx`Ϩ:[ӴѴBhϫ"Gkc#Ƥ]#3m|޼#isn\q%bE?/Q螹E~`;{k{;"mUrʡYcnUiOU8&Mҍ[wR5id GHuGjqKE]u6 7FKmBYzNkՌ%5g*.ךPRkvbKXx"Vhbl s-bru+wX쑭k B,rެ}E5Z[[Cfڹd @zIIX̥ԳݵHu/=CҞ&擭jIe}f&g2[PH<[ЙluzzҚ6m-tzd *+ _\&>NW6VWYXIv;3ȑ;B7>[k="nV}ۼx^ԭϬ4YIVGYMuslB![2mU˜cЖʖ)w\2,d]PzyJi?NKn+gNtw!H;`(u!&DE= 8'i~{݉EankGOá}v+Huei%MYҮ\#wڲbI$m,X%>u죷 )Eg2LqCz﹤EB(`Vl P*eiF5+-Q f0+U@VV )@T`T#z5Vtɮjrl[DP(#'@n]Od+ȞdP)RRERO'i*P>]EK'vOia}1le&$ܶăݸaȍ|sc8ɬ*ky&2*Q hnЀ#2?<"C0ua,.$`H#f˟6PwROU޶_4q;N{= " lDLq[yE]bBpcKM/|M(Y衆AVEo^c+1 s'(K6u;sh_A{h]|튑O7{3^Gkk=(O\%ⵐ2 c$(g$MiKQ5twO4Z{ͱI 6\sӹzin4Fp K-/pұVfIcOދwVcv\X۟C`zM`g#E&]NR28*H#*XfcM$`x:Z<6=jKn"nw&X~$*”ܻ jEuǹ]>uRHܣa+RR|Y(`1Ȓ e8 ֤deK4j pH#+I:dEdV\ #h}5߸1ߙ 2}P`ќޥYVPҨ$svrpgS_I=:aX YVEdy6 Ą%g*o[4? pBHb2vؓp#^x>i 7v>2qføVF+Z4f$>j Mo .,J7 C,k!mg3:MueqqȵZi.nPw!8.6ހ|Ou4EwKjϒt{f#P` .(\K۔{nfn[͟;>HK$@ɺkn%,ŒiWrF…x~G'^{v#ve}Bn!j7hy#UP(-" RJ6%+UI>eC=Ԯz3Wm~경򄶆)L3r61E?*fϛޕRzJ=K4JVni}G{iԚ ?Pj! G)CP~P AlI,V%| RzXmtˮ6\KT@ܬi(f۹$X}4&jkس_qךDuNЭ&Kⷷ.D!YYa7#ۑNytN ݿÓg3Wmq-ڳG4N<)#<ԔT0}R8:4%I5Ebn$E\^;>ڊ5A&毅Epvv|O˴&N.ADSrצ3R>7q͕XWQđFһI,*p9f8U }o*n._"V~?Jn/R:)M^t8r'Ga/&CU,W~Zk8o\RsJۻڊ?.^z&]]ZD}.I(ƣ˨EvNp/QwܓxRsU)DZWtzsݳJH2@ʰ*ÂVՋfS;=9k:&WIG&z.zvs^5ˉ'EKim$L(dq#5bIZIVŵFtIם05 3Ys,.z0$25K ؤTYUYTY#奃GMWGy$Kۉ]F/omid+#k6"JpN2y^T%ZǗE7E\sso5{F {JcW*K.\2GGrNUTV7_G|;wt] i鮟%u=޾K6*HU8el leY8rT\{}W ⏑eqsk|OrEɵV%H 7FO*jgUe$SXjL-^"X=@ά8\/RMG9K|N‹[+PB{V&,ghhA4h,Tk]m,^S7Jx $l.e mߙX8:ʼ]pɞjKQr:?  $ʟO Ȯ,&4 U:n_2r2#h|f/$Q RLe+.i4V67ru H$%YI\F5i vuZn$g&#ipe-(U(&'n,JVJǶ;OދfӋ-_FK[PC9U7u7$K̿>䳑Ace}iZI9"v^@XG9S%Z2j2WwŦK{btKV7VN! d.͈V`˺F-(ˆU:UWrHteծGڝ5d!r(UȥF2{ -^)Kt%YW$}IVK&E'Ujqyem-0EY JvtZLnH!Qrm~jRWi;=WNi2uޣ-ҭ年Ӯ7Iy(\NV&;F#.&{QiẓIeRcw}KЬf}?,k{!1"Dpr+>yj$jj&~-nKcsakAE4ܛRy|g%yݥ;|k)TP UFbTk*Yh UHȬjBkãLe )+@Q+<uM(W@VM%@ڛAjJ ZPRm})(i }(\rO& 26 !z&ᑕ "5qiy$hS0!v EwF}AZKڷl/{r {'~ˏ@OQǬi+2EYyVMB$#!l@6~iꯍ~\8պē턽81)5e{},J$]٘$NI>M}ER9U, X`VX, Tt JK <F<* mO ZzprYi7_BgY'~~gIk>N;.!m'O5˰db~"iBT`{𮥺)wnӥi^)>*=4|?}v=ӭQ$Fvw"I"e_7E{MZ+YfOʪ?R×ek;G7]ԯ:k-4m.]C4.RH #+Mw8T@(P QX`x@*&Z wF`U)@P @(+ @+ P YL J(+Tl @( hiR?;^@OuNk%5{WVlq}2@PȱD+Ѭo}5dݬa?kW_j^z䤥%]S4Ut3HGk+sP:=F]؈J"ǐp'X"q^(y56S(xUԆVf5?c^^H ].ceEJ(f 62- h}ķ1[.cu~n+JQ1^.U)%{^(%/j>ػ`g8bp=>QQrC4(P<*j%@$8W8g>տ2Ln^EF !uڻw9 YRos*Cd$}l n }6 oݛvit[`{9Eu2=Ɲ܅EY"C2N`N6ՕX=B9N$J3Gp 1 Ty s[M>_F(@o#n!ngYٻ1w*wop. 1\k/Mnޫ_zwiof~Ć&8wFd'm-”o2Y|_R4{OM4-G>'][5)G{{[{r۸BԍH,!ԭ(g{Mϻ[CykP$ם kM+Z81s6CWRIE98RWR x#ď97}=yo Zw=T&ܾDv# )B2٧lP񋇺]yt.Qj6<6rΟp7|s_gR[K 9; %.ѤC !TrN798Q+Z{#|+z}6BVvItJ+)-{}Ġ37%|Z}DM8Gv{K-u5]XzwiY"5SG0=V $b1#nQrn?JN*ǞIxẉzll-{CF$&*@-$ r(q7م C< s;N 3*6܃s'6)W2Ksl$N򵌷(ؒǝ\]qxQvM^j}4nuE꾝k='ךTffc[J~hĨ)8YX ]:~%vy.\6>|x8܄iVSڧsiBȶ ԏJ)K8y\ ?T1(qTr0|oj N}#Ԏ0>ҁi"mp9Q@WAq?R=2BeBupJI8U+#1H#w{x!+awqw,[\w{#vݶ#L~)Lɡ=ᬾUw>gε& 1~+֗:+jI(BŎ6<*+]a`]PWbsQڍ?N޽W=7wjKowk/nhnPG*7;C&NїuVM[;˨^2#r !6OgaZ75k vݟ?YnrRXg#n;qHbR4jY'5:_j?jI>^P @{:u f!jcRR3tvo-n[ nV|K3i $ dczMI7|sx{8hYeᔂU!sO 4S<RasܨFe}Qet,> F_t֋^^n{3fdN:VKtX9%hTEH,V6IAm,5<7bZ<ɩ-Ky7*!dlFCsjIƶwy>mZ˭5MwkvJ?"( `#:cW]>`OCԍgc΋5Cٿh hc+"%6F-5q=ɦFN|ɦr$mvymz}՛"l!BBA b1 OQ\p>WD S`@$I$6/ )Q9*)jm\yW_t\LBCrާ]NXlUh㹉T Fany2[jXώ[~xKYmOt^4tԸ.FKsG#!mH 9xR:zriixus,2}/=Mo~-/ux"uWRmt쥑da6DykJ򥄛wk~}||N>K}M׽A649v^KƳӒs=pv諜WGGFnR]UxNc-c1rYI_DJP @+6@+-[@%NGTuoy]#ӏS^̶Z)٣ o, *,/-/2\9zR*I̭w]'ʣV/LNu{,}oy<:-͜I=HỊVKth9jAGMMFvӧ;Rޣ,gN<>sۡ>j߭F{im:CiVӈEIQrY}bs⾯ڲK;eH΢Ү:oNb]"{&KJ ܛH#nKaW,urʧ޻w];_':r]fk*E${ciU@;C ;wRO+iy\Vi{{EDJFf0k\bVYlu6g[\۹g^̻? voMrw*uu4yqlk:Lᐅݚ;[]J=]==o(g"(~chY +` i_DFf^ ?J=]귶zWz4KZzIfa01 "=6-TN¥Xح>l =CvtEV\Kqт/TZp }#.s웈@:=74|YOP_|Kf5lvVugEin3zz:n1Xrzմ]Vףlf Xj]MB3j'm6+h W8殭vy{Yb+`A2b#9Bj\𺞕$.nxec FZ|#!Sa5_swwˎy'qjҰ 8VP/f`2]n;dRj%f݆ m_Vr|kD>w^_;zOj躂m{`̏dGP~E,:kkti:>K-tXywT>ͧ]ēi#+Iٻ$YnX$t04U~Bi2<|+6GED,w6o$ RΐW*ߙ^Ҁ؃hZkjmxmד nVhfe @H<G>GRrRI,;|qXy륽L~UB!i7ZL֥eT̩,߈dF9'i[˫^,{Z¥ͤFj zw!A\sPXc1=pfP}D]Ok?I`p}}"x4/2ssijv.8MI[܏VaH/_զZrIx=6IzQ?.9iK9?1 }O} #?~|2}sJ{*>8M , | $vhGSR8x vjL]Yg/Jt u4xWXK䐢(HKˆ$627jj[\RWs|T[>)GU?X:eƍzu mܓr62;[JG*b KI+ܥ_Q$UKڷq=OH:Vtc $nAVRU5[\&>QSUYXޢhlb;x$8@4_wVXԸ |/iɧjWվOA^t-6zt1iV7ƪ@ѿxFYZ0EcLO$/ڛwnEn Goβ&u%|2N;k  3YnUvmx\Z$d}sOк4]3X:-YJCo4MK/2 el Y9-YMW'$ߜM̗gXc@͜(Ҿݼ|.#Mp ,w8W-6z}.~n;E\tEOrW؂]]xU0&TXa ¼sp׋}?_QIvqUνІC16Ҍd"*QQy-4׆֦o$}cۍ#3V4_ zZkMm_?w7aUV lG9۳}93dm@@͘b 89^󊨧C4KKoOh^ ,ogTqPZ$qB,I"44ۈُJiI-Z$maşNnWB$rE[,a3wR +xyruߗ "s$>`cW{] =omo&pf#0dn2pgsR˥WUQhm6.Midٵ?: 8нϖ$*?!3QXwkm-{W~%i-HYN]9_iՒİG=!Y`HV9 k KVR}i:8)wI)R4z>;G^z k:Gmu[Qf 9 EDP`g.ӞzgI_-o*Vee(ťuGKOZPK,LűDNrܤpoAopf̴c<5nטnujܲRt/-s51t77uMFL{AݤFyFhmHU [Qc$ۋvF]]uW1X{uM1fU/M0gYa3Hf14j>MX%,TѪ۵yQU/f-?Iғ_zV*"kV|ޫDXT$Xbz輶7)VM\לS\&ܞf .k1GeO\C=}3Owq݁[AR;a|[Y OV4\%mr\{R 8<ΓXְ]vȉo ϧx%I0+ܢRsMv֛_nm-7:%g;4Ԥҵg""kIq 0CHRko7x[Z|JDmb=Vaand-Lyp={"I$a |ā?+NTY-n){$ƐIѺ{]y 9N߾1^ G=9G=L4m"G'њaq k~#o *y{lXKw6v 69-DtG$*p!d`I0"RڻvӧK-X(de;:L@Y~TGkZn2nQmw{}~W̋/L]Iaye1G42 ZX!;U6Iѳ-cGpiK٦| za:ߩZՏJ}j(;SOVURA#GUA\./&-12]Iwe(K Jx9J+x~/(r@bY/J*v1,?̆z&IݹZE 2[!=I5N0TmĚğ%ަq˦۹ۥx fAaWtI&#t33,5zrinmt.0Fϒ׸Ƞ:[*<ѣ4q]$('''\S=GYtK*BV6.voڮZҒ6ߊu|6'Z}CO+yw(bG 1 0D)sbX]4֒gUziR`UTV!cj7/ڰxue>+U@c<,?j[B*pR37_'R3YpTZip,f@P  *tKGX X e֖eN@@V+@P QT @(.9>JS@q)`ǚW *P$lP(L pQSoi?삅+U@TL \dl RdT՟UHFF( A^k6-]( X*>ϜX }]9dgR[4Kyn)f`y?*`s85rtw_$szHfKK(`'XZVHc+!)TWy~1털}~wicZe[1QNJo^W#]4{1z>ӾE;k]W1 U61XFf DQmQ#Ȼ?J6Wt&ە|HNMO#ggK |$S'O _sTih^%F[HX<}N9)(|.H{-NuGx" luon ̪x %7't?W t\jWuJA yoغUmɵ\LE~#ƖWzN9mxz]Zܯ)]ϽA]?{mtmH;ͽZ+bn>$dPYb;l3m5QMU<σ-gǣz]7B<]{K8m$vpp98u1Ѝdw~/]zW5Ƣhrخ\Cuv.ىb9E+fG^tuu7_,Rc'J=vZ_kћ)ZG$ Hb$A=7OJ;ui%{Wf4OuG=.Eܷ2I+m!dB|9 Rڥa>Rif$ij`<뺚Zkwq5N$$E\(&枟ÊJ5tl+`P ZtY@:GcD[$ZHhث]v7U.tӚ||ڬHm|.Q#2H &*ݵ>\eꞁ귮s,o,<& x\_U'qT7U2 bpkr.юIQnd#۟8rwzfU~^ٹS`sb}EpZ~hܢ@TP @(.S*4eF*mO QvR*JVl MV W<Ug(yrhj<{d+\Z@sV2Mm0+@P D @d`tkq qJJl5& sFYO#"ۜKt}"8,C { ybH] I sH sr9>( 2luqAHi{@t"P}Ͻ^El8"↑ۚLWq@s*Wڀ_=`sϏh ڑ%y| N2r9 ݉)lQرfӃP*>^ rslYguGPrMv!d@}WH4tkD[{\2s;H(%f23˧넩f[M~quX' X8Xi6 } X|qvquX &߶L 9¨jpyYn4eE~JL+qTl-:i.Z8~)`BpT NWgrq|ZojU{nWnC88>VӼNU7Ŗ!y9 hˇs44ug?J!)HՍd1R*Xc,PN%}|v> yGGi]QiCh1\X4 "*JrNZUyxh}GvdT5>$J=ј/W``|5ˍ}m?8'cE+]?\mj5MKAbin VMR8qPԲgTfJ.GBiZMiH5{7LKOmm a9q߉ ?̵Sԃi&>e]-jjr*m$F#4w!jd dX?̣*Q_ZZIk Xh:veA2Gkϟ[U+z'1.rHe!k qE%Viѣno{*Ah$Q@ ~dBmGSb^Gӗ%9/ZwsMiڢ=B ,bb1*^2Y@ ,iQ%8YZ[kpmqr}{=44 rΠ TC+_ 7\zn$i};*(5^ҵ9lo}Dm+s{LOI+Ǚ>V/SKWR)[e2_IW84~On ;>zOkK51}qs5W$DȝGio?VG-E'tX&Kj˾qwWM\ε{5ՠT$()!8PݏO-h))\KMQ/IkTjtݛ~Y!^#qB[Wuܴyi0 # IIǷ>kШJдMOzrɥ =l4o#m؂%H=֜|)zì{l&J?k~zA݄ϤAZV2jm5Cci<!Z*EoP@Y6I;InTҤk}u6'73,qh1*ĸ8Ŝ6[㧘^/ opW+80A}`zcMђWYaUQ< rvX1Nie=5crnD/jN xT_Ͽt[3d<+N9$GV=MƝ J$ olĨ-Ȫsp9x8y|OCzkNП_FT3IqH.G6[°9|?ji쒗)_|vpx Zus5kIbSqz4R'|*,6r|úh›U~Kʋ?KUs75g][I%o|D$Ȳ($H>yyXG95GD[ii 8{-Co#۷'vp){[kźqU}Ou[n6M^ ~3x.-+@nYJaK${THσZQR_u[Vi/7SCvݤZ%j%˺EEU9Ӻ25pnR^owSۊYTcwi=agygp-I%f)!3DvV).Z4dsZIpiwg5aIՆZAjʋe]Ӟ֬--hmfKiUV|H5r+NJ5A'ɺ"YԴ"Rzl%Cl ɹ^\4@]*JM[w1Ǩ1.SեH:zK&hkm a$3lveP>$ZҚюnj_.;q)39<IvU[N*ald Moi5ܲ$p.$XײdhdY6 ͥ)C(,8xMӉS.%*>, #9 ^/45= XևW?H&gwWGi-֝hDKio2G0{$G_$l;r>SzZh\z}Ԛfp/4M_KЬ]7Z'IbWyVΣp(Mnx~n}fMiS]e?vM2Kfi`Kp1 ,$A"]\:IoJWq9%:*.i}u1v';K{HI?c%vyI%d|m,Ս(J2؝V9JeArl#dcd{rƯ ACUlB ޳|{Ge㤤Ҿ'CJIm-K (q M0 hY88zO\vv,Y榾V~(Q-fՂV1)d+ )FUIU;m6p\AouҶ˦D%M$Gq/ `tsGTfN_% Fhw6@kFnmWw YͲi6UMF9ap +# J[#Af^xpVPi5KPSsum#7671,ܛPcjrޢF?o6-N׻f2G;-Xq֟ cjW}I`;}%7z]u Ӯl%3i;(H,ƪoԔ$OG]Z]B M%Dr"I`2UQvY[\cKV;_o|lZ6AX KYuY dMD m%^b|M85+i',Mgr/J1u\sꖏq5E wn@ ̢0J㦞U|6Qk=~Y2~nh=9mBuז}ڭ41D *wJMbϥ}OY^oWOFq=>ѝAӖZP7:)qe=լsYe$c\! klWk2F~4Jum5 k2x,duâʠXP#Ĵoî/-Jۭ.<C_Ib>ÜE yUv |xtW+n>Jp kn`Td`y95䆠 j\fM @4'Y+)(i%SlQ0PRR}7E4FAMK"QT ˍVT QVSmJ, )IRp*4> @RP D 3GT 9G UjFD0iŌhR@Q*QVAx&݁P +mT UFEgz, Q +-FZL 6\vҼlJfy֩]mP)`S V53Tj1\^[_#Mo%fQWwr7ѷpi(-UO)2ښ"yuA[})L׳̡b ^CI8ko#랆ֽ7ׯ#Ygk{DD7̍,kubj5gu-;G4N2{6_xM2H'@^-F!bHU#|=-^W$^;7UwMhoesFSp eHu @}^6%RW߲s>UFz޹eiswoK H#$'j(;rESͼWr3_Қ󉧸=MpD%,z(9D(kIͷ<[jm{ׂ0J 7v`FO#-~2*f ,w g&۳n1JW>=oK g VRjv.cP6-gBVUuRKn[.1Xoe~Whtu]2(B֮OC1igʨL;@`M]=xSwf|wig<0Uŧ]ZGc=p4 @wG}(;M|{x+V=oEMh=C}B>RB{v3$yߴDž=Cwm׷Y.'Jy"~tȸյ&ah {Q,rfXxdh؍jjtZ,5[bߛeO[{}{{q\MjRqwq#4ұwG;If$O$҄T^ ]n͕WqJX 0AkIᑟVX^_J%#m3\_dkw#.ʙ$n>(tP+ITsJku+7+Ja~{F ->j{8Zq*[)WUn$VX4VP @( G)(V +ToZ@TϚYGςQ 9N p+ $hm#%yZcMi*Z*@)@P 2P:[Kx 'A\(q9=a,I'6` dزT1!9?ڰ RA 3\X+`X&aG>y2nyn?|%(`qՓ-9`LX;H Sb5X?ڀPpb( \Be bخ@ucOfԭ %Qw%K$?1KgSrW**ăLN{keܽȹ(%T1mʧśɩ{Uxu}6*9zw6'k0V߻ln˓ⴁHǏhb $6dl+f Uf͉mK!p +ʞ3>{h/Xqi5@N,Mm)D<+)VFXxi Rr_Z"\$g~Gs]d9B2H@͏9>*1H]7ҀME~eH~k^^3F ?9޶dKdk_ߧU˨5;FKrV]-bRn$ApcL$ >C_/A(uPJ[_tݝ1x099dc'.QB\n:XC5rI~y$Ip{9⻄HdR=$?\tNz뎵OELƷZOKkW-<0ॎXc ^>z:1QZinM?o-}Αt}65M3g5f X{vW6p U$,Qok꺍ZQxURI\ԣڸû\"1ڿHt;bkL6Vި[GE\+:J~m~D9OCS]FZ6]5v-.OZH-6rr"%F]ݽ(-'-h\sstGςQ:_R;֬x*H:cU:h)O0~i.{/5g"C$,=ٕbWqVP-DRIuri(o.M>u2뾫jKO[HSUtF¨+4bC*_CBm(:N񄰽̼Z}*>RZ-%퍭Fo5$7Q9'Ԍz=MiQm.nM*ynҕCBuSM공Ց 3tvbuxI`k/.HKB+Bm],)snVGzMN7Uy{ԗzrC\#Yܖo9oOMARI/ =Hk^h}ڎ)K[ّdy"oBUgTe)mt^w&~Խ6uQ|CD*Y~^tާ&i^@cre:ț&eڋ3&^U=#Zcgl{:vu8ɩ`kN]w.Zxi% %Ӯq,d'p;fB߈)R5\3s}pG ̓e_i3Auo2C4R2IAWWR0 A<fdb;9 %vEY ~QڶCS,%]Ld0*deN*WGWzeGCޏum.huo.mƹ8mfѴBMXIɴyg~/*SJMR6$zAuChiKI{s6#vje(G9t?KA57jxRρO0;aYan?.OkRYv0L(@n7|6 >rP뺊4O@]JEaYt&_Qvs߹<^x%zZ]ry :sIM5 `\[0[L&2LP9g(J=4g=kIRsMϋ$Ni4k#F!K?XJ;V8'a b$ĨR8MӞSIӎ*KWzoyce#k l8oJą3K "ث,Rrbi)TS<;ܻv??ɤtYg4HdHh>דS y~Ɯ eھi]^]Tt:RcIK&dӢI,0UTMј&?b׆%;ko/6?̫+4=JOѵ-NkjB-..wib{8IDmjWHی5Oef+q5>AmCQׅޑuI6] wr C(FCΗQ-GRy4iG>>KF{Gk;Y ssn3BՃNܾq^UROjзTXW&x\۴v{{MoLJXlnܰ'xx{rVkk=aQZL t2Yڒl#Y$uTUHe #oCtc6Xyvz>FWuFMЬy5 4aK)LWc"{娡&nIZ|v,'N=JLqS.,DGY1 ])]K渖+<]7^kt}RM)nJmZ;M4F;`kVk97M ]c &%].nJiE(7]FW[i- .;GsaxSyYYDх޸2iԛ.8rNpm&}O_hSY;kSvIG*+,L/8Z:Rm-l^yb}冿}jw!{9+[xDIʄg6x 1*pRTrWxuo}i` eY\ܝG@ªaqݒ~/ aW5=i3gvbXZRp{,F(jrNzx[v}̛>cWwr=OtyՖ\KcU1)*~|NKDɧxNčLW~ͦA$.+=޼lъy\{y#=eYiaos"9܇&V3P s.IUx۹tN7Pqn6 +3!iգPT/-}.Ú"/g8{{>ꍆҚ>)ȷWL"8%BJʪ3"-ڐ65OӚ^.;,!n+Kv:;qޒ(b]ql\[YY:\Mi{#$V1w+,cichlw#Ss<}mB#,^%x5oڸw[nH'CSZ/V-Rux5#̿KkK (G<+5 F Y6@#qz >ԯ/tS~Oq#}_{ ܸg!yddڈ IەEd_]NJ0JI&S^,;rxKn?NVϧ]ΧX!7jrPvU{ 1),w^Fj[r(/ .oc7x?I^z?Y56)v;+XD# Jf z7Q?yO_+Ή5zZln䁸d#TsnW{ 5_㟭X53'K^*jTFm32Wc*3|?Z պ{j~ZYNUVyӽ]6Q[L0iOcMѹ+Qt"n2Mbջ\,a?Vu}9ҡM)532Jx?~o/ym+ڽI7A5)Vy̗ɴJxnVUelF2Sn>y+SH 嫒evXJ -$YZR@)R*[P`ܡdR9ȯ>]6v@TUJN iP ,VՁ@(@ T@URMU(P DQF @(` bZj@,P~SR*IRxgI܃#>"yX2^EdP @(8YJ*7Խ/ DV5P+/Y` TfPeZNV ZP Y`V( {5 \InXIWj24~Ժ6KO.}Pkxae^E̷ 5DLJ9P*y,uxZX{LM#X}oDU rG"+. "(SwzƳ֑Y\\]JE{Il.r8# '}D$֤Tb|Uxmo5>TjZ=ڋ[mId=Di2L$O՛;xF[~4#]VMBU=\ K0>7:Uk7ir۱UqjDGiEV pןKCBVXU۰n%ݞii:U೷e..n8ʦD =捻 (p! =I[Vo8Qkov󎲴t[Id 4jE!Es ᙆXќ';rLpJk`VX(l %[I" 1y@ڵDFyRp*<+-,O:N=w'DPBҘ!WüFW_O]k8[W'ºހm=%4Tڽm&II. n6t(Czt^L̰|˷u$ˑ## z#5. UdgfX/P"{kZS) ~S1r9EֿQ;[60SIpW3>"hЩ@TP @(T x02-H(RqG }jE@)`Ts~N3QEI&s+/>0F1Wmvv*PV ?`*@d{.=`9m7,72h~GpraSoiT^ij3m*=Z1f  [s"mI cFHY֎: &-o#[j}@6y<~|ހ*]ް,R.7 6vPC%‮٫$r( &y?/qx^IELVR K)f!%pN@w1W5ռ|)x`Q條xQ]T?Cj6A&5c܀l)*!ycQ=rznFEqך#fW$_G/!Eܮc?a)req<ԁ(0XA*HMī}ߚ]B֊iOyLjqxϽ`cexր€ƭh ,H= kPH4;˹l;&bMĪ* mvrqXZqVu\[B5q5Y.g H6ɹp$>P}8~gQgZkk6cΕ$YIV+ue?Dut@E\_6Ldin^G$IawuƫғVRUm^԰u~yvmѣꖘWA{q wu#/7meڑ*nHڍlxMݧM&ҷ̭HLCΟ]i].d302/VS"ѕï< g[]o. ug>w#[K4,ѲTyc5ܮo;2G7B==_0YWjw,Smd/֤_k?r*>6j͢D kih& -b\Ol$IPv"יniZ匝j͹Z͵O{$$IY HF8&;9}E:j<{v7h;\:~tsmca)O}M5fq!cfb!ff5zhAISwUw@[Y\ǫNЈexPn3` l66DܒX8$jgۮ]VFn Ρ7.>RAyF5tv;o 'ֽHu$_]֬6}\.%ZYl=P2 }J6-|Kwn=G,e-9FQ=tgӭSLY4KxIH<Ѿ W2ټFm7tuY+Jl~_S}OK6Q K'5cm$bHTe }?t7JӖw%ڞLyWޗOuOխmqkyE_ uTcvmh:Fcܭ#ќupݤ۔u[|,;ix?u-a6"Qi-eNTp˓Wћ}Klԫ-Q⫩*pi0o[n6+!GZMcb--3yZ&#c~DnO.|ѹsmRm,[cu߳{Y>}zH]sLm5'ӬtWd9q6QBCȺM_FVjtԹKkjG}]m [)ko3.r B$,$oYv,]xG~O@Amv祯>6ሸ[їB .|mJZ,I%jmMܸ?!X˨[Jok̳=pO ;FKbb"Rħ&7\$oc\It\W1ZmT s}v^$5HCnӕ.!fY$K١ٌ2F=Iu]8Tu)[UF_즻ԯm:\p:_J )[u+)#\c;WE9Ծ$?(Mi\zqjat:uwO8Һz onm䶻 iw:K5`NhzjIJ?=yMrmplݫjU}նSnv:RK$VsGێqȒ6X2nJ_N-AݷyYrO _%g Ԡ.:X$Y.`>3Y%G v[x$QEޫ˧*\KKw7;{2m6uuݜ&qkaaa~qB,A.Ķ#JLKWS)$[rJ[o/v%eQtεkql5A,O1"H `Pd1*mIGѦM_#YԬ -DwZH+Rw!EkSO⭩ o=@S[`oTeH ?hl oӽYJ7^y£x'N*4ӵr(o4{KEm.I@"CCB7hKAiMZ\s,IZQ+>m2U\uHn6P\".ui*L$D73Hvw>F VviۺSw,*䕸ZX[kVcNK#y1*H-+H$쇤4jlm&N\]'(s-ʶ]7`ë=Tz/B]J^  HFv%~ %c2wMʎ^:NRR*j/镹g ]=S+o5}b[xrnC$n3 l2;L2{c p;I+rvxMr{B->]Z;hZGngK&&vUݹL!n;iok=׹$0KrÀGOӞH]xܪ6r~lQdDQjR![k8KFn_XRM$<:;+"OyE`ZA;\+,Okdǩ.kg\_\ŀHһWh#9`6ɌxOQЛVl4kUp֫tfUϵAV(Bn)Z|R׋Yg}X@TY60 pkpZcAckͤke 25}"wxVV)+*!TK$GsR[pJpj-5SYvvrtBszTM*jkRtY sHwcd iCEE59i䏿e;-^htt˻xlYe1!~er,>B|7m5[ǜ9*$Σeokf90"mXxHrqJ5m1Xݧٻ=k?=PO}z+'O`tV(0xՑ0l6^UjWO>~ZtPw_#-&@'3Gu۩Um+l*FW%&Rxb3+AzCWDbIR)-$#;4[XՓƜ)%,2:z/ךx>kkY;x~3-4eXAC6ѽyjuIJooK{nᙥS3Gm+&F !VY Nkzڝ**Rk,شbH幂HΑ|CdIk*hlƞ̦%vھݺUx,]7{ZOTuKOvPiְnbL D&Y)^⢳DS鿄ߩmSwUr]pxdO6| :iu.ᱶӮ]wo,xne 1w.@~+*G^|8[iU^+u*Mfk M5'Vkmi==7d1eeqa1?(W6H۶O'(ݤ\Ke '`=_НAҺ6m[muwu {ռ%x'q[y~A> Ҕ]t::rkm*V.#MOg*@Rl]HXm%DI1’['ϵG4V`TCO?T hŖhʋgqx%D,Ӵs`X/ bjQOVR+R7:ua=<2HU6+||r+N)&IAkym{ԓBȅG mIQPWV-ƸA?\* 3XW\^OVֶ66fTY"Gb9n81ljZvnQb[nV2jo{M7NTdk[On QVBNa|̝cѥԹKk[xObd8n3C g*H9WSQ,܊Ғ-QIW}\kO DrKm +"sAb㩨ɾ~r ۀs4(P @(Ny@ߐ*VRJ(@qW!)&<|K@iVTe@R]@+@T@UU@fWX1 ?zVd.o'sYשFn(70 QlsU-K[ۻ;i)[[Ǎ"0V;1Mʹ&8JIf3Q[Y+HQVCca_RFB9jGL9'  /{1[#2dyڀ71Cf$?J6沐hX"a#iq{ 3i󸳸di BBJPpI8όTpMY\{ 5'X3"A@fh`5s=+ ?j"HC3r~ xYWdlvOzуƥ  sٳs4ѧl)AYlhepxHfہ6{JFxZ"2F09?1(f#A*\Fʠr߯haۚggP( m34j{ DM"J-!uv*|5 m|* i'stjJ@rNyU++2'-0䃏J@#3[inN1XIG??¶u?K}FVzӎ好YGlI/ڌCdPm?PՆmsI~=9uOLv3K :WD tUk{8!I`WNWKOK樧}ZOw3M;8fn4QwٵF#Ic戆HXdMQ*im*VIdQe>\M\]E.>8H/q$t)uV9vFAe8鷫OY#um;n'kZ.-dRUe3;B 2;ْ"ӄb\-WM)RL4/tm{]Kmksu8VB;22v(˻vDO96j^e/a}tErex81I6@Qwd|Gx]N]v7#: cR%[t:$iIJ@hDHw3 3E$\儔|7l!G}S6֚ZΥ1h. H%46=qq顭vƲժ *تT]Sޮ^Rf̌$ hq. o |>iDy+?kF+%:ҝo^鴾⵸E涻Y1EL/IkfZS8ᶯ5KNHDH񣬊@udk]!TP YQ&sYr+qOZN0*0MiYJ(#]((@+4 T Ղ#>7p?zrzY'Gg/EԑZ\Ŭq_Q20B񴿄[\mSvV?=/ۃՄ?7v--ygD>kmz[jPߟD;u_7GKwlŭd,xblEcHHE`oVK q&Evwؤ|_~[KYzvjZ7Q5[ַ,bY3q$gP^>Ԟ#z6j +Wf^6INIlSu;ow%(;wc4r[WLFuK[M;dvM̪ʗ }mS>gHtY閺6=wVV66gDIDw?)8;OI(8Iɺ)VvKbd%#h׽={6kyndx)##r8 _ՎwEG&T*{O:u>Эoe+K8W-q#:r6w{c-8x]ߏo=4zGЎ'W/s$GVV6Ȝ FPFk.4ڋ}eUWy^H}֛Oͤ5z~_ Cm 6$x˽$ jKZ[jnwUG&H]-鶵ѷ]@wO*K# 1,cʨ7lGzMI\s$+F}Y3( Sp~JTM)໳9.'$j(Ѣ4dԿƭ2b! I+R^C) [Mjk$[i橨_k[MQtTXp7@(|vOȴ%I(wO<)v5gn R4BY _†%hGtK!o4TEAHMmgʒ^0>Ί|祧SId+L,ܘwIΣ 0޵KI{a'me~?)ڻR|1YhP @(QShv, , V@*X)@T)vDhh @P YP(V:Ti^(.&yㅚ\ $ {{`8SJyeDxuY<|SsDdtݨٳs-ԅaS F|+1{6M )⵴͝Qj Q C=Q(Y4U)|s "iNdDG$x$B9V+|5fNSnqg⭃ P6k`\q@RA8H`٠$|@2F(`W45eY{H#hF.eؘTa]Z.s`sֲyi_LHjqWF;\{g Q|qgjD,ڀ(8"7$} ;`6Fc8Z)Pیհsgxcn)ǻ{T[pȠ[1yd, 01~xI81YB\V|ƈC;$;NWߚqh]$:GWҬ:{!8 U;6sӔiwұϔYĊ7Y \ϰ1^]}#egUWA5i'nhau|m$`OדS ;$?M(y wBmFuXm$ ,m|eF2z4uTV^o|Xj(@H@u/#QjÕe{푦U]<XjwLA2ZJfʜIu>\Ŋtjv3Ty:l @)`ȎѰt$09pANUtdM:V Ko-ʒKW QZE7K{x}\%J=;Dӆijwv-i0./ls2\܀%\)sqv╻{YO|ZNG}Lu.fz/Us*ՒgH-;Pv!nl sOEJ*^[mĭ5 ):YtO2@-4$p.BBvPjrrx/F`KSH A.&oQ[ۗaw&.ҷJ[Uh>W=ϿԪM]iVIo"*U EhzZz%{[{'L>OoLYZ{ZXj˪>ڸùc4\ D M(GSVIJ*GwMǩm;Y-%te鞨U }=g t|;Z'80[ycB,rm!Tm;ēoFMmyI^\C}X5Xoz;tqa*ƌbe6)3{aT(2n,ԓwvnUI59)'TiZG{uuŴ"YmQmwe1ba"3KRiq~ GȽU-V>t:kM.$$aj;0+סST\&93 נ(KV5 !"<0G*"JmIqv_ٖJ*$nGֶբS~ա%mqð@Al/8RVqˬv':m*>$"4F̑ d/39bwHd:h:{O6t¾)Wn\5Э5#OnV<(gBc<;a`2A#[cj9u.~>~ ֽHɲpgAqhm.)kbH0?x~d<85aWp͋;٠{[i$UIN@C|= 6-g`ЅrT0 x56Vlʅ\߰sc<9mٳݵ̏q,Q蔘g6#^.J|Vyw]nɴ[h%c}.c 7' S mkWZ7SPMG|RmSZ4pYѲj -w<4MD[;ف9\"`ۤ$wc[]jì+㹳Xzߑd '#[gngzNmC8˗REABynݣIqR}i1~MA5']UR3h)%Ŷg+-B*<ij䒹frߏ$rڍ֦6<Gp#JcBF8TPTp CMC\V%A@+ g?JjX,A$oT P 6(`Pؠ6(N X1Z4[m]`QEEI7n*n?dP|qU`U9>@Rx ( ?j ֬RL^f uT Q )@ZJN@h"P [_Dm-d.n>E 8:F#v1^i}?K=wItziZř2ӡK!dF :՟ORqNN].faV~Q+iATP Y`T X*^(D@vh $TVR Fl 㚉>н1u}ŞӦxCk۳1( Y@y*n<.q˥UpOn5dE^m.YcO,ݰ^X{kFQ}JQJsSIIghoPZ?|6=FnQ8fF[9Q ݧ3H͖ug60ٵ2۶J8u$Ҿ՜1'S5mҍ?R=wX{4Dt {>2jnB3ZApXF䠢n+ Fd.'k :ɽGW/L8^LUݬz$gg{nemmpC睍bI(Kl= k9§ʷ"WCރQO6agygm}}}sInWGXF̒ěYUjSEr%Q^;F9:Mr\uO;F~Q#K(Ttia&k72Ui6N|o?&XFеØc<(.*~l'q0;cֲzeqmbM/ޟs;zu{P cna{9y^LmbHPnѐ>8T7OϪ4|{Y..T`6@Qp+РzYPu]I~MR+'r*+XU<pֽO8v7cff<ݝیsں=d_()(GXh6Si7\+$vs8)9%6mq|/)_cA֠׭.mflIA D$FV2(lTޕ*kk;e'F=;=W:!4_G7o[DR4#+嘐@NҮޖ'*4~|'?ҽY8=Y^Ɨ LB#yeFt—e7m˶+y8\5?_>h@k[RM#ke6)>NZvv`V}gdW..k; R E#1ܙ=hM+k=6wjjwvW|'Q]Jknu|4Nq{5z'{֖,s~LȪ"Uj&t@TK`UX`TL P %l 1ج( @RWSjMh l @P +I_FDo,۲@W}%'#>͚D 7_c珷lpNkI:oj.~dց'4 |R`P ]~Q$CcRd s[1;G41 *|N\#qU JMp9Ӑf\|.pkdgD3Z2AY fX !{E*N<*Q<7Y#HX!k-PFZLPp>a'Yx4{]1{qoi}w5hP}9&,XcV #@cos怍. ŋf* Jy$3m$V1Hwo 1jGA?jm!e8Ps}Ͻu93'O%{nJ`pq 5jDqp?Op;q7zl#0R1d Yd(#([G{ܝKSJTJ3z/z.nXI/D Ĥde~{=\UPߝa8j|xGz%}IM4~vv.mg{MtUS3-V-'I;E VU]vNSR:m*Orm%co.#/k-.,m[H`Ya@T 7|>Q SqzjZMm.R2Ou$v{jzi'A:905؅Ba@\  怖<xd$0E)WP9{9blĮ@V  ` +zL뾓H5>REh}W"W&B aNr~]zj{^L[=kBoKQy1k`Hn=]m4 qׄԋnӕot?LTzHz}[->Fkm[.FxS{Dv2܊s^nV{#ZUlԒ>qMSWKcy!c.tvV[V8fD++[]Ndi6ֶ p6D$ y߸,m#EVMBKWNn]Rr[w'v>O>ѽC!PCs,ZIc,1Ĵ'zMJGJ!-(zU-ԛ}a]y2FTnMKEzI]H˩㻚+Z6M$]S3fΎNnݴڴg+J.e>֮,.RKk%Hʧl$?nk jbz}]IkR˨][N\.jVq5oit;3@9'b.4[r DZeo~pT534tZ8QqH ?Urhj( ׽Tu)Dѥ]4X!Ԑ̻'`U;$iA.ϱ=GGtW6}?]Kq*Ecd1ʁ.@8qZprm*'Q%GoLtn]Ӻ!2w+@Nh%C5)0IK#bcgZq~.*[.4'D?<>/t.&宴U[[̢Ct p>>ݏW>O^ *@*e!pNq5f*lP Pؠ0(Pء@**PO#5+Fɬ(l]\QJTV -ULPx}d<9 .XFOڢ)5c@+T2Uc, rd d$cޢhR +-ٳa'574JG+cT6UJP Xn`I*rdL3\\\GTP(h P(ftD*FV@(U)@TUd*C}^hP +`uK5-k[c 7S ᩥjׇϼkNzLG5;/21nn6"s>S/=toy}w\=o~k46>>h!ht翅^EX]f+5nY3W.}Mm8w0fS\鞭teEpG@[F-Rhvkp^k8K6cҢ^h?ӶZ=A=GJ۩o UU|: QC{x~s2$g޳,;XptX>FާH`LjwMbyy~o)X AҶiv7'm{/m}g.EoNua KW{݉X@hp0C^CRt7[vUqT?Pz߬]􎋠t_ϥ&bw oJ. P[Ymm-=7/&yMݙ\[Q48%fӵIZ4$wvbfl J-&#8,X6̸;?W[SSi}=x;D &,ۆf|Wҏ2vtt[Wѝg?Y q|5ҲO$4A(q!-~P-yQzVw5mV{YJϗuzzfz5.kFqo%V񰕧 ,{*2DٙSym<4?/cfRA*k/] Zc + 1ef*6ЋMWnw{v6p텼ΑHaw *|g$]bUw_M]l5KΡ_&00=(lJ^ oPWk) 2/iuIb/W{*ܣX?,rO'svJ nQ伍\Qj!LzOVXH+g=+ԭptOMAy9T`qeC.uO.OQV~п޳]xF}C/-F%FYVX@ܤWZZrm_,JTۧfo侫g.ê-MTΌr#@8%vtu{_UmQh`cCq ^9?cϷ6#q.nT/>;SϾD+wo`Bkmo{׿NVWmDD92呁;b4zjJIU^,zwֺ5PVHthd3,J4P@28AWь%ZPv[mӨҹ4{mFCojkZ̖-;Դ."Tj3nުBGGW^vTnڕ}۷9?H~)MhםAr+^enW簬XI\_uEA}s1"kذTlG?upC{qV 6>$P_W:EOU~[_ޮ:hGl5sx%xL.9n!eN?ˉ!fZ3_+ܕV-,<_Lsh5=AmkycHʧ̉ cjR7([󱖨عר:B՛2-yˤw܌ﺆ1+T)'5 Ul>]\,ch @(P  VV[@TmN@XnI:ZP @(i%Pc@(zi޾ڔ 喝foouNw0\ [`N=S*^!MJn<8`9Umv V?PX(Typwsc"n\G֓2>9ZX s B. I8>Z8Zr,5e$ ckM%ge a>d+D~uWMtGNEtk{iWs4c`Jq:yEG/44&d%KNfrKUҙxtخ}Z)Zp۹SƹW{Wt\X9btM'+\#y?$[j7z3tFxcW7 `oCF*;]R-fcX-6>a>s_WnlC皠`h ր3Ubh)f 919>T`V@۲2xDnKkdi%" %I'{Uw- } by.mEhHF*Ic` =ea]#zt*FpXr}+..$HMrS dP @+`V@*tpuz4cX˥=w%G3:G&1)<J?4Mio?IEuc4wH3STaM3S^WL$}i'WIhJ1^1_.}(Ӧ|W]VJӠe&]*$jXWI;R6~AUFۼcY$:=%:M:}[Qkln2iʝl"kY ,kn"@bV'ڊI/r)IY8۶ʧt m6J꛽IX'kKfY(.eco/Vԯt*O;gH7iXQi\5_jt"H<}/5Îv7=rݹ[azS|cg"u+=Α+..LѺ^j]V0 kG14{#*? ӎvjퟧ=:n~6mDײ*8hw"sh$ *3#S*9t߅}ZU\rT. <Oڵ?Lr\2 A 6d=_me=Ɔ4yI;DĬr8%gQ̨|<px+]H}7ӞԺfi6iġvXI)$M* YC_ьӓVǞSSgzϦ}8ҵVE׍ըKYNT(dq˧(EM=}M{T(YR㿛wIQuNY[g;Č[hg,q%&#)sJ"Q5,lP C;(2Ɵ&}(A!͡H˻wrޯUuk%,Wv2YP @( 6( @(@T:lUֶ/V4lTP 0(T`TJ>KNJ:x((+ P+0*J6*@+4 : q[x浹Զ,܂{8Mѹ3?jFP @(P @(Ձ@(T*@* *G*PS*+@P (TZ@(@(U0(ՃYk {KQ?m/nAM26uM&՚NXuhV=z%ٖ ٤~6aR4mQ.|b)Bnpm0oaqaa=ӭaQ,j{kaRZ8"YP(֪pyaU']Ѻs:: lŽhRi!IfEvWEql*ay:e=h==IޛU[o~lZRie#[Xh}0=C,w70^aukl߁ Ap, du={5te|R$ROwR*x:E?zoBhtW};HAœu,7&m@߉DD ZFJ~[n]t8bSupCtckqzOwH{VٱcUViIaۨnKE+A<^q^}+4S`!9kFkcmphsL,r4l$u #!iHy/ȫ]cN8?4^^? o~Oe]j5Ȏ+oEiJeV?\ש\vV*x%}YuԷ6s]flᲵL(P#H`rFNXI;ynϡt6\К_ !dmAKȣe™680ZUuRԊRUz/k>J( zP4)Ɲ0ԂWgs~{qz޽e>.Uf"5@T(, @((Q[P @3XADQ@+6Z6*UpZR@]F{jE[s4 m'YA0VK4N3jj׿!#d֊bp, P =E4WdI`@ ppFyr`ze G7RF)  e.xCx[g29⭒HFPVAr~ch 7c3Rb2(8U- q5lfN0|V Q& -ix2 ph v8lzK_j0861)g lDcKSl_{><^[^;##.T bD5l-i'`@F  F(lǞ}@_ ,y$K)* ֍gXk ʓHX)q}i301[)sf( >ڀ@=hrTh-C$ 4(VKI/rf$pd{[vݾ,%_`c?Jٓp['9V 2¤} <;/P[q?w2;Q R} TRtAe`T\#/W;a~G;z׮ҥ{#\Ҧ-KPh1J$JW!f5|.Utrmoܛr9yU}k}J_GKO{-=pNҘ~p{C fVijko 7>)k^\jZ.m;;(TB_j 72O<}(J*ި9n?+o? 7H,O6"[ JTU0 b|R+rrS'XRk^sEZ>s$9zHdOa|znKn!Ə8x =IFo}RK{+y8eÔB8f,Z0rm*.;Z"G#zw5 g%dm${vtX21w̅?Y Ab\>biWujWk+T֮ .gWFm['9'IϿ5ݷ b(j*Y`TP [P Shd0Ȳ j?RkҝbIK17ZǨĝŻCTXhdnߕ(0nY66\^3W=%3aί<ʙ.ڗa%+p?j94fyh:?Quti-=ʶKق 0O:Iv߹I$3꠫b&%n\jU-m%k.׭:fZå[-r^I-; D!Yrr}_Svڒa~V_-icͼ q,,#Mјié{t)Uxdžo'CSt'ѴmHmm.ӳ=>R@E؞/FvJ}<.1/q)Y*(P-tyqwvUTrKYsPV,5gM hUJһ!gdv (>pێTȣ d5_gx[5g  'PBmJUV8Q77%ݑɱA;nU[q]҄WEͣDڔ Rt;X`x zu1F݆6hg\;7? cy@#bn:\YF=S=7Z/$\^8gmՍ$`D`68ڜgMm-EtҖRo`;JabnY-(")$ΙRFW*kѨ5M:~;1fGQ^]Pyw kw7X,R t a̛C+FqzottOkMSKxe2I;[bRm*a:*}uuI7deu#I_IkMljwg38#{`+])]Rt1(>{(yYSʟco(׶SXںFRF,ܧ Q0iVI y",eX( }+MXa[kӇdbC!>A&'o6 ǟ|@ŧzEHT:7c ;AIK=saZD`VX6( @(P Yc,h[H5 UHɎXV+ S ATT܂NM]鐊ՔUVrTPEd ՔP Xh[ VJu= Ѿ7!*$rVg{cզvQ@(sE+( T*Rh @(@VJ@(@Q *@(V@( @**+`V@w:u~Mo5 3Q2͔A* WJT+`7W6Ct W nORܖZi~֝3joҝowݝƕ]G<1j dRM4aF%LpX҄E$-˻X~<՚ t=3oV]N $[!A3G3E>#pqQ?&9qڤꪳeInL,5uzGOWQ6C#}gG>JvXqtߟ>ѕ. >s5 Q5>kh.h$+ Uۅ+u:=XƠ'IjҗӖτLϢ7:Q7V7l.h%K D ѠHT0;-yйʹbڻko *=Y>ڦ߰fY]݇j'A1$`tieN=o8>z$-!w ,@,9{O{f-cӣ;11r` .Ɇrۇ$* z_Z$>>Ћ DRE nWw[m*@4?ZkgJ9?2\WWzAkGIUQd ,nu\.]E6+7*4ut>6ڡKxdB2Qe (Unm-TۇuYN?oc/㦲J)?z"f(a@+l  QZAGMMwP׵M>Bӣdr" dm]=dubq[~4w»SkZһZ+$;v}`+ u(Щ+@VXAP` @*6M r F( Ղ2+&AMm;qlE+Ĭ:;2x9`uk_H pK+qZ[e%8"`RhPH5us:A Al{[r2sN/ӜSV{f;Qaw,njH3Wo%lGR2~h wL 2sҶR(``p[gVV8(jlk8cG}*#-| elav7 >Շ5Wۓ U޲uGEkڞJͭĚr}̛'p:ml󺞃OR ?*Oi{VUVxLfD:~X6|{U?!1@{~ۭi̫J#Ơv6ׇ~)ZYoCQse$F#^m&4t-.mWb܂k柱˛F|` >cuhT@( + P ՁYh &tơ Z?)=ݳ^7UYYW#q kí]FU?5UVz-:oMkSǞ ý屹BZt1f;Js 6QuJ]))xI>^NpvvOw<?x»6wspt"gvϨZKq%Oŵ#40ЋG_/$i;z|N26J7M *)K4uSϪB^9'':XO*]2Η IJݷq o顦 zRW/N6q~d5:Q?Tmd!EE D9d(f"R>HdEuhQ~spz-q˪iJMǖ~]/ӛ})ກK)'Q~V;a7c[,I!8~~{[k$\c1ԷWJk_Wvd53I:L.lMrl.2;Jc]?ã^UIyFh @(E<7Qxedu`C+ (*}=|e-nM-!UyXRKqg7[닄k%8GGڊ]bp?*t4wbXMF6Viq kQ.X1 /psjGM9[wX׹z}?!-YV5)$;jTGrFwpo఩X3JY>jZ歡뎛ԭb"c|H"_*Qy/ф&q$~ZyRtۣm3Ρ$qE4;3C2Č}ZR)Vo?Ez_7{x`B1jdidٶ,{hIl$r~ 6(UP @([L ł"'VJa23Zd#Pdڭd`ң"4EB@(P+P @+/kK P R@UKP(R*@(P @(JJ2P @(0*j8?z[#5\kQ}kҎ5Xvu SԺI]&}"}qjB-b~NY;A>XFQv[m8)ԚY@?Z3G K[U֏usڼŭs<9dӒ(/u $M)w$?较kmź٪ou+?#̯*RDb0C>޾w[%cΗx/Vr#t}+ )˹IF;X };cunUdfgajz\RAgQ+L09wf94eUgL )ッK:\i2Com< s(QJs\z<Hy =u9Gh݌rCP}:εպc8ɨYK|L1 *_.[[#my:7'wcQ:H=E Ж }i^ǭ/#xaY#TR$EFo.(Kx'ӮB{Vm|ݬ\vOˬuރhgRxta\Cr'dm>k^%u(Xۙ m =6_+sS_[,*Jx YXdpÕ$VMwIFDjՎMܓub^ܽ2P67d1#PoWYl,Lkh"gZ[OX1"o]&=գ@I11UxuORG/>В񉺵u+xJ$k#og"du`/+l2g N4WQzGWWLeY$ZXȶǩIj8)G7%o;;GJm8U[YMܒ~)j51ue=߇4 {y^z'Ưb 7Hhc(+ԨCR \7ݞfI- Mk]WSQխ5Kc]8yOSە7^FXm~W~Ul4GkqU_NJ?_ͦj`˸GOۊjiIp՜^$WuQBޱ8:l@(P Y5.nnC#%D" `H3 ګ\6M$׶i*Ct^F1J*VX+@~kEA#UR!zYn94RE( Vy)uRhE^P 5`P ZHEeD( P Pl (Uҵo(=(P ZP @(P @(P P [P(0(6(`P @(l ZP +6 %.KdG޳J=JTtB2YA|x[,3.': K4m7^xFs-˽{+&D;P,x64:(RzWjϜev/=躾XV}KmogHv4#ل0 [VnQ{Ta-[^g;_L+m$uF"#ɪZyŊ16v_ )* QS٩צ^9X~StX5u]GygOk(Uwث"^A-$~8].,*|_]D E9rs(]^4Kbav'{`6y۴sc ݮsQ@Ŋm`Vh ncjE*@(]hpdջ"<x#IAMTd>7w ^zw{̪* "),eC0Āh:jT.eL38p1R%[ey+ dI}.x,,qq~ŘVr$ BY<iKrOڭl5v,,8^41$ǹ"FK  |>fl*H{TkL~Sp8Z!0P2A*=̡#V8.v7fri6y )3IRȌʲ``2HVS8F @`89``~}=Jtaquj5-7L63]jSdDJ>\W };uu}߱RȆڻ੿?\h؜Cط]swwA@<8V-A3҄DzC8Qx=r=̥dRE+ǺFw$m`Vҿ2܍or2|1n77v1YWnh׊&]PPn9`O'd[UOPQ$V^?>2n[Ck+i2>V`V5y (dy>kYmcgDCRQea!d^+kdd[iY%@~dfa*8CӹnU[q_^.s^Gr+)yXl{y˽;EIKd-4ʻy;:i:og K'PQDpmOҵv.Jֈ98Ff޻[K0{TB:F6Q&hndh rv'rD(@(e*CbP P @(i[@P gZM7Yt6J{}*/cW%Nү5'rTӮ8~$6r{o'#hRP @lvd ,P>dpkWXKiLKDT:qR#+ _>kwEv$ŶÝc|3e#5ézjXWuFG:ޡZ mFhۤ BJ?<0ȢY?1)iksIJ|%ojݵ=m.?u Xv=mٮ,-el2cydGP "A:Fv]Ҿrʑ_lQi7sA0L',bp}n?Z[Ϝ5՜v<\0#7>}X8~zYav6ptQC w=%=ymh\v,Ӑ ScpcƋbTfovTFi,%x.ķIivU㷷#>)]Na \BfHc v H g5g䆅l F@($8V-z$lRu $^B].l,t`^XfwE *#-t1Q4z}'y9v[3Ag6K;{K,"Db70]MI-j8o5˷W",#Z닭+UW҈,2|[rH +zzQ\x}qȨB @(lP@*`T @+IRkҋΥb-KIKIMIČ-i 6w.kɯFZy_8iw>9wrRw0@;;EENPGvLdƚrvkUQZ*XV@Q(*|h|QGޞ#ޛr+)* bQRV*[P UYnDQZ( 4P P(P @(P @(P @(ZYP @+`@( tJ@(`P @(Z@UZP T`V@@*Xi>A7c>%r(c5T~^׺[Ou{P"iMݶ]ͺZM @߆:n)ó̸Ow RstϨZ>k׬oΨ۵7bWyf%^@6n%=;ҕI(fe|3TwsɦB[PՎܝ5{t-nb1H  Llv2NWȭuK>f^qtװHC2|~]|5}GMo;rq8֘)PP Cb I/IX  *y$$¿اS]˞HI,T GC*HrRpztsN\լ֕iRE2)pwj;Riy|$jgӽ(M_}Zҭ.;Bd.嬳mb,$ )mJWjOu{PY:ծc_HP`g<  H 0NB~}廛(vckx_[jG7+9ƨ.\ZAo99'$!3BY6j{rD]=eyO- Ȫ"0=V++U' #gIf*ba0N@̼iٔ'Аgrx{ #fmum^O}6x[`o®df+N-fi7m{R}Z8wzΧ<=̇s#nfcIk a!g5*~oj`gP4x8Wpa@Yj4+6P\[m+lܲT`۝㑐rf*ƼڒR? k8u>5'J=Fྗ FGRw& Řg'CNrVeVTBy,ﺓHWDeYH1bJD劆E#e͎5|].1W_v(u,tOqmki"ONܺ)ᙄ([%;d}sONZG״?v^,D$VTcT29PԊixU|CTy=N;=1"73BRx6Sn@'gqO-ynqXԪ(9$屖 HFBV4}ڲ+`=6dGE^ťM6&oqgi7#ms^jţU RWb yЏcCFdKdcr7 42↉2l0'1;چNjz-"kAIڂ!cssՎni[}Vkpv)Ixކme) #U_~qvg=2>9X>}MAYiXjwV L,qʍO)*~kϜov(z0*PRP t-f>\?Wqe5V{EqgTtX6cCP @(P[O_DRr]$M KἓO0r&10(ںb@msϪN8v 'ziP-.eH֦! (_}K`lY%c}EӧԱN'8>П4?îtNXîiUb{nd l2V I>Q*WN~lٛRQ<֒jiV2G'^q[u,`I^Air?Gq۹OXz7ǩz-idqZ$r,_ {L1#dO*?ã-^sRSvkhI#JI gbI''ɯLu @(U@%;`nmW|O>т nVʫ|8{djU@}&@AlQʹI9'n}zi7Iz{N/]\L"ˀȤrNK6^2Nm쒿L^z_:OImw{4HvMon#QFKͼo=E>;7Zy]I.exvSr;ʤ H (I-GqTm|$:x˗i$rO>k%FMq"T]ǃ0|Udϊі0o JG`ƣ>Eʘ]\B/v7ZVsKe< Y/dկ[[ VyD@+:8`H>EMJ?s]+, P [( g;z,o{E';]UA!C6rrgs #|!BCulH*+1e)g&S9F:+F O͂m_]P Kj&Y%,Y#{@pXj!KJ1ㅜapWl~RpV>g.fL@(P @+J`~U<ז}Jol^NT!n[qN\0ZtBrj'e"DyhU*сU cѳ%TU$ehQX(P P@ZT*V@V@(@(P @(P @(P @+`P @( P@(`P @+`P @(@(d @*4P+VTy-szU򚳧jWEiXm*pS[Yuv6:YwڏP 8SخqGqp\v.kKǧPIEs`w^k5c) ۼnϟzo?QI$Œ0?l+OϨ@@+`THUOE:ӭzW]C4.c#TD !$ `S׆j]ꏡCҮ~YbK+ώ61]Gt_+lo˦זQuM9_"JRzN+FmvMLrD5#`{6KjM''* Zz3&5EuA'D.OͮcT[HOjM̧r\ dzIeo'gW:g\գ]#X kmM}Ә.NcTᔲ]륯[kMz۽K ^h=AEt\thǻ.$!k{U(\}e⦞#ecw'/'Xt˙mgU9mVׂԏ _jy4bBqWuh{բxzU4뾝:t:Lj:d!7AXUVF>-~:2Pv{tl+ zdIn6+ G|gI]j=zҡIglUZidEܫI +|:sqIw_`*6d Cb@(@3Kd'&V~*(s[Ee)@TH @*&7 (䀨h U+)Z+@P V72ZLPJI uO>ܨ^mRmViu; דI3gsc[TRQ#/2l|_kHRXiB,glFy<$ T#Dx\0qT(2 ZGB19njШib(2An<眜}:V 'F t&c >UzCFXlC6#;W|,,:SK%y&GJ&c ,{˩l "D&%`9ǚni-B#lH6VV8bGJvyem;lczm]V,ѺQj+]V^@D1IC]2X•ہ{V4c8|9e5O=$^+}zIgd0\3:,6.ЛÁ8ԜG+ .HІ>rv2fi[N?C@aK**Z@O4oT`¥@nyTKɓF2XHN93{G;4j*)xF,2mOѸ`9#e7}ȬUfm sH'QIpMhl rh #Xsr=q@gw*toͤoӭ)6U236]r3X QESwϏ>8#FvGRRF@?pAJ<ʹF-%pgmп8\8L Ƅ:k F0&Ei~֗w3=dtФDc3iY0|zEKs7TXtIkҝn W5ou L^{xY>. %. iYY`G:T#K.-em^puQQyK RRV*>njٿFY}Oio472unoI!wl2d *YYJԛWuRU^ey:(KP @*gYM^+c66jjpD'z}ۥ;Pm$ݻoe+ }ӛ~M돀'ڄHpvuS m'Kˬ:N.uIJn aUL(,T3Ět5VU؇ONR鴫qp~㚉XggguJdp{ KOZ3\=FyF#FJ \e&xuJg莌Az+9. hccƤr"l!q _Ui\JW¢g't G5k:mb8 cm9;6~tSw\{JMWiMy60Ed3"3Dhmh+.vA2R-Vi;^FUėrup啙ݘcI^#&  )uQc `#QF,0x>FEiPWX5I$܈_/ *dFw٬(w uiRgg0D%hiē8I _(D+खc熬brۥ%ݯmFjH&K{,**Cn#̌Q qZ׎yt~)%YֱX0oQ b CD*m#vd[nH7(;xᴝ+/ С@(P  TT0i)pV>&->2Vcs⼰ZSX-?ں|I|- iFնdhh:@( :Ra$ J*@Z@O,#}'|`4lw/8DhSR/2ILXdm$c#ޯO֣VS&3s&chP JP 0)TKO5m)`[:*=(Q@(l X` @(V+`P %@(@(U SpRP @(*P@Q}""ϡ!#xy~"mq̋$(шuEYjMb仧~ʤi٥*?]eO>5at^R+}AӮhb)Y| dwG[QF6嵜5qKEKϩ>:L}fNy&{dt|7q ey#b"(}ǐ;t~9JneW{&W$ږ,vTn85V]iDs ױ`IT8`~y-aw꟨/KqgKtޫvkv-s 1 g 2?+hk-ғ椤e_,Ki|E[Μߩ5_Ѵcnmb9hCIqzp~XS2jT]fRvl=Bz~Lv1dAvx" DS#Zc&' 5w{ٶ.g5NV^ۦKzK)O,iZ72"c0_6CS-Mg c9-{}7N6r0i^Okq51#]Ornq0 CDXIzίm4rVMzRi}ǫ Z5A1tPӫ}E/W֍7z 4pF$2>7ʏ]&\tTdN/rôi}lV?VNWkm۶YK(//!o6N4.n;r[ t#jUMԝq(Xkqx9PHzRD]ZY[CBqQ$2Q]1UhijN9pi)I_G^ݴ$菉_nM&S[MCZI+V+ P F P6(++6Z( U+@P+HN׫34"D{sʼFxiGQml?:} =$̶*&&vBCߔ>QiVI4Vxǫy?@7-ˍrx=@;@mm-Gc[4e/?z42MOl.B}@܁Xr\>}BmJmFq##.JQ\"6mhY_[k7/ia$$]2ya@n៭MYJ1n*eu|G$HW5YB,#Rr[2I4I y# (0<`@%5gWJ$y";w6<8CGֹUʻ}f[RKh乚XKi;* YKV`Qv29<躄zzu N\ӽwf'<ѪFciuWV*@e$`oWwGzm6?K}7KИRqjĪYA.7mI<4>wݜG_MѴMBQ5}p|)OĚ<H_I}:OǟpW^u m^?II%D<ۘ;glkJ ՋDžf6QZZV%ɋ>DF!B)A˜m6ժnOR[M;K/r *Px<95Rܲ՗LYȞ.Dw;v>Aݺ=SmMYN}k6[^Kg*L#COz91@Yx;s1|րr3Q@my>9.q21`/Xb\ۉ@`yw؝`8IHVS|ʎY{uFDZLe `c?jVA[RIqF,)ai֖ UM &1&IϾ8o(؎$Dr7( [GV(p  ~,F$ |?Zu] k3tFxI׹Ud*6( @(V2;vq5bd6}?PNYtn !f[[W0ŠCc ƾoUb+~7xOkt_u=a𺎩%텆ЬF[x0ʳKu.j _*NݪRչ*FWbI5`:z%%-m1Ȥ {xcs-;^Om?Exk]z>. F1Kݴb7E 9Ez۬Ӆ7R|"lP @(UI,?ҍe[2'#ϊ rj6=zށ5;VMXS-K*^%+"”!5Ԍ$S+ث rZQI2R`Fq5RWHtͮ;hVUcRHy'޹CMF뻷'ӺGjkx3))$rn~[@SXP|qքIX㳾~ EΪP/M/kHZTIlY km$D7eXXya=t-a%ӻ/]1,"ӍmcpHIy4Ys3UUU+h$wrmv~2+ V6$I 9ݟ'>Ap~nOhw}QY搂K㶷BUwK+E(2@j-(˄Ey1\8`7+)a@[ZG"l]hIrӊЫ?OޫUm_y֗7-vuݞXV7}Lc p*mWI)RM$:_̨'L]OE}7uu^beG;H׶wǧISr&Fdgkޤ6v&m;ĪTXJ*]A-xJ/uk5"L)L0(@T(*G8fL|0SQX ҍVM PF(*D`0yZJM[Dbo>fI*N-eV)>ES-:M%9vk,Mk܉A'2IJ)a L#;z|g,+Ю.$X01A$^MΛSOD\@J ^^|]Fe+WS cnˬ6ҕTwog\Muoieىقbď$kYϿ*Ka A ;8@s`{ѤV=ig뺕i-R'CjwnN$a l7 i+Ni'[.OzPoLGwe-ݓqkopDkHB9D?~.;rQ[sGzsWRӨfciJ5JoR9W2nq4ZZ$18_zFWxTiT֮m 47i^ņ^nPm0b"$xzCݶ)ߥjv/B薻)%sMj6ܬ7Km)iJkSn;6;|Y$_2yQW%[M*+'}OO[FM:vV}G,2RF,>+Dl&n1"ЇVm9Rªrݖ~9}]{^AE[*fH݇>I+ Wa tW~ٵrڣi֚ yu$\#:$LЉ"2$"Lq])_u^N籰uq,`@F caxYW'(AŷY~ގMO4K[m3$iѶ*d~~C[u%ԮW|tܼ:?O:aX^yl4k2=-~WlMriH1Fb5-JU?^]ғ*Tw#}'VEΡ/o^A j.nP{k˻'uHEaT岕u梥:oO]9: oZeIt]r v0s@,9?S.cYĒ\uX&3I/i0ߙ]2%B@T)@VS& :P(K (P @( : md , n3Q:Z稯a:Fk:ŭ鶲8[鄠[) # WjF $7]_cRKMahnxfE"1VVEwԖģo 3 76"?ZrJٲ( RDG2[~kIrUFr 2*';_>c{ԬٳTO_a-2[8ebsW;Umwv_4aK֕-di Bgph Ny>( 0 \d@K9 rs ?]くj1<9BY{c jۙڭrA)t`@pq@gW qo4ig SI>syzKN랝,,{I]{`!_̢BFͿ5x#KOSnSuJsػoS|4p-y'e&WhLE!k}uN|Aqr쎧H"{̷zܗs\,6ыPF?1rGA4~fI$+0 0#q֍h02 e`pAWɓtTѸ a2F,I(9X~bGGoP+-7Ua^M]utD`?Zd%(i%P(`P @(P [d }?]mVot \,BHWM﵎Ȍ>^Aj-T<>LFuz7w)ӝQh4wHn!I yIVBvF. [ɭ|4[ÓNۻ7>kA/Pt m:ܓr>n_CT|޻"P @(:W6[[lOq,ܙ1*JUv#5Pz(n!rI"+HF~ޜ7?ᯙlb.nm"t^d*v6p޼]DgjJM?+ϓQ}aVϧ[[.m4\i,I)HKH8e<ܯ/uWWH>_P@?Y6Wvu1N*[xNlr8-ӪX?\{ Z۝8XpOImTV?]H(fP,9ڲ]ei 3NE͹ٜw jRD)P:UѴԊhndIRi@1+T?o=t::nP/Con$ ,@TyA>M}XEx_~Bw4.u7G,fb0v-xl WDq_{Uz9WY UsF̕L **,XRdyn3ܻI#rYIIX0֚ F+."ɬVT2 SCL$V 6( u*E,,A'n@fNowjMpḺ)EsC.poe2ܵnG r[7 pqD%c܅YlC&:P P% 3f:J[JP :@(P @( *%RCP @(P @(P UZ 0(KP +@P jz^ZMJ$+ 婦_ S25Gki&Cgl% @ 1`'54N}X~m5}>h;ʌEXTF9u]"ʯo)uKHo)aK( T`~i4>V7a%nJpR/ x4H`[{uv-n⓷&T:! 89 9ӜZxZg};Kt3S./%ZWp+1"7*roRUvp|jN?ҭ>7U͜+g).OuJ^v6#QMq|4/n;~JegR2ٌuԤW{tOYz{smiRh$Ejћi܏5gcKifvM#3m~x >#KؐO޳7Dg3(h Z@T@TP @(P 耣5]$S'x1'DQJ䈃~l65},wn}k՞.Yjstuvר,yib̋Hrȭ+=MHi5,ڸjڣ/UiZv=QP N3E7j&.eb<ۃ)XޓUN+M{cx W'/^g6v8ek{RxL *9Gydla:vcjרȬ@(@( mJDT ;+upԕ9V#P>O'Tɣ}uk$LcaMG1hPv۱\uݩ{x_<x>=[>gE2W:kH/I GnM"6BʻW͆Zz mrxʗュuBP @(*2ov`c9TlԌl]a>՛k/ T`8>HFgnl-'UF;imm"s3yp]D7i*OG_jK^it51ukm,0fD##Ļpфu7_ixN0Ŭ3.l{ZɞU9e%V{2IbQZty){/}^")1`N9?ܒ1ֱf,lP{J[Μt^Mu}7!*pGH8jD}9ׂT\j*E"7<ғJ 洝zUd9?<}+_HM$e+): Y6!J2V`DyTm T8uu/_ɓ]( sҮ(YP @({ʠ(P7x3ǃB -P: @0(lP 6cJCP UZL P 1 (*@( u( P %@(`P @(P @(P @(P [P P @+`P @(*X@T*{MBK "COow{I>F7Z*:oe K31$*)%#f\7kq^\,1'tK],g܊xy[|ڃscykR'Cn}F2M.'!.H߼dyk'uW_榽wo 8dlЯnm )x4l NAAV3IMOUdkX-#'1?@i_{9!.v)WyXX]iE kZ$HeX,+ݑl%A$ۥ~. Ty8/ hNn2߶+IexF+[N&zkm z&MԚ[[Aoog-&%A% 9kڕE%qŶ '\#Q7}'ϡ/o4;h#]u~"k٦9]lllYPؠ1 @(2P P 1( u(*@(8PՂ|x;UyEHuC$Lnlp<kLQ'X(N7.@8>F@8VT"i"i7V)z:M5c߁s䑟f'OQiu"墌w#T-$#iʓ5'eU}=Uݵ:vr4$^ٛ ʡ{/ G3H\af.[e}2bph7&ߧxfr.eEK+{k}vw,sXvn|z=v]n'B1A}<bӺxYJ rG^ +5rI`8z'u{OT:ZKk;{Op%Ww 02B#hs* q7֚[a5xwxnF.WFMVPM2.̲ip]@PEWG=8)9_=ݖ.fe+0޵I%YKגY\ HE;]n<VT|,.1WcEy7Lꞣswօ_BD6C)v eV9S%7Խ^- R z2klK'~k40TO@eFa@dc+K5`I5JT怐@Nr( $2@<v( ‏` k.A!GG oZ.f59̒fo秦ҌU$e<3ʧ<nۡ@+}xUG$(O>lh xJ̬ł#!T$ 8(I.4^ֺK}BK>4$)̆NiT Vs7mMMM8mIbuI3֡aӽwctkmVb+ᴑ!Q,48d "˷-N};:եn>5 GYX˧Z[G `@9nS0+١]7t<>QWP @)@T*$FEzkf:V{{igXj 4~XQcHjIz[/^t-:HH"83Y[k(b9STe s~⏗Ȧ3J{ddQĦյN5 y &lY=*ӭzMԯu gU{Vmp2:!tʬW/}\')%L,knק(OԺP߄[+`ZqP\$7go`_JlҫhKp@aW'8$5ޱ3WKվhM}9v1\!i3؛t[Y h5ޡk%:r<Ե"1^g(M V3[Ik" ï ~NJժ)8VҗYVf EM@(x&AJ6@9]k R$ɥN/`H@MJ:9IFTYOꬂP @( ,P;Z7Qj}8ˡj6Lbloxr:1S$W-M%fedBDX c"J/eWc@(  P2UP *E䚶AJPء@(lPP P @(P @(P @(P @([l P [~tsPw}c'@uN-F[;C4V%^ e*j?u3is]Ny7ۥfugQm\[i\] q]B^ѣb$6EG7fscݭԭirj%ycoEWY=JG񒦍5ͤ (X#FUhĈ,(لJ?uuKu/Mnjȭ(vv6y4hO$379L,VQp|pop!^j&T͋h%Y8dg?Ji d %H}DixY̑dYѿGqsw2{;I,XA$;ZW@\ $d]8tOl٣>4ևG&[H6Č6~Pv3z^,I'OjֺiqosvDp+"$rJ qSV R.=Tu5Yv=GkvXZJѬbwA!KT-|4"'K8k۳=3g]t8ycs9ʣ WD#JA+Ǩtk(kpy#˨`F KQIr+WEqXz̊Tf@( @cJ@(`P JPؠ1 @d6cP @d3]=n=j2-ga_zbq\[qIF\ c@ ` wvEwgr+d>26ps F>iȖ}=t-v^i-׽e-xR}CbۏOQ 㻪79USOXq21{rQh<`F=M,mDA&,v6NaȭoqY>e'>ɩ+tTUe-5F秞螖jS-"fEuxȾ% BQUAZX{8x罧o>JGoPB$-G I>F±@ 1&qE/]߽dUҊ)@[FeMmo]EGjX`eN0#69W9?_Nsu$v+i +s 1?$[IJ.jpgVsT|g1ܱcSӊƻ:Vp~4]n('2i=4{sd!6772׋سΨ`(8Ƞ) aY$I;#ff9,ǒIHQ%3$wD!wE kH*hXd$g@?Z)f r2}F182d Y42Lmچќy<ٱ ;T3Xd@(l JP(`P h.%.m6 )#Eso ٷ:חrc|46Y'cOIiIxJݜ쌊@(*rdkmZǺa7S}䰅;q|768. tIa}ث}+=U[Z9;ɒ'-,G~F~yvhn.rڳb9/`U')0bڨp?6@<ϟo٣'*Wip<-Uԇ$y悍:Ir yгw[߯k nɝp9Ai\դnr<1qrI 8 TӂTWlO689灟UhFԠKepq|*9%噳Fx`ʃyHq! >WSgfLD~l#֢:UU\ ]@, 8ҭOV?i->@(0(h Pؠ:%: P @dR\ܹ{3fŮ$lnB+uW֣LK5H!+(Vp-ʕ|_zhRzj|s.J^lixo܏؃֔t\E_ZCYkpzogG'ioEv1L`6,w\ܛW}:@4MN\D+M@m$*#35IbcCVS^}5^ŴOئj?^X-rZ8KHc2,}e9'55N0T?YQZF,y8?7D!d~۲>]?t N"$#"5HE,wRm4eӢ=j]{ Fvv%hr-[is|>l9;O&8}I0Qb$`Է]+7=Fz0nfFcjX2⭃ZF|4F]ۊYG8)r@ Nosހc$_V HpKn(DgmR= ,0`Oj;Vby#,G ;cQ扃b%sks?QVF|I do$םDPюP ZJ6( [( P @YO@PYIr-k\2;(0@ bO ZJvW84v2(*@(l P Z*X=nX8ӵ( 9<}j%_tCzwsmҚ5go>H2$s uRUQ틔_1cQϋzVQu[t7qEsg5ջDA2ǐC`5ۧa/KMr>`:BG-o:;tٚUӦH.r1"HC$<pkP( +\}\#Uӎuu] veܳWI4,Ȃ'Auu$V6MJ?;]~SO]]k6UYC#v;&|7:4-"@[NNln.6;OSFt(]Qc 8f j,Uwy[wK%GkdP <4$+#?ޥ;0U)$b >+4[3GcڽWvWE:G"D矖@6npqN5~='Gn z%WGFm䙬%" j,Qd + s^-uYi= ^[%NVz|#`y`C܈6xyb+_%rp=>_NtB=9ukZ ym.e, vݿ̍]? RzMG^}$KS~}Wd%!YH#Ÿa(\ ?DV6qё$x( !nA<dr}4gnBAf*4VL C/>Ozut! J<`( 9YA\8N?N1"D}+`}zGe]=ۙe?\%-L4cP( @()`P (3G5דT$Tjiab0yص G2(7)U ernkj:nZZu,2'P~%TH f | s} %-u_zK,uN}C~bеYMwK!LI ]72*_pEMb_]3zLBV2ONYO׳e%cdHyHTxqH$-hq#lQG$XQm\qҨ\Xͻm{[3<;Q f3<ԢdTE}*"<9/m3IP FUd`I|l1v-ř WkFN $9H dTeI$vGyB$dj2pZ4z--1eo|e7]D0&Foܙ{TlO܉2Y^v2Ŝ&{aYqڬ{Q>}1.;_kICgpa'w,±Bk<4:RӮW=W+rx8{\g<3?JS\@9I@ 椢Y)@UT*@([@UTh P @(@(6i $r3qZլ@(U@TP @( < ɩEhdQCP 1 @0(lPP @( 0(lPX2URKJJP %: @P@( tJ\A yZ@Pؠ0*~fndå]Z .Yoe[y `]bF*rzQܵ~U_>1ti>}{ZXclQ\^]Am-&d줏۱TrEkcFF6z;QS_Gish/۳^ݴ<=CgȸX/vS?=G}+VT̢(ыKz3-hO.ZLՕL#ң9)C߄T|?\Q2#nG39,͵bK8oǃY,Z1e1qYu\H ݵTqDK5O˹0MPtyE,y }MG#"X?9 Չ7 )<ٓf63mqRU.*P0_AbBQhwzEYͧ\wIooq27fiT3,R`+wCkuMܬUܗXPI_]FQY@FG56(`CfJ@(K,*U6cx ^1 Y+@Vl ,*)`P` @utlK^i AmB'xrRJ)WIWC'ϧ4~kr.Ү]Vx$܈ِq|Y¡ao "-8An~.9gi>NTm8 !73!##hU6cL?4L\r=,͎sǚ0O8.84rdVqj`u O$VDI $X|̨́BPOs۷ʉ!Y[Wi #2T#8Sו7UaC_j .F2O+4 DH8{*7ƌeWh~Zn鞣.^=I6мiY\S}IbVn c'O־*qIKwYxɧPӉՍŢ\!'B7,bRviuPս:U؟r# `}kHpp }3UӬ9v#h4`zR?/rɬ1 @( Pj_>j] P @P @($TLFd @(U@R#zGtPq&jQ 6APee#M͹nzk-˵?ˊܽ7^ޮ[\Z ;8좷a"$+aJ},۠>j9m ry!O:j#N ֭ pC %@B6bı6?褖Վ9y;p/3O5\9ij'D(;G`WGOFۮn5u =_GC#{6+w&h0BwnJۚ ꭬<4O>.kZeĺ.Wɶhg6VGAO5G^MZ5[}g-E]Ȋa w!]cW78F7kjϹhS'03jFYvRQyozQ ۔trc>z;ű}g~ݬ$I3ȍ.9Sc96|﨧g,PP 8y5-h2N Mm;-R&YB7d qǏfIX!W[m9MDt7Dn` fl*7sRUE XEaݿ6fV]~@'7SmRό$xv䓓ZLrj]I AeokookڵRՖ(@(@(P XV)P QP @((s<.i-dPءD6(`P Cf:%Le"U;EJJ@( t@cP( tP @(P d1 @(2P 0c@(` @+`P @(` C:P @(QPEs-B8&WO}ጀ)PSg))&.gjʖ-$e*ѕ]SiKLNkQPMݍ[b1,bq G*'JiPPء@*>藥>uMJY dy@\pǶ  xޥni~֖9VvqV%oka70] K .StW3[lH܊;n-c4M[RKI|.KT}[KW:k׺VJnFΟ[\V]bF[KF|D.cm(^sm:s]Ҽ*-]W_XgqO zC$!]n%uV2m,J1|j i>>:g"}vV;.$kmR5Ē1 ?]5˫ww넒WJ#R{πI9|Fqq_M3ż7x*sK\gٮB}2c}{f7-n|XnQ%Q26cZ2KIw# Tɢ'@F1֨FwE!FCaXdr$p{j2[#] jQ(+VP~]%#!Abϱ?AYY Z5$;On+Gf0,''}~j"MPb s|]vnrΠKǓ*7d35 06Z )%@͐ C+.ڭnG/lřZ) ȥyrU0'm4:\<<-ƙ+6R $ ֖`ܒI]eן4,Z OSN~ZtK=>ЍvךQX~̭o33'rg7lw6".5%VmvKo8sQoOM=F]fl;R)^Vg#rU3[ уRYesܪ]x>uWƛOi+60ʮTJAMz!5$[X CbP @(P(0Wugr4G OyQϽk/MBq)z1`TN@U@RXV(@( ՗˵S+G^ՔhIin6O%QDLwl؛w( sXQnU۾~͒Ky<\OowMiys`l[_в8a$_2~"~ey7>үu鵻k[[U/M=[`@4Takowbv-5wJTk?eT[tX_ZuVSkZzU͕sp*fF8jT;`!%Cjj(8j='oc~V;X̠_~{{kʳ$6ץtn^7 q3[v'|zU,935xSSAHI9?>W̜Zɡ@cP %0(lPP @+`U@U2ŰTTd@d3P @( [%XTYYsޛs11JTC~-if[8ಊc;G7H O*'gM͐GF)긴j(HaDF 2+=O4j tH kh̖^|< 2AP"b8sjN\IlM۬vwX[4 x?⺧ui*+J P 0)`Pؠ HjEJ6d P @c2P :@(P @(@UP @d@(l@d1 @*P*XVP @d1 @(Vj>[h=@Jy[lr~`r@n ʊƺ"yXA`Zyr|&H Ē_ͷ#'N;8B ;;Ѻ9 dBchoY0lEoofǿִic v'k-P-֗cmcO("A)>Kdl)rUauKR}'xH-MYաxkngM+iǜUJqj.N4ױS=U}?-.4BKR>ܰدb( .Xm!y3,<$}>ߧ%='P6  CH]ˈՙq@/rJ\&ook%^];3+>?ZI&iA܎5vaAP3y8X $cv"iؖUWA~9(UXtK_^v]'&릴H. گLRkyc2\9]X)(0H N=RgV۲MMu1x :Rw(Rp$`6p}$M9l.O0dYT2\CASi`kž(٥iVfWu»Ea*rŘGISmvIv_V̮ܟ h#yvZ*1,ҋE#Bp{X=Cg+ .K{s5h >5[E9oU5~Fxؗq50g/5/V( 'KxcT߃r叾+PUmA2ҺVu3ڼzOQZm^"c(Q#3cԤk/}fsjܛ0[11D"&P@qq%yEv4 ͌}tF6qO#W$JȎV\G5Y+0(l@+P [P(@(P + P UF` @(P @(l P WkܣyS[0ѧ k"éOf7ʟUBXq\}Lմ* GH_LI;$vS/O FotjX|j6ݣJ*h亷h.(FʹAl63+ [uO R0k5:MN`Lb$N$.dXxRBFS\m^alc;3ˆC8TۆSc)4WnjF54keH hK" `p21~zhwCFCokp0 ;nçF=!PcN.6坓Wǔ~rojt.kFII 3bdmsV=uwQ5~:Ů[d}nL3,VHd " O~򼦭GtZLH49vG 2v- .ٛJ!켱(?09ipS%\[5&sCp A0s2մꚤGʀO?<<$y1?\:gw73ۃ͟j6~Ŧs3lөM1^$1x5ݖ]Qf:)u]Twp8nl5 誎-wpY5!Uq^9ʒ+n#5Vy|cZI$shbYH-J>vwĪÒ(T/NoٚK,1jc%)NJˁwk9s2>NNNGh+p3k4K4qd#珽՘]+[y/$3Ǐ0B+h P F@(Y@TeѹC Q64Օ8޵~9>MF!PP Vg@>#h PР@(6(P( tP @(J@( t@( t@c2P J:@*X@P @(P P @(Vh ;:*^kϨ<ѭQi$, ۃqYbܝ*˺%YsZ}sz\_[KylK昰K,Y1039JCUTTRu'/_^&t7L -",'ɮPx`PJ*@}ͱMknn5|cl ݭQ'|?j7L5Vjw 9#w8Zr(H.&g |  9eyc4G;%iشkYFAWSʐsXiK - < ;:YҮ&i ǾT3RD%YOΞS|c\\FG2ŜSxfl/H:-@8 `^VI"0.v Wy)V/_}N<ҴzT..ozvsa=}d")%Uʫۻ'ڮ}̿cB-.3hs'S!{(^6Bvb17u^fx6"[m^[$lb;IaeK0ݵ:q< ֌Ս}{q6df[i&vA;PP77x|8Ź$.hBw̼Zn!B!Pm}qqqw5'u_$g շp?1GޛOZ\[ӓ^Xbٛ3&] ϵPgpKII54gʼ͑H.>7Kh6(wm fߊ^jU }/W}ًvw>fڹڬ9EWKg^?)+ Jc} SY6s^E;nMSy}ΨzOT&YZEu$q.MM .uF1pO/n0].o1nӶ9`7w_RYxc^F-&_׸GrBUu8(79ausFɒ'l#^v\FOnv:GpCǹЍ @3Cr^ҍrpv}APtrMZWSʛW.r z!Bni>db2MbP @c@(` @*` mځJ**%1 @(@(P @( Xm4Kttk̛ 9`fPB.A XҗEn^u4qFm!@c8d5Z+LV46e$޾Mhf-+08ߚl7rN#aǟ~U1•ڥ1#ʓVF3 h R/lHd`AP7ކ 9qs@{fSmO_kWSjWI[֕vhC9'uӜSqMRk|>yTvVbֽ"]dtΫqsaoӗ4uAkrΨ%Wٝb1>=r <щ'<4oæ<:wZfE@(l@(` (l(F@(P @(l P(@( `V@X`UXde(cayu%o?ߔjN\mۋ>Dc{bv?.p?].MUЯK:[ү. -iba~eFf3qW5"Rٺ{_X^V֝bzmtn;ky" /X,?8 dh5[WzԹJ9mZvĒ>!7]le|A ېyc돥zmeqp4mZK7kseovVnpVŵ ݿ6' wϳ*Xdu}g9#g]3i72!`$(n8Yw*:[Dv9,m

~f/)qqãЭ7JYm_esl :έq-[[x'X0mUpp~P;N [m$}uS55$i8cX\QF0ގtHW-?-k*i)o?Oo e0˾Ns&KqR\7WnYmRY)!DkfxS,+>/!|I. 0MJK%'bYXIr0RW,೽VYcR9d;(rԛj^/>3#]F;][wD71%xۿvٍ殛sjnuWSāp8(VNMcKB: /WovVAzۏe6=vd.Ά]@],͢iŧ)`0E 'LjEV5N0NOfVXߜ3)}tg&{nC3*=QTm*[[y""^Q"Wj0qi~xT}kNFN%Mpoajri:=>f,c6rG]7n4 d<avrdGR! Rɳ-VUܝϑ9Wz^=c:἖ >=2ܛxSm!,jNo,K3$ןGj t_>e6˖C-"YwVMfk ]jeX$W)IF*8R ⭂1M@v-hn,B)rXȲTEpqi`y;rW\;<0]T&w@1N@P Yh PP @(` @F}h@PءCbP+NHjq4( [6( CP @d1 %1 %:%@(l@(PX2U@(@(:@(P +P @+`VtJ+PpA}q۸xa@ v$n,B󧓜-]_^hmsOM;\6 FrU=Mu֋|ZZdGk-BG[ Yy!Gf$F#;P@ٛbyU߹+c3<|SZc,(hSoԳ+!XxQe\ϗ.9M`$#5X;:Z{&4l'.+F X2r89&o81}6M6 rlfV* }>TK[y)5WK*(3cv34w`AnR|ց-k YTM88sslUVl&2sGj>.U݀F1xσ5lنK5t&Ddpr~ߌ<~tkլ"3mNl)*6iNXubQuL帗24SF /pcR˗lj[pJs=e%WnqgL6 $\ckUrVT2r c5->K>Z\Ϭ_K5ڪBnna0mI2ĶV۶Cp3Խ4^i6$sڭtY9vZk٥BZYԢ|WuwImM8-_N{~"]*:bPV;Y!om<ѴP [TӣoWmJ[) ZuM86𣓄Vn9GJ;.mdw~7d( wێ1>շw+:Qz9@ 2v761xOWgF{oLtSONaOy`Kca̝!6+FmTs!00xzo?/3h ڀ$/*xj͕SJBԬ]z1e;g4@wF=OzQ(rɍ8ɠhҁ^<Lb4S?/ր8F>o餶Ѭ1eppJsY#5RVʙrʖv#TE,(IurI[*!ohC)P9݌ >};|5 2ֵf4|ܯ{q#g[MZN'/ov9wsVFo<R}kg4XRu#zV>t { ,`qb~bq8є`۲{"(%id `AڏK Da0Mi J8{[ Nq>Skۚn/eFZ2ő++`T ԓ_6_~EQ.>zܜ8@bFdYP ^i]y^k]oqcunіE[{T"PV)#My\84o_G^C*60@a]c}_hY^X/r, v P rA>5+wU,uO]]KvpXYAhHsy' Mƛr~]gI/<4*у @r*8K)zU{tΝ~#qi3(d1ȻІ̌3RTk3ZOTkM!ef۔9*F=QQ Z#V>&M`1Y6DAf"YV=6b779 H2k2QO.&f+oJ2~!8 |^gwQg/ntkMk43!22859IwVVjΥpyy~AHU]QV[8[>shh)`9֣c /;r+Ay ߚJCo5NÁf(6R7nQ3njV(YT pqj"=S1=[>pIqkiꈍ \9{$Y 0,cS$hZP'@VP @(d @((P @(lP 1ْ2U0( R r@(`PO>+) ֌@(l@(P @(`P :%:%P @( @( :@(2P PlP P(P @(` @(`sHLt;Qk=VY5cL:K$0*" :W=n5O^r|IGê\vP"5Hq k=|v^΍E{&ՌeK1WvBq.A\ݻk+mUO۳v6sfnY%s|XqnThni#cmj3V%AO93FB͝JWndT)p2( 3s4@$z:>Ꮵ3  74 ҕ*'䓊@KML05J ۖ1ck6$N-5-$Y0=|h$4 r~kԁndT!*,@I)P4 0sF)V‚| w{Y0b@{p a5AoA5,©3K5Q?kp2!7?yYuF{p~f*>xdgZݎ!D{,(lzqt;wtwtD-mđƂe Uñb#*/}VMk)>$#id~7si hb{FwIu~kx#GgJ[/Qs6g&lEVG|vm;x]ύHq^|~*uruA9.Cr`sϱqͻ?ӎ~#=z:ݎastU-3| Xgg1#r6Żi{n_e7"x$x/{ ŸHq 0!vs>Y]Q. +t.dciK;4hgImi$^'.~^_U8=N[W$TK)g[@JŪO4̳O"=,qB$2M328އN֧-F2Ԓڤw?%jfm/MUY; hĀ~w8 AUW~6s~eS0*:@+P @(i%PcJ@(0( KX(RP 2P :6}s-g*Ooq9YXr> bzjkk}][su]+Os;#+U$ MFRocy_F"r|cAn0Hm!%YG>3un<>W<꟒5C^GE)xgl;b>In0ZQ}nG }Dc@h'?QQ;l ғR6J*(!?|Cf7CѢ8 5l6 {y̶bzuY켺x{+"w uy5W_}XLדs!*bFBO?N=m,R6cT@(2WN ~hb|ZM Vv%Yh 6(`P  Pd֝\P @(lP 5AP @(TZ263|ttFM=a<:>z zcHuǺ. 46<fc"$0^g SMU5#}GҺޝog:uy$N]w`r#kܵIUY:20 +@P ނ.קzK}`׊KO?v{$B>`Ѧp0bN*3v韨;ך5,VOokš!*?oVњNMQ Kgomw~%A&͘큻fۻ?Վ*nWx|Fxl'.b23־)OʨI#}t+jAػm\ FҮc)A3Rռ{WXgmĤƦch1"o|9 }Ps#Wd\y#&a9FZqh&DX3Bѫ8%=`w,, ͂2*-B @(KATVZ]՛HjёCbP C CbPؠ1 @d@UP @( @( @c2P2P 2P@c@( @( [P @(P P|W9@麜so+ ]450FiZZ͞uY`m%-͝rذĭKˬW*Ճl5[I kmm$.n6x"Q}(MzwiZ SONNItۙl+[o`]xyc(풺csFo *KV$KyYnOibe OzJM9Zy8&YU*Ta@VPT S~lqGjpF*65r[j6 FnPgNA+A~Ah_h lq$*UK IY ~(̋*66{;6.bGd@;W3޹<)6~~ݨ笺CӧյedOvchDTVnP|єJ6+t߻[gtWt6%39$n(Ks .팪NyuwJ.Ϧl zoP; byl_;+/IMokc]<#!D3gu7g# 98ۜ⭦iՖ4&_Ḏif6B? wP"fqZnUUKOUIw̻l7Ϩ]i}37W᭭KONֺiW|X+S-h定z2pټp呑s3Cv8H̲"3p)嚣v)6q,W"/aiżA2d͹acky AUa$֚ܩ5VT6k' 2+gK+kYim[Qb$[ЩY=ł&f7gϲRpqI-o7tnS[\^46GPs$7"EӣI&$Xd#nche\8` # J MM(*f;_O8,0XgJIPKk .!]V(""@Ĩ܍HxQɵMWw{`F5~k:C"G:%2HP~as&#贞|ai>qw4T~pyY`T6cVXR QX >k=ȈȊ\@KTX pdU+, 0(lP @(`P <׽5:xE.:5^b,"S8u JHԂlBD1ctԢZN7k+0ʣ%mܝF䔏]Buf~erzzwBy VaZKy1i6 *OCѸj-(W^|n/[Ѵ>oT̉ Zjb.@J,;]#JPTkկ+s'Ci:gҬmRr5 kN*))e+ +0P cԞRݹ_Ԝ ].T4]"ݵ]cXzm7ydHw #8Ǯ .O>v:B,GR$}Fc|e s.q?.(n¬{*@k F$J&H>k1Wa7X6(`RP$^HGj)F/o5g>i d>H@(E]4'o͐sȪ稆뒇TfefS2qKl 8<(YY}?ZU\]iDk)5;\< wܛMO5潽UflOJNӃH#L:WmoQnn;5 C#xET;0LhfTz1K swL󚄺.۫GdZ L,p#oͿkKQ\ndg ]֛!sn6E!5O^\)YX8MNpAR: ^%1EphuZ3F #))S3Tp@T9 kj| 156UgwȬ%T+@VZVl X*@(mP @(lPhP P Cb@dP @c@UP %^)B :%1Ԡd tJ2P @( tP @d0(P 1 XP @(` @(+â3^u 5t}麜:OK43i[b񂢼DzMgAMe5M7]I|O$R 8'>x^ʳ6.Ṍ|eoy %$}O$>sDe蚗SGݥ2K{H^iFG $U,('Z[K"Vq%2Gj1#,SfvX cOu+?ld>JDžfB2q)m0YhbIW>QWiؼřI<~T ƿu[Cl^_@[Q${dpga *V;C.=H6j] p ,qs%Ie),[*VhZAs,^?`ď*"ȬhͪRPvڛIO=VW9cl4&. 1wIHY†?^B(vړ,Y&,%p%D#/lXI4ժvwh[j714onݩ#X91uȳ2\w#dbIeC8xRCK'Ut h4ծ-33GQ]hʈ)fJqjIo, $R:F6X9 d[Kr϶WDhpHj:|m{R@Ф_ wX\w.RVgG'q68۱!_$c,J^ѤwuN.mR돫5ņ[dʰF$o߶#fa.Wzx\cxUk4%I;wezϫGI^AyH[W|vD av~U9KmSÓ3ݖ:^߉mt{c6s&\ *H4(H3@ś8UjvZUUr:ڶ|\5+sǼcH9i'någJLtP P @+V @h$w> rqMG܍X|3gU<0U tVl X(a,@(2P ;nkqa2**D1֒60n8Tg&Cڀ怟MJ0 # ?ޠ 7|b[,Qބ6DGrcۑǽf, {Sl',}x%U~~uZEGB # @ꘘF}ۓeIaYs~;f$1M-v3m6?xjNî?RYq?rMiּm>8h3K6*@d1ZR0+`VZ6cJCT`Uv/GS fRH$ ,WXXieFRl RPlPCP @(VhEg+ kFTv  35=/۩a0U^6(0R#55RI kږMv]v ż6G [m!U=EIhzYk=떃=_Mjn/&֮ :.AH#hcgB(D{C96/Sϩ;uqUvU#>:wD-OW85i lNA):BiJ_㊕nǻ.yGѿRz3}WRa֦ 33\YrIƒR#yt_i9Qe]5-J[i^ԏ؉kMZKmn",o2% ̢]4Ȓhھ7MQ[]m^ƥ+\1Qj7LbGz˘ K2M'FDrZF7;҅M)Efwᔆ?OG[ZmJQj櫅nWMDZMi5B_ҽf} v8 r}GHBۼcţDݶ0# ̿ :UKnF[>(@m[3X$6]Чfgn|gˢقY&mk[ bH ;Wn1?jm[7Q" 6`9ߜ 5WykUd#qE-UN#;<]gkD-9 $J (6-UeP kxํacFLYG$bSl9{lDn1ٴ3 *p1*s} wyyֹ__Yj-}@:[\R0at]ː e?+NT\C-$i,F$C mAo"{V:\֌N ]i.0cvVr1T84" #րg9s r6`=7Ju5MKw-a%՜=@LV`OfX?(XFtZx>:=Ϛ v 8#Z@IEAflٸc{ jDA7[u ld?jE< T^\iݙ;0xa(SGg';6n4Xt13m捖@!Y^HgTdSZ[kmExA<,h"!X!v&@AoVmr/^K:$:NQmc5h#BIa'$ :(A_L܄{Kƴڝ픗P-3:+$n'<Ю~}EtIyg{ZNïg/{ K֑t+lL;6S zSi]7yV}k=a龜k-Fk4KI׻$E[W){a.>,w.-&w쟉cqi]E˨Z֧u{}ߦ5k*Ycv\ʌIhF^E瞌%N1IF;KMS^w?U=Ю:?m Xil4y. bܦ>܎щOt{4vXxS3&_}(P dQ@(`P :@()`P [@VP [Cg將T_tĹNpdE|6ːi9.Iu-OTu꾧uO5ΜMEER; n3NNPSvwf<V$d1\[#ex$}3g{F7gh^N;!ID1Td>@59۷TWFy/gFр1۔i -U>Xp*7݋=6})c0R)…H!c+$fRk++=ԖyyBǧ*. 8!< nS(Ic}McPh PP P: |ַilw,7w xnK75yIs=ܲMH-jTuU ?ֺ 9:.& >@ =k!< 9Eb>};^jTQw맩U.h=kyyZŧ6sn1u-[^;Ɔ7 o/|FՎo?V x$;8W##޽ '4jsH?' |Qƈ`3QQ5gDh 9?sF?4QMDݍYK se!0b &U_-++46[+PswJHt.%ҦWK{mR2H {jHV`2UX+J[}ڻsG)A=^E[G%}Ibʪ\SL-9 ^yi5oc=.9Zͬ28pHjj^5G-L^<)xeArnjq>s*S@Kˌ{ۚ؂im&SrX`)##j:%QY`Qx}9{g^E4BKnMGm[g8>cU]#1F1p3^5K<+&1ϑ>i.n-剑ӽj2;9r"iJ<>[󌷎25..|[a .F><}}]kGON҂^B%WF9!9=RrFO%~\d=/+oQus{%JvcIj)AR#+WzUG8-giv G1mHGǎ}_MY6UۂAW=T;itd6"B63)ٿ;K/Ysʫm'#Gw}gP鮄eXE*2#-e2/rxe&%;-Jrer// eeI=Xuzzv-u550\Ak:W;ۤ\Ǻ@ M.umx,m(8WS6%'=G궷7W>ʫg$GpF4*( =}KxQ@+P @(V6U[@( Cf:, T*X, T X@P @+`CV4Iz8b;A#>7A#tޛoȫe c?zrC L /DDXs<sCVS>hdhlQ=JQZi5ŵ+(r đHdu`A 磭UqwMQA}@Pٍ#h`ۏv>>+ ٵh;|pZQ/kg۞7cxI:&dlߍsqqcuh`>E8Y%SIdM2X[pHQ<55cғtLYrO'8>( )IT028kMnڝ/ZsF;)Ѵ˖AR 6I JU RnZ@S&)" *Z|2R l 16( P 0c١Y(P @(@( @P2UP @( P P6n 7+Xn糴ex9UIHXr7?2s+sJIi)dYaK2=e_Nj,Q;ⶵ\%xCijdV(إrCn+"AT(j:jEg%TY¨QnT(޵] X;kͧK4Zq2<$ vEP[iKs+\_z$֔l+i$AZ*@+P XP @( d ~ ;A'$W75u5Q°f{BdS 0?e1YXN z1<Q9*9<3'8n2Dg*-Q TDё~՗uJյ wRIm$8ĩé^~:q\}ZZ쌊(MM)}qڒVHk C ] ךr(L@+)cԱD@P :%N`P  @cJR tP(P @( CbCPؠ@dPP :@(` @+`V@(Vl P @(K*rԍH9rHC\Fzk_ ]_ ]]a\HQˑ],wRym+Y}nvi=o,i+oQftr"ݸ,F3uW=OS-DRmLy}ӢU<Ӥuc ~eU(1\l7hpJ9Un 1nyx>-%4.~돱v&ktm6zծ?ꪢ^ e>dH a^yATye/n.=IZ Ӌ;#@N2s%5wmVgoz}&MK >6vrc <ӖmeYm `ȈWAnjNԜ*8]r→;\J5[netf0V$0 U6Eg]|j뷥R{U]||8Į֖Q%};a9UIbihm.%[Iْybxo$sҕMڻdG%1T-_kGoTL׽bGԮ9QKa!FeE@B >Uy&юݶvrnϟWb@(P @(l d:@(` @(, @?\ޥ+IDQ3`&m0+@VPҥUX J̭nPPۃNA?(9c6tӑx$d]\[%x5Q@NZ4<b(bdyn8 X p1sk-).][b-AЬKu]KI-4P.ap$NP)Ԛդݾ'cx8`+dծ{(9a$jORρnf?RO54M߿ґYlĩ$8"6n<F54t$kbJ#$;;%X.;G5nIT`3@lyx( 4p3>ՠi2~:|y~rxsn4}BM>6OmcѬ H9.+Ԏah{[AI#M$mnĩ w7lbrW-S|wAԖɘóPpkY)62r pF|<k)ٚ;ڛhO:X]K132KwlC#|3Ucm]]NICe~V>RIV$dT)H߭Zc5H>H.Iy*mFDTW?c?jɌiN]>VZё-5qaQZ`YTߖ oujRQ/^>Jb1nr1~ m[9UvP2 3GSjnRR[ 1BA ː}3x5[zK:phFL'i+!R'f>e\oRwJU|,ߌn;1Tq^rD[E63E'L\.l;3Yg$b2To/1R|sXȺ+J2l޺EV mz{jP O3WU5>ŝUrqY&·˓sӳiKk<,ͽ$ t%Zr?').}1%@wNWvfMMͼ$r&%1,ŎF@RX#iɮI'OQ:ӤwQUXG@?q)+REe%mtiVʶ bXlx37o-Qek.Y"ˠǦqey8BR»q0!nꅫͫӒk}v<,gn6~tE¸ڒPج@*+@P d5BS%P(`Pl@( t`TP @(l VA6+ P V+V`HRV4VE[ hP d( dwSs4RlV*X(i%t0((騍s$ug$FG+ 6rQX:{-Oz3Jtc,=#㤺x $@͓U%'Q\Ey:~ͺiI ro=;]ѶkzsuaԈӖ%#ǽtײ~#[Nqzw[AwQ-6"F$/r;߇qd',PoW{ yx>p1ۅKK@?#}CEkupfaC34m$U K~4Eev{a,R;K$O4|`ۑ&qõMv%뺂T/I- @%tpKcmCkJRm+n9>3x|^q89S#4q?2p5m% |al͹ݻ<8<3~߽=#ɎH85Ñ[rl<8fnʙ8 @f7NJ-3`$~$>6:xKmۧmC.o 7t7VnikI[~G!Cl*px G`N?_MȻ\'c!#Hl_jM._l_bXΒAnAYA!㝠cE{WF+T[Bİ^I>=5^^8rc{}VM % 2NXIuuaԿ z_o룐yp 5JKT]=힒}fFG<"?"hzF/d|E3i}O˨$/0!H^1 &ƊbeOJVe|KSʼ/spImE-ex cbn{yM,Q(f`Ψ9,I@g˼} 6ǣ59u& {WP[9>ոFgGm}qm:I?3RP;`dh9-20cx$T68>+5e+$h u (`T6(`QFJE[wSu5~%$1R|3"Gb +ipFa*@(`Rl [UKJYlԦUvPB`5kL5 d +`V%6( u( bD3&}jhEN3NJ6 m<9;-VAjP @)`Pؠ0(lP@(6(`P 0( @+`VP @(P Y+9⶞|qܲ 2Y&ᇃ\]>Y6@+goenKo *B]+z'qn*۪j]+s^pGu 6Pwi 9o%Փ Q?)3ԫ;,im9n"`f6nF=4Jpϒ7i Oy3m*8Uch"=W:AyfQ34s,l  Q2;T[ݕmTVivҝCa%iWZ|:ݐHx,Q28k>TϏ!sa-o'u G@a?38rvϒqkZMO8 ǹţ,ʲƪp761'siDfyx\ı;334LHI#nop66ub6NmiC~̬,K KJ4/,{x>MmHMepٮig/^WUlum\\\;Om9es.rZUUq\wi_t/PieUjm;yu$dDTOy]p]!BrqMZ~򋵣j=i),#E\6f $z֜  gfa0{sԚ\>Z?0Gcy%φiA*Bc거.^~SsԾZRK+ivvֺX0]۰wc bb39'a ݔҝFOg k2j>sm-պ19itNlWPXnNI딻t>p#"ܐ^[M#N;3n$I#gx,jxevӧOn]TqSX~$zG:WJ5o2`M9@omn{eo7[tM3@cVR( 4*VJJ@+, Q(co< Y*A VP& +HL4="oM:ܬrDcvpEtѓVOŧJ/\i? 㴎;Y .l1p6xwbv\g9u p~cڔ)叏jQhF O4 :@"΅vI7"m읹7*P)enܫT_uJ952a`PT#I R.w$?\N͟dn΄Q:~k{nSusvR4sƐjU +| 9Y*X!ܑmE?l^iv o5]vDndބw#.FFaXRR|a? 3F<GMZçrem61:,DamhX\c:r[O+=kFC0퀪3ws01q] YUAqjX;6ɾH87H%zw]T.ߛrNX9^} ɬinG"Jך֢q G͜bÌh"T(!aJY(lz~4Q/#ѵtdl| FF%V<#W&TV` V$C%tLȬ:̔P@cV@(( TdfE͊P @(OP )tK*z삵eNMgsR P +h*@]ac,N=B/cRsFN?J0j:P"{dPdU,cb'7O%G~3F1yEh*RMGul[G]Ovp%zF~)vQzzQӽ+vw.Cq]Kf&NJAif'so$Dϱ#Z$g#jQ3ftL$!Wi?0'83gjabe6^LdŤ$jUwW`S*?\i%,e_CZ@U j8+PР2P P0([:̔(m4.Vt=KxDB\!<PIHEVt#(vxF)B @(U@BQyi*5@Ul >k͑Z@UD @:@d*!Զ[^2buS*Qܸ_tP1%~cڡvZ ɩG?/kk&YwTyb">؊P b8삠6c2P @( P CPءCbP:VX @)`P @)`TnRh )P摕k@•h@@ x5Q&B;АG ^)h?o&=~x3 O|5Ծc5GմVqV 0FxB(%g^-Ŭ},IXtItuw|LL "Iv%D'f]T{nZs$IRO>?~y?gҡ+;ءU(D%Yq1+hRۑOIi.V܆V,p,BY%QFØễ S[WߒWw>6-scm|J[Ο*θDOMNJk?< <4v;)hGXc}-[2A99hpdA.evy![Z3e}dzªǒkZ}ã5oko,L;&xi$i pWm9JKԫ/54m;6= ,PS0`MHSqDN4;,dQGkx{wCݍUk#H"UO_8M<"vnM..e2af9;d+ V?aF:K4]ϧ/%@w!'lDpnFJ]D^/tm !ץG#iV4Wvs}Ԕ\G.cT=OֽҒf h@d:XP S UP @*+@V94R߀1V(Vs܂R V-w`U'D̊@F1](o 0wĈ7r<G51R2_t7 }Ez٣ t`b0=VfW^>԰\`< -eX2LO܌/ހUeP5)EǹՓVO,駴'=[eRnfr_uL]Iami{vmmmU6QbbM00,Gַ6JM+uK!yy-A#Fェ9LfOC4sw81[*1Ojʫ%d$r+4M2ַYl}>ؤF$ DS%f,T眡I߷z|_n_PkW̻RiI3uD B(?AHŤe/fY=D+c/&-mY6=b Õ2C6'6p۶m[殱JVx@r~WbnTiP|V"87,b_`Qߎ_f٪8t {5*=,zT+R1|ۣ<`K⵹#a$hv>2kR=IٰIpj2>դkiU8;H?(͝d @( \x2&-Y4c@( u(^+P X@eaV1dX(@P @+`VSoD`EJ))(eEu;[Cq1ExHCX@vo8_kc?sEΣiل' D䑒H+&L +i=n]E$_iMir"lnUTuTDn^|4ܷ5պߋo5|"C#cǐzz=?Hףg y&F҄ `3N\%]vy^OG:L}KuAmb. bv W{G^^Rn Z[]}XIw& x7ԟ0\ czt5%85$`Aj=~ѶHXlr2U)"UILGZGz3>u)"P-,ʱaxljxUFRTIdu"Ö"f pʸr|?V-{Rt~yuMJ$T_XY e8rQ'OT%:VIcHM?0bc9сY]47PQ8m4PZ6ujqBT-`ĸ0@YNf=1yoF~q/*xﴔ|+l줽X;+vVgcu$;HʹB9Q _Eץ/}6s En,orw4q2v&AFo IIG<]מ>ඌ%ΗGM-m>B"Ʊ;wr:He4XV&jJIV{2ejSCE]FRD9 1rޟj掎ku`_hN օջHWFӖ$bΤ,w^O S@:RM6{UQ$Ф]"7Q;q,7A7i+IWu_Z~KGҽ6mSKMݲGj'՝]77ImbPDP"B|v>zi3\Wc[Ozib麬Gj6my[$qG2<j84x;N#rY9/Qvt|+WL|Jmfɬ 1ؠ(P 0*@(l @( *q re+<F)@UH R/!p7irF{mB=Ha+)  z;f[53@#>xuߦBҍ2Y.JM+aꮬFrS-o5uQbcj />(K0#>E ;v}&vȑw;ʐ2]j\H_&rU񟹳q:WT}~Ks>Kɵn&Ic,;d/'gzVmQ&e8Ybg,c]vn\(Lm7e5_{˯͆ʞY ;kw;Y#nT8lG3RQk)K}OMzKyq"FB,"{4fm^nt)Wߋ9Vi+[i~ZXC,Лf/wxE8GʖU%K) ]YpMmڵ6>z9`>\c8e:m2 hlğW9MGJ-6NEr缚QTzI0#HG<}aa}~I3y<1c##g**9РP Z_5ԌJ١V1 Sd tVP @(P +@XT l ]VP @dZtv-+JRvm$l*Nxk#M%zӭQm]Hn?V"I-0aіbVm̪y ͵w0[h) ?݌P\/o##' plɭ:R&V|V !\7b { ch vbKڔJ15?(Q2C0n,YqQ[ e>PN ޅq o6!,UH3XG|Bv"ۣ)0C˹fL 05m}~陙{mm,䑘$}-*[In^Wz:wn\j99:_E@U(Ȧ5 T@(lQ@*P*>*ћ-JD1ؠɫ`Zd6RI=n.T[Βa$I1ے Tjo:~ P ӎmn7zZ\Lv#ffprUG9S~-۬/ .Ԯu!{-#`.7p?9nFխ蹵s[}z\JK3d*~Q} *YQ( \dn=T vnvd>q9mViwق+e-w2VhP @(T@\}!5ߚ&x+CBT XT(ϱM(ݎ($I[G3]̓ ѣ%PqȥFꛬj P(P C1 X` @(P @+, [ɁKU:, n gXr )M.]ڵP yz S s]45w"4~^>ong{D'G"iFnqCI}Jw.۽}dĎRS @:d6`|ru/ud4F !X4Mn?pv+O|j%Jw^kr/I Y&#rY~cQUΦc(}_L<24He@Ϛ%fY1ٶm3F-`y؛Oa~Lգ$G'p9}:?b+~QG@c.rNY񹽋1}}b3&.kGeoeX!ᶋ{p7; Sެ>?_DԻIm2ڑ%@ѱVG2V UIM).|~&*7l6x/QkIn״cRro'#gKsm*܍gwnl`_#ʶF3suJ}kPk= ۂ۸CQ AWnO:}ca5Z[ΡLyWR玾ݥXinko5à5M7NN-a:+gxIg S04cetS/nV^v̖e[UAѶz/\jVփRT]#Ev ei.!VkgVSYKJ5}.[q**uyV,oQu 7:hqt@CvNQ#Cq~mIicߦ(\|yehvwҢ &hu$; 5$E&Y_o^RrӸƽ9iMKVM:u-˝6Eʹ4<Y7ޒ'UFWŽ,%J.+SY-y5.պoOX"d8{w3fmvC7I]FOcnk=q"Һr if^ak(8SYWIf]5K}R7{{>S=ݴ[ H$R:`Dq }ˊRm*Ww+k'w[EӧM˻;MBUMė")omnUúGɼF{yo7Si 6w9JҮ]WO4nRQeyYX,rKI$M}(AAR]G>թ`h@(((K*n(, @(( QYjU 0( Ŧfl @(F !AV?Q?чz+"2Hdqӊ·n1TNcڪDlflRUI¯?aO"2k`]Ñ|Y{, >VYѼrPgbrMZ) n/vۻ@$)AH N|wuXuZ\nd ]#HWq䚚pؒ!4k>2=ecrdBZT;{&Ic/=Rݘec|*:MS|q?y<0]f}Yɢ#en"v*`Cq^үkKd{bIiY%3Y&}ew`ıݴ0ih((ᶛ τ,>ԭ=;m P4ZCXiGITx?ݚ8U@($C%W&:#BEd1 @(` @(@ZU@U`V@N@+4h `QXKDP)`P [J$`P ZH @UP@Z-UC'|A9QTٺWcc+!±HhѨ2ܼnBf+P63q$4Q`*|[Y~b>&N82c?c 7?8lW|`mo!F١9pW CD4**x LnBςQ'`&IXiDISGhP6(` *dhn#C208J*Jqz-kj7VڝEW.Wx'9ukwgj?rnăqR @( !;px[YL FP ˏp+@R` @( dV& `V V( {T24*Pdg+T @(P %P @cP @+P @(P @(fYYn +-X@TUd a+&`b'5 0H]̕##N%kT}Nֺ\-}Zh,Ӥ22PF >IVO$S^t6"fKdh ԇ @Amrm=_tY\u[6I6]3?ՖemN[$lcⷶ#+GrV)$FTrk g"c}7)nb6Đ:ڍ9ՓT}z4{H/-YD7ؑQʇ"m47,9Y n\a$ӌI`2 yIZChֺ[j6tat9Ԙe@eJ3/j~5_(R$ ]Ux5k?6^\m7|~Zo(gN^&>_]]GnCݕɒ ᏶+e |mNj*q ~dvm׵W^tsǩ= uqu o'Z3JN{8"PM@]r, el6;mGo5h4OG=>{}B![܋meK^#ߌs^Rԕ1kۮwmW<С>ԣ{B̶VڂwY#"I6Ls+FEC>O]xk>dRY]uҚIz4}i%=fJ;K졗7P!R$: WI^̠IO0*K6\TchU(VP P @(Z@(l P ́YmQU*6e&hX VM "5ӓ$`Tq0+KNlWU:mse%&X&H>GT+6̓$RXX`?v{Gr۞.ΕME4v qq[N4L{RK.>}c1MNi5tu&a5 Kh˭C@D2QپiSmR!ۚ c؂3qh Ya>_jf-.t^/KlKhʖ TB{V+sD\x\?lq[ ۶|sV: ۟P/,5='Lx..ĺVQH PLK$)RF@?Stݿʯ堣ezӣ=itMYaYR{;VUd?BeA:7Xhtz[mMm>sth:xDm1d"\rUʹ9v%\'EgY|~3  ~(ќʮϹAb+c9};G1rK4 팝v Botݾ{wJOR:.:WK{wA,2ctaH;X+uW R  *-nk!a53ƒv%HS 6q3NunKVXP U@*X*R V`V, Y*n+], FP(95Tz0+`P b  eԟtS5ݳZLfF >pG"eY j:Qhr0Rv-zaz?iQmQ!Tx: ßoڢrTeG45M8ǚ!BXN( ݬh {؎۞*krb$,9[qBw HmHV%9? PѰdNJMˁFWxIay Yp{XO˧ޡ(]55hɤT"@*4d }ZYr0䂫T Y6w#\M<&{UWb0ʐ %s5|eq\tSvW3DUTd8Ͼ2kw2kT CPؠ#q#nN8rx,TAF 6{`&6",2vМ3995IVy4_UL(!cV!dܮ f3n)XVaG$sɮPeIP KP @(k O YR*R@Iyݥ%N܏!"xѢO,M)p#YnW7ϵ"5|%UQeRgN./;weY<-3 g")ySh rGs/Ҥrޝ{o6uo4BWe׾?LP#XRI'K,&[:ZY[NMJ8@5ҀR1*mdMuMZL =UȒ 2ɅD%=C@Z0d6OVzj{]oK䩚mђ3UVcdpX ݌ǁ+w!h\295My2j8lm%"Xj"Q ÒҴeЮgh\͜p¢+dy 5FK`.#}"T c8'yp( j !#Z؂Ɍ[}ZFսPղFG";+`mVJ܄Rf᫾٠_5֭8-޲@TzYeFG5Qf [Udx#9;=UuKi,FٲgMm>~w ?NYwWxݜCRmNQ(`if1A%vҎȥ]_[5#}rUHhǿ>Oް KӺ" DC 7?[⢍rexTND;l9ҥ捞RK=V B;m\Ǝa86#сwN*IƕS~ z:wLh=1՚N]Z-2Z]SiG?vA](u]6^I}Ukm}Kn^PKF6n^tw뚕޸ Ht/fd22QEQz㷑GG0pU~+LvG4fY,` "fY-˼ȑ]vFv0ݫ®0_&M:Z.-7Pm%l_5+{)آHQpGUV A/Y틌\x2r|魦-%C |'"=I`rFMz$`L2 suOh țeiX]՟t΃G>Lh.ʑ4Hvɕeo2/˅ӫ[6*~3nn7J?EOQ/Ci=}ҖV]7k >]Yb*,Yӻ JcVxÅvkQJIpJ]ڦY,}VNQcmtlF(q<Wu,RE~)mO;w}ʢ,e6r}W}3Tuo2캚n X-#&kx`wbdY>d,#G bvL'cRIOC?6Gu>kV[L-a9ṚkW"hȡ9[u?Nu$V;W%qϩ-،6=kŦ{'XͨZ/K]Xܛ`W-̉mc;{]gCk"J$^%-rvi( sD5OKcf[-qan۳o4Ȏ<;*]B1}P撧vqx$m_fB,َT l P @(e*4( (Z*@(V ɩi+-(\oXIwk?S@QGJ-]LAjVv@P Ú`VT/u܊^4`]_qd{Rk'ܵNu NxL7Uā .k$m5jXڍUrxR+[iEQ vfc,s[6tz ͦ8U.KDVa#;$mXFt,<.iz[W$eV)0wEhZFu𷗱XDc + hgD$HFn &_LZW 0dc5l?CNG ֔ kn$wg2I$,$IcK,NT}5les0>|ղY |"\$9. V*K:lT 'FkpF]Dl$]Nq5 e&$p@ⰲDa}3p@'jf($+oX>( vc$pIV8h oQ+tK3n(? d1ldh y$~aq Fx5e7H,3uDAhw?Qtibtyy]Nou# u;k[N?x)&_C:F2!~gpQD1M(`Pآ0(>4}/Ru[2T֑$ U+䱄nHPA5Uy#G_hcD"ehWi+%@ZZ]FaSSee@2V0(k+5ETQ^mW2 P @+-Z@P @(FT Ϸ7sTFP V6cSs⌔I 84x2V+`P (P @+P @((R@P PSO Toa@(j#?Z9y"2FԷc=3]YKNbA {8qwmBR69F/F*zD,ԕ11+2 AebxȯFgsĪg>xZ!z^gCɑʨ>sQ\EŌ]xaOt?XCfRU +|%}.Uih:-BGak?QNou{i'bAPv>gU`YoK)jZU\SǾpI`T7l&Yc|j`L柤.$I42%~]@#=>n:wԥo=LV2ES猃?zd܁ $ː'>MH3nPvl0ҋwlh3+)PK/F;ҹ?/Wnlx5z/UI՞ycfTgO !a&SIU`ќ+)9Q5[uqtzm O^Oq5[," JDd,$ s՜RQJkm)Fރv_I07hv\f# lʩ]HI^qk"GN~ *ˢzNѯ`G;żI ܒ߅T Ӝ4n;|lyXqyK(?t([鮝m,:F^*eV"Ki &>⺂+Ej/['U5מew&}OgN&[SNEA;I"̑쑩o&K%؛٥^jw2j}ܻ7сʣf- fb|1vjVo5ۍoYKɤV,K#wf7H9'קKJ:1PD<~94SsPK9C,*ƲfU*1_seU˗oDVcw -ۓMyNqh )󰍈 d 2ʶPdx4@#m Y$Է54ΞXFEeM&Lٖ< X V5{޾9KsZp9Ƒ;r#*Drpr}ZZR;x>>TLtMtk_JBtK9 Dv(};nY/ӍZί.K6_U}zYԐYjMHFL#n4X\HHIB?>CҗڭSQNM.#Ky-{{)$l<=~;9ʞ<}6bqPF,a1 ۔W'5pxj2P{h[UG #FFŝdm 7e3n0͸lP:1/k 1jNVg7q+X @)tvP*]yP @(P Y*th )`V[)`QT\P$R4Cj`d5]o&Js7W=농 kjy%k +c@m$*4QD#k%갏A$YZ4Mr2!Ǔ23V%%]U@`*Jp|~$x)^5[>m-er[*ħ+HKqf3O=(8E&ߋ,8U#໸ * K)tG}{_tWY5`vF(g*H#kաx0V,ɬ/TP6cJl T=%#v1w]6.U @(iT( >k4e&3`vh @+6h QT @P RU4*P @)`P KP @*(brrh`@)`U)`R@(` @+`T+ P @(( Pu@*4QJXzkdXǰ,/~WBɬZT RQZ`V(L6>>be隷MѺ+VM6~59#`U1 Ĭl\HvC<.ݸom8_}DlC$}e/&aqWCo^ZZ!7T,HEaXRWϑSE:3&ƏyҷtW1_魧߼wApR'dR7l&[n aMjG~6WIRNc8+>[wuyWMBU'K )[5&鿿G^պcZLɒ:C8KwlF*{<:5(ߵׇVt}V:j׬ܟUy4V *Ge8vӌvG;OrjNOj+7t|{(\2hZE++{n&hfuĠp05ШKbIr;~O-k(GR,Nk2]NF^. #*=umMՑ3ڤgwJzQ~S4%I=gwiZnGDd*~mi2jx$m㽼V#=Oopl4#}g| [M5FqXs5bMEj6qUZ@V *7`TtmH Tl ݀`UP֗S E@)@P @(P RP @*`TP (-0(QQϵF=O؄Vj*`s͋&NJÖ#w֧] cXFInr1ZA4m0+VIJV ޲5hAO2zCmm5&*;P"Ged;lu4(eg?]Sbk{9RXTpp}uZRSV8Q,@C  >xۿ.\?30>9<9'VN9u)EdY6!H86ƕ3ukprԮ sFR(*\q"/ 0,&kD" krY NӁq%?o0CErK,0/†c~.tZ=ChO5U;y!ij3@mrz3Qu2 }3e?Uڕ ++Ŝadx&E`ќ*@WNA$*-x¾<_xlQktR(&'wnTa3joJIV++N}_{}o.R^kEo P$#|quY2FɅ WOۗw{v&ϚZ_^ⶆYE,R-d`UF@=}$xWz\ֺ_STb-g5T ~ղI8cUHV}(UGJN_lV՛wI+#xёC:lT @c)`RP @(,V@@@@(SUQg, yV Aj0UIP$L#5F̒>ո…XS@9vhْkso+Cso.9<]MGʌ((f䌊7C~f ހ,"0r6T  ožwaL77iBm#4fM Hy(z[l:+ P5٭NˣdQg}OJPNX;v|mk3W^Gk=\cgm3OBXi,D$0]Bu+SQkwI?}&zs腖>jڦsVȒ\s,'̄%Uu't+w~ڟᔶWע Bߨ^zjOo.癕P vٷդ  r~v w}XJsW5tri:Ee*@(:ݺvtSfhѸ廓1c>+.VZ5Ed ̲b@`Y,QL[JT PwnyKl XNW)X A-^ >i'@~#Wn#5DsYI@ӳ6N8+2+vRk P VvIYkr,LgfEtL+hѷV{2"qlIO'u_Vz{{BHn}Ls6๚JѴ*m[n9ՙ~L J{Ky4̶Ȓ@2T3~jmW}Kb"u+\׎%$7j#F8\yU00ǟj`$ ǜ{@N#4ٰ9#[-PV]‽޼j(U8XL5H>4)Ҷe| FOSPoϚ!c>.3[`5Iљ+&2;s| hjW{&0dk7fY9 IE[r}nRF9)bͨQ]In8>0Nv)x5A6Q(Xovp V:^\[/ZϦzIլ.H4GݑI)yCwo@@9潴ӹwkk ]%#]D;ͥkbW"7Ks)Vnbb(\w>ߢ:JQrʾ=4wW|]iO^EjV:ͨ̑yp q'K!Y8-kN)˜/ /o5$luvV};x..)`3D"$4h#hKp;; ΞzORJ|Ξ.\.7]\MG z5K |ANL3>dI]-yj\tީ6'O\s}PsGף]?XEo5Kό^kgSfd{Uߵ8yD~3ԟOgJ-5Uun*kuuKI5h"َP K(VX`TXsh LVh @)`SP RlXpvxՠUGڑM$tA8)mMye%1kO^pAT둣%tFH+Pt -،7JFλ[p쥓$`+pVrO8gvxhaUAYs^:]sWhQCEEq* ¨ 2y9bMcGF:1߿.n[w 5X4brm c8U;:Omޥa4:]6f]""-*l69 W>}>J653w(B<7-p(^Nڊz{MB]JgL9-^ ؒ8F(s&C Xyi&$N-ռUWя뾩M=?KjM晪ܾ {;icrVHV*ʪȻpgjr_.䶼tۺVcoΩ-/Wl-:E;!{ŵpV[Y;,2ǹ?MQJ1 mamW^ /N\mq;:-EWw>옢a8/˶|w '÷>IӚ[cukغP\B{ܢ%)Ta!kh˵𓬫ܯS:W-Tu.5Wm_n%%\1TǑwҌ`RqUcԯk?T3ڴƑܩ$INFӗݸ)#m>._NnC& \Csf.h%[Bp`9Gre-mKbryr`xv2m[H 8#l$}3PcO޴ ),0~ƥ52pEP[`QP.)c`28o>ؠ7E`? Kyf>հt85hɥrYP5Q˞ְ Y@s}YHF );<0m Xdc9RQMS#TM*&$.!*NsޤSnfۍ.tJK|g mx\RJlsu][ KmWʄ:"m\.3|IwMp>tPh IHRH℁W[6$ZjN3{$6)ct}*뻿kzl䗥[+O~kKiwC A*#4~=iuQMޖi/I#LYP ]U0*2U: ` Xh P*0(@V$HM|&]253޲+Z2([l &5SV4 K+V/+6F+r+N,ֺGQIBRP @+ U@UP @(P @*P @(P @+6h @+, `VFsW}iv5[+ X ueG}ȷDRbe'By=z% ^7UΓhw6)2nD̎FVea)#k^EB?"Z!AMXQKw0{+x wyQ\k=mJai+_Z)+")T WɵT"E,?߯nѫ՚lt֝?mVv:J_l";gi &UtE@>vpњ*\sJq⛌]6MƘn彎[HQ,O0JDHtc.wj}*ZyjRdYun-n-LF(%vW1 /bΞpwv_)ݥn2ąd by jP[ZǎMw^z&s-vV(˓~H@+:ZUyؓѺi{YvʆydĈB27/$`5 %U,w˷&H#-:@h)YTBI*dFۓ%O R)vaW)<2$d'9*A vjy,$776ͦZZ&>:VvA<ŒH 'Pƒ<KJ:ӗqܤ馲F[CگL[}rV{{He<ޱ:#!WxUXnʄW2ϥ]6 ]*ttj6RحݚheHJ9Z)RR2Ks-JWtYKל5nQ#vn nk )`x杻Q[$Rȍ QoT.٣@ǢOs+M5y,<54cC[^speJlֵʪǚbuӺ>7U]tŪP>"HKy"eI-9!,G*nP6Ԝzhnk̮O Un97Hշ7VIS[M8a-?3v+fs^~O[QPI+u7W~{s1ج@)`T@SuT P(h 4f V9l VT3V(`UF+*t*4g XR7@$0 }*Sx$Ulj,zzE6v\( ܀; `VKi|?㛠Øfu?"9Xx<5O;6W e=<$-U7p|Wv5PnII]z{5[SV2 ++ qxm=տEޭQzJƥLV1 !#|N->ݿ@Q(zeſhΚ}hṎNܛR m[k =[YWz4~=VmrHi0#lQtP7;~_]:RteZ~,lf7 K.N9RJ/[.-985Ըfua`zu3 pʤ4$pby\H§%$ګ^WEӤ$Ϻ͟GWHޏΆ4Ekiѯ`Kym88GIu#T8\zRrn۔{OӷK,ԝtJ͂\{6CbMpwKvnhpݴ;Г}g(fVܭ.#\U>J%hOHiwG^gq՚Uw{aZ6ݲbCɏ.U\WtkezKkE:S3v\*4&eHc&#1OknJO45WIaUz6K6.;//߷7pzyYieKxT]!"KR:qVWܕfͤeĺ^.m]8ҶC"րo<ϽѲ_")8}("qn6zH><:]Fe>* u,jtTe1P*cǵ`_Aɡ fo'Y9|LF${eRNqo9NrwyFeerè@;x8 g&߳@|6Kq'jj5vvw8+toiOtIRʱbXEc[OsI*9Qj7ۑ[tK }[r0"$Y?Rb`T<归~ aWkKcŤj5ݲ鷒wX2F=r$\Ý+צǩcyϜw*O%3 8 H #y\Sv– @=^Kno~}G_W{ b>,]$NnVi0d$APw9票oo8Z=WC:Wma#!EybH5xICFlϖi7]$wOmt4Rk,M}TWjRiTU<{fIϓ[JA}i:"_ڋo.0\}TFYҮVrn]mwhvTB"B̒NI_z\/nhHFEȂhdYd)! 0.<5uF]w.,92*?]vew:nKnWU߽ήoP7Z7M k;}f'2< L48bBH~p;ykAk$]erǬ:f5NK]RS] X-q&S}.7}2 )!MoYyXZK^1eSFr|OgۜZ*ᶪ1xnIEjh|=YG=<>oai$\F-hU$@ >z^0JSIv<]`VY`V+@P tDt@TPN+2@ )+vPWZ4>)6>^dժdSrMfV0Mn]Օ ZZJ3 UF ́K*`VYq*@UF[}M` X*Oaƀ#Ԙ"b3VJS*zΝ嶐i3H㑶pQ%9+kʯϷ-_d{K&<]F (8sZoI9.0aQ9&ĎbB,7}}ok0Ȝ+6\GҺ<ͻKUiAC~X1Ӽ/9 ޡ5}J^R`rXb02HOBĕ.cWf>y>L\K41gO$kPQAґ Ï52^-$q@ 洑R纀|QU\ڲ`r ~V͢d3ǽ@eH;FD>>qr-1ȣC{?QAv}͌.v!kO!ɈrrںxF԰k30 sZN yY2Yb$oq&j8S9ޒ0;0nG?d1J"MtUU!p}Rѳ=׾* U $l1f[m1^jY-;lѼ_f[ ,"aM*;a DXܴ:dh;SI Y /ZqO J9W72J7.M+wrYO$&J4PMmJ@(l Y`T( 1:ʸ%H 0 8GhIɭ"Q@(Z@U$yE* A89P1nRE] w?jn/[k b Vb3ULdUP 2*n4M[2(@+v` G(wjJ Xx VYN@(fKP @(P @(V@(FqYsM]VpE@)]@Fdk &9}č7bn髱424*%F+tdž A>hqXW2\5bE^HM1,HI,rk *3d-Ɲp"tr,1@ܬv3)*rR 8f \w|tۡy̻6kr)OxAխnEŬpn-; `@pG-hڧnf../Kel ˗Uj;㟭WDvڭ@ֱkI[^10a\B6W1&u+WRU'N< C>]gptC;C$!9wkǫPU}6RTZtJ-L2rki,NyFZ^pULm4]@d0׉o-ei0RDkcT4uB[>K^xr3z:5Ʊ}SEV--.e[Uf$c.wt~FuubQpI*}WHꑍhZ?5#l6D,#n@S*Ǫu )7/p_N]X%R:W-)+ 55~*nX<:T}ORӴ,+rBP+k P @(_zjHtdoIͪ(d 8$S& ڮՆGVQ ʻAs~>3zMtWZu{iM= w`kׇ_Ew+<9]GO:,m8UP f< Д"`6sӟEMO%2'!X8V_$l w}Y{u5%Vd&c+V08ь3#qg'[ؓTUr}[uK=)Qbue:ЋV[4p[DKxxu,~$ܥԞ֫1>ӺJGTς$p[ O ,l;,गq\Jp ^Y r‹xӫ-e~W.ϦӱjZu,wIOHlC~K;݉cqw3x98w/ViIB5i]&tm6WЮD^HC\C-vB:*)du$oDOY^uZƫQE6.%4#$-Z3؎7؊ss8UGQ+ݥ2O6FRy-'D6H x<ǿ#$g+lAiR%ңwݦ 6㴪R) >NH#;FbcsWYj=.nfy-"ʭ'9Y#A<;uϹ*=E[*8KK"JB#\!6¼_eמÓktD\uz@?KK~Xd{D"i*n E &V\ɼoondDnĠ%kg4jfd @+6, n`VSG6+Z`ⷹ ˗?QjlMo܂rn[YsMk+Th @+ V(e~Չ&$*P'^@VZJy|pKu k&4A9v`qn$9^AJ.mj9V6)\>nCGr8dVM˺S>m[Q)hmr¶c2ػ@7Ny5JM\Kg$$EwKfOcsۆ6G‚vjª8SQV β<$_ - ,uW\oc|5`goWxeKd2q"Ue  dRQ?T6֏V7 5E ye$S566Ү*ĝ'OPunkht;~̺H;8cnrdZFg;8ºo yGQöwyɚ;zs 6~^i]hW a4e[x0hDrwdbI*mm}ϖB%x젻=Α'szGJ^@ ;9cC[k]guڈ'hP UV$b*@M&`Q(nMu+@VX@@Vo+ɨ J~VۢXs)Sɮs*'ǏzwP=̊6 ud݂Zmw9HU`WZ#"n+RGA8@^vqLH$8N?)|Zz$_" R/(Vv6޼ZmV%&Ar@P+FEi H]?ǩ=iQҵ*F+Yb2(\pw2^U8kEukjX~ҫ?-crɧZGbҨ^ +WvkB2_3Ӳy0mӄ1$rی`ȻUU BEknnO&\۞^oĈ#I0c8VWܧ*7~٢9v<+x^H21K$';@v2I|M~{b{3jX<+LųG;7@%|(虽%*ns2+Ip`XަA$?S93IJYsSLӟ;g{3EW|(:w X⴦g[ՖDHEٌ_*~\)k}X,1kV,jjd)`G ~IS"jo{rr4H$wf9ff9$'kJ*5M1T 1[4ut{[;حuk[K\}뎬oȎhM~osnyP-Ng;I3KKmHhahdcaYv+wdBjջ>Or׽_{=!jK_](5R``gJT c`W= [@T`P ́Dh ݍN+ɥa<]6[Dw6G)(ޭR/W1i5no5x^eS^ZGi-_NEc={bIA,]I4d9ܬvL&1iV9=ư,~^5qI]Y![g~{N!32qӵmJ# l8;_w).͆򟺔9v3ǹ!Oҽ59"$l,U9{`QRpS+6%P#` qsLJy LQϸt;ֱ)m5f215ͻ6+h [؂^̂B2HJ;q]-* ?zfYm[ǿ?ciOH'KKF%-4( ^g2vF/|tܔt۟7yBM[ءvH'2 P]2/;NIx"M{N`g٫3Gtsޖ,;inqP +94UcxA3ٴbL'wX1gřhY$vEPH+mX0ǚ˻Uwz˭*ɴm1y5nZH' Yl˞Ԗ_ʒ5xk25X=Kkq^juծVwځ"8ch퉅 #GךQiQn9Q~iv+K[`mF6h4'Ď$ylc~gS^OuW#ڻR# l+KWsb@PH棒`}n2L=YD d *'EZ(YZͤ}kl,1]&Y*FE5yd]4ۖ Nڴ$b@@(P ˕M *( 4P @J@P @XAPMm*2(m+@\ [(Q` p>Vl rUsR Rk '`Qh t)5SVh 3\F+P 545E*'ڎr $Tق>c=ohv,E&ْrm<6I$Hq3(i$('@856,e?W e_1Au&R,'ʰ3$rʊöa_ԛRMG>WtPSi9H[6fBv kޫYJ ۓ^'ST諹NH[Y;3p– $.ˆ]Xs ]-xKЏ*n?> CZ?Vkoڅ4REPڼi፲"(HHɘ,ͭ]W}ǁghlkDeY$lJ JHA;מM)'~I,;zbtZZņY䶏e${-qϴ!h*v!uVzm[ky}R]GSu)d!Kg` G)~#ˆ# KejZkӇ=>\oԤЖ94+q=l66y)$kw1#IߧbOuv'i^cwu,硾h^+=N:i4t6Fm%RKXdUYfͯ(9l+Y\z^rjFϖ\ W]gqҌru6äAq*b !.4HL_CAIw:گwV6Q};zZEtM-OVNͧm[뙺w] 0፼t6˵ Fg3J\W&._ҝ9ҍVZ ڶ~f`u{6Q2 PژdeAFYC#657^Ըk~Sx_GʲH:W\m+H i@VVb0ۘ|| ]i7IezgWԴԬ> ZXEL9ʌp~ *;UU"/X K[ӵm#GҮzb#mh1 豀kKGrvnxf5KZyqv!bUpʪ8P=t[` `b]K`TsyDT@1W] 2Z[qNiBkPJ W5oI5Rł՞}뛗sDVbqVNj yrq. Z)r*fH48KO S&JՁUd ti|V& V P X+oE_@I86 V@$Q`($UNn|52@Sq浟 /(T ϽmIףJ~HWe" Ձ@ttE|$'ېVDZ(`~j!u%Vj7S\Y\ I%LaZf72PToޗ M%Mp.~N&i $\"H#̌ k,w0s{$$21fy'I&Ǒx;WNϕu)溭Z6Yǒrkǽ"Ϡ/v56(ĐrGMpRPԾL5 hVŸx5Gւ,Sf9c3Fb/ ]He<HkV3XXi?-Q94RIu.!AV{3Xr10?)8O8>!^Ϫzå/N;,fhnh\H"̅†OY )+7IE&®mM,Y*݉~ *wnHٻHIAsjjiZwKYtޡ`bXL#\T# ќ9FP8trՔoU$g^l54+(4/pf_D%u~32l!j^f*'?~{Q]R8M7V 2 r}>+R#ak;CZOSdc3*9O.o>ht]?W/jAR%:#D#B 3H7 ^zpx'omiZLkp,m$AmHO$Q h+nSXT3KhQ"f\Ep k{I1?ydJPDm%85"%G;GޤSIxOrFF;guj%3)ԿfZios_ţS6ܤpZKw;FfIS;E~wKWU=8մkTJ)rךxfd\Wk~uƚq:Bg-!N5~ T#gk@+ PP)@z@(eP &SJ2MB0H~FS^XFϰQ+*+d @+`Unj3IEV)"(Fzh Yڀ@Vo V T`U5SE5limP$& i)1Yq+W@sU>曛傹#Q5J,3TJMm`Ȫ݁Ywɦ ҮuK}9?J~ŢkiT+`qy]8/KTr䕥$%{RyY;n6]]kSi;(oD# 5nkiAm}mwݝNSިֵ+-%.$xD@lrToIҳ><WuPk]6vy+J1`'jq[юFܢ)`VTkMi`P @(K5l ۫[Mn KL9m&s$k{ntj2*@sXpod`Znd+pTBh/W-Q0*@(mNe%Bfm y,#u,OK}7P曬\wj#"`9Qs~[#9⵺dҞ0e W!IvY:`خ#n|4Z$dP Zjmkt'$T+ݚ+P @\V5"WLeT 0*WmGk it rrAb+4Ak'"VlV'@l n ?Z7h+Z2[mi/UH sḾUi|Uko Vjl @( dQ5+al+I}pqYmW(rܓL-N}isQAVu]SDgN?g^C6PmA B~~itn7J*=%i7J,QHd]}ѳH0BFnZqeⳇvl6j8 $KhFXtECay''iۊ)5K/>mNAnd]G24i#!e/{*bkz=G XnkwߖFҷBRмfo!;Tn"x`& qW_f|ث56 oI7@}p$.q%UO/RT}B%CX~4h~?RguY̘aDN/KNԶ~GKՇv|CH{f 񽼄\-UJ"eH )|e\mXW|]*|5`t@V@RXP&M@ZS U(#S#@)a#{.qNw7ϡM7]#[Y[{ᠸQTP]YI/-}7Uw{:}}/T|QS+4+nv 4O(x2Xl HǽtM*h_psT[2(@( lVԎA5 ARḰRT`t$65"DkTL ~ YP @(@(F@(,N+2fKZd=5MhM՞tw]}tCA}7qgojBBexKoo{n >.sۺW6i??5$W&}eMԚΧ;Yq]:4Ԛ~OO.B1NwGFB[̫}ƞ5v)#o-gܴƒm-ZI]gjC;u zv;ębP*N E0.]ghg,WD=;Խsս?-ވt[}NCaȩ"iewv#j8nM7G-k4XY&'ʈ\"})IeJ \r+T P @*4P( @խdF( `ّ@)@T*)0NtPѪ_F3QJr+Q?`Z+H8Ea?j6X+ R '#xl XpT ֕\y>+I7饃, Wij(B3\޵+-|b>QhdM 4ch Ԝ(Y`U@VNMy+fVoWH9+vLTtb#ـMZi A8U@I&tdRxXxUE, [`P V#PU MPWUy2Z,x.{jR sYR4M[2WugqA+ P @3KXbP"09+\2j=F(y+<~E>6(( X(3QX -O+Og˅ cU qVP @*5%P|xuN?1LMfz}JM+tH :lO<v#HÎF¤i$7i0Lz}=q/u"a]FbP0_øuױ&Ka([x\]Zjf$ă_QjV_PM6ޗ[M6}m"HY4e[zORj9$ҿNSuN?Taw5Q=O骐LlIHeI$sFUR{akҸKsܞUb.\<'z[-fYY- s< K)m0Uӭ96KSYh<F9 Lv{V:v;ed8QF$Rtfr9'SxJi^ܻnݪ:Vjwf[qؠ@0QY()2< ÚX#>Փ@UI*nhQIDסdP @(ub2G"OJ=  ?[꾐=E4ˤD2!Rhujg\ucİtwNZ?(]{2enR\daT_BROGhT(#>˰&ZЬ$ V1YLwt'j'0]XEp(Jޘ \Ak.4 Qxց%&JJ+P [Vl tȣ&#"2)O֫#v( 0+ TNՀNj6,(@86 VA#n&Yz0nm̸ThN+-ѡWp#w֢'"MV̊UXdUEG+ѪRP  fL5S2Af%FJV\MףzzVQ>:?s%XՈ)h|e>WgsGzgPӺBD{ͳ$h&HG"@ȱGv5lԃŨj?R<KQ!TI0I(7˂>c)^j;+~}h='C:Lj-o] ;EpQ졉prODrxͬ[z}O[)uEi<{f,$Be7tܥYFTNJ:=҄v6vZ\v|m:Gˬ5mmqĨK;1%*,I+nR\<ĩp2JYo4? (ܶ=B+vb,qH6č)6 (|[6폧ϜO\ZN} -匹ؖ8HṈXl`UU-&bԛM'{iN}/MѹCPg_XzM5ݍyem .f0TVvIĔ7|;rm${Vk}Wp,Tyg ]s73_-JȐFK|{ji),.,n/%YbK;J{ ucvIdډ^ [AO'$S*%rIfn_ѱkGejk6W5)^[h=ʲ@T܋cu4ܤ-*YRro/1Ozizޱ]\jgO%srG+VR]ןzG#X 6@pk CjI'Q `Lv++XjQdVT5 iQ2+;5*Pkm%5Ef Jˈ yJɛ/ZP ]vj,I@UoV]G*7xhGMSY`d Z\Yshd˛@YJ#-Xse7Vw@(`RZTYMvJ>|m˟h .?*8FITI V +m$5K4AGV-V <~Ue ]^W`V YsfP +c`x< nVŁY2+J`+8j@*0NՂ3R$'Z$9ϟj"+\+ KdTh>$'u[6 VA-U*@3KP @(K+7`T"'N*@ֵ/ Vq+ .5RsYnWELLbfͼ0viLfq ;tKRI;ㄷ76dx5/o^J:\v;HhV/'p09+G_T(ԫnR}{#P:{T=s}LķU\۴ ֨F6WјH:2<88Kojک=Lyɫ|I}> ѵ-ZM[q3˨ĆisގE}cn55Q+4R-j z ɒk(l XU}ӻEu}M[{OH5w@ݲ B..RI&~{5>:^_t6Km4چqiHS+G#r~"پwZJ;MRޛtxwvP]&o%=G1h@%BH e@#/a)JMmuJQVorצI$9rwb>@#5E aQQd@3˖H jqxvJ$TTyE#j+) `Q#"~AIc*i>84]Z:P{19E1l&Bw3xg;4~-Yjz滷nm`a]eVvhKUʠ}Ҋx\+$ $9ڬ\.+P Z@@P*X(DP+P VC EPd*PP @+`V+Ҋ+T\6kKVpsZNȫZ2(̂"hP+Yb"P*@Ekp#u]KUNF MƉْO/K_^iDM׶_ ܼifrcA";J&zmʒT|dOm%7d)o>KTU9%T³JH$GOMD%$\ڧ5ʫ$ѴkMwGdHӮvEpWd+x5թMQt9ʧ:X\xl|/ +>agsΖt}dU8Mfz )躆vNmq{v!v 2HD555cMHQ=7 C6>wv |܌ F`nyU&H hh݌n݌${o<(M`0`1sCAȠ)T @ 5R69 Q@+i#"Me+P kV*QT `{E? dV M7 FEe 5 @( ޢ~z۝w9iHɎ/Mv4GkI2Zǽ"KKSJo5k%W|iF@*X(l P U5|VH`ky#dQڤsRa>S@V^``ǽtMw]c#%Z +`qYn`qINOr gڪxլզ c5[$pOF"``}kqO@?zM0ey54A+2r1NU@T: Ģ @V*Q:XNj`P @[ Uj茑k'id T*`kJ&FP'6&jfh+4P Ym0+H)M*@( K'9+P @*5`W&*VT P @(Vi:EqvlE 0gsTyѓ ֍+W0( uI"P @(-h;W @*\ 2~ՠG=GuRYǭLOI.# iX[(Gώ֊\WvD}OzsD;[hX 2jzj hnRs#%@([g͂jtwXRZR]kkfZwdxa/dfda`4}.^8E MI4pfX-5$1f 8y$Y18*'umHj̍@*P@, P ԫcmOo)fi;74yHեucY؅U嘀$⤥_#ҥdtE&HeI#n t]==e}ۯqMqlB N ZZ{_ʪ/|4ݬ;^E;Oise\Ihv$LwBM仼qyM]:('RԖVZSOż1p!\Xb}0+m.\O[zRh`Vh JJ*SrdV\s(Myg+4MfvP(`XP+P @( t@Q(v, JP @(D `V(F(P+TdUv UhVɢ +P @( F'8 Vwi`RZ5TT A.$l*& Wp'p5Q,5SQ^>etӻA#a68l\`f\YŪ+/#mP/ǹ1e}KM/:-[{\8GL8Vx䞢Z [澌X*>6AǜYJ,/ĪepIՊ9}ڣퟷ5$0Z@9#Qtj^:Yn>K{40fa;:ڒm[k;^YR,ȝ rm?(;~sFl YnS ҸJf P YKt@+I+H l #"Yy mI+qQJp~K \ѰJj]ն̊X{eFf`U<1FXb P+6 l7(cP7j֗fZ>,Cp%` @@]#,cɤ,W0SvQH UsP @(RV\Ȭo@*[\O`Tl %uH [ ckQr+{j8~%qnk]j Th̐Fk.&'GtKg:݁XV[n|Ux5 @( 5+WGN+fMnզdRhխKUQKv 4n8V@@cVkh#8{"ULO֎`5+`VP>jHP Z(UVtE?J#,Τ!Ye5\Nnf>IjN/߱z[XM+Mu\:L+$1VRkxΩUEnO~;%ݮFϓj)An*͹.v'7\G/s#ma€~G}!UMs~պ<ΣE+1R0G?Gڳ7$yr rn1[Zi 'K"RR0䊪ld2#"=d+-[< ĵT E@+Vd @+`Vv `QUP @(P V'&EK)`R$ @(P [@(k[V@( ZED l ?`Q {\P&`)MR+'ZSHǽ@N( 3%wVlZ孨@TU`ɼOqY$g, 5FO| wlq9{"CK/q$dqXR<]4F6<;=|$џO82\AڵMĸ;sfi;n/Rv]tj6h!mWBIm$d^=n{UwJ}ϒU r GyD (` @(PJ@cJJV ݊ڝ3oM`M\O?_Wk?[Qj' ?@GW8"c5*FG +4h XR+@VyW >*Jrx@@dcJ`]2k6NT@(iKP,G 2i`VTtAl{_= bER2jHP (` V` t xDrpj4"Ӟ#I*ģ"9#%KW\` V\9Z5ril Z~LKn쎓cq4,]x⍥`YFXFp9?9=Wz7}ڄ}q"汩պK=~=uB[>4{$N2Js8x0QkO}YN,rجŕSJjUU*XS=V 1_ E_aE75qeIswWue[(` @(V#ogqd WmiD@(P fXQdWh"DWh"T XM@(P @T*$WUWc֒.+I90ZdPOa˱7Rwqtxm(({S4y*9j61|T,9T)mN4Ŵ5t)΀3 o0, OXRM_tmcQn#Vudp?KQ!g> 4Uh$95ɰs@+`VS4 SWNMkuMVV uP `V@+QF957UH t@(@+IXWuek DGִ企ֲ}`Gk|}jאEi@)Y4ؐYiG\5@5ұd0)`MM^A\ 9-Dt ul $@L, k X`QV[(TIkqB) t8M`k]<o\7xn2Oڗo]Az`( #iQ5UIsIuZvf9-6e+E#8jXP @(h +KMeEh VPD nX$FN\v9t Wp n5*⊁P ps[Rޱ` Pc5 2(Z@(]ƁjR9VP 5`Q@(l XM#+`VId> f-vd x( `Q+5ZRE0+`zUgI>{aw4wTFN7ьvzm)Ȭn[Rݠ4{Sen!pTp~8Z*UT׊*H:eFeܨ(Aw+kH`f\1irUOnhP4 Vx&Fkd))#(BCSVU۽X{TZrQUT XrWursl~c6 kѡ\@VO#ue0Z`V@P @(w@[P @(P @(V @V[vQ+@P28Zj2VZ D '< 7`TP|W9kP @( Fs yEW Zޯխ԰X`ޗ]j*>c;rf妜ۋ*#l(/EtQ!5kxa)x1ɖA9*`-x+$[#1US%j6'wg%بM][&9dq($`/ pVϞSj=;qh{gYmJ)דc2Zªb ?)~Bp=SeO˾>sKN:>u{ktK]SBdQYdI ]\D4ڕ:Vs <;d[GEXeYj+}|+R+|x"j<4R|RQm޺xIDg?ַ/ (bjj7ҥX&(\j`Wm6Ր( ڞ[q>+"PϻV\N|pjN[+J x2j9MP)`U`Y~V[P XZ Jv`7_"{W?v- l(i*$Q0Emի`EeFP"Th &6p`T6`ۊ$F T*EXYk-GM( T`U@ULGlOG*$FZP'un22GMu5+ חSOS ͢SP @*7`Ul:͑5 ͑ȍxHT&eRZT)@Si$B qԑQB=5B([P @( j\Ր(l P @+\J(l XP @(@T [vQON@@JR66YkhyGG(/]L@( -sF85fN5@+`VP Z+ P ZnZNS*UH\}%s(s pG޽0O$g&ےѪP[>{VW Ԙ?sm9#>@s:]an[J5ͼOjSQ5d 5`Q*A85v( Ate@1]4 ֨ty5r5qrĕV$:\y KZiSOI.[jd_ 1x4cɥϗ '1rɮ'9@w ;QR! :$ݺRѫwju\8MWn_/ld#j};O&ѻ+ e?-sjZ]խ+ P [t檶 2*`1ZH[ȥ`k[LJˉ+;@ۊ`+MWq櫛o9J[NRrqVԠWmMoۆA5A~\kF T~Lʈ"%i`1E4? @Wu]'ڒA>*(l (P@@(P P @(LHQ`+pq 2dp*r\A:?]Nwgw^uÉPך3g<-R 'gjbбoMJQYX+@+`VP Z*2*NVy#ɮJ۶hz2tP @(K+.hkU.Eۚ.+ix[+SFC EdWp/[@T`  P @*c\@+P [#[ )^urpkdm @(VT` X(, գ&JՂ̍YX UXZTP @(>+5( Vl P @*P @+`R uL ǽjMARfYlc*=K^FHn9DFeqf} &W:%2GȰ/Pyc>a:o!IM&Y-g.#Q1¸NVN.I*g괹vItA&.xtf.Y 水.o՜[JK;^B2"WLF|WrT9I5ksVX'<J@>ZfŒ*|o*ySs\Z!з/R{iYHلJX(g |HMb^qA9)7`耭YhX`42wV3+w`?J)P Os4A\Tz`W:WmLk7%ի m1y/@+VTZ㻀QQ VP @+`TWm60N> ǽmPV ZVdR @rk٢A 洚 y) W>+/<r}*6ڐ#'ǵa\^ P ݁Ss 5@yTr㊏Q0J"XHZl c*gڲx`S`& e ַ;\'=ʖ fO%kQv `)~@%i*$ HYq`V\&@V@Xi0YkqV QYU@R MxYxn.AE ȫ2}#]&ZPG:}LyۣB P(P @G&@V P Vv+@VXQ*XdSx jY; 涧`ջu,P V ԦJx-Z@VMf^@NqMsT QFgjHpZ9ՊD+,a{Da9׵ a(ˆQ5@@+it l%@/5`5((W A5"fP Rb`P P F+V@(P P G5.A ⷧ*dfLW2Y !8"#G7wVVCHZLmrVPq3b-ZV4N}40O7"n*kSFlpڑGϊվ(H +-+, lV(CyJk8'W*EJP @('@M/'ڷH9ϊ<֜Zqw2Fڪ,W0HsI!kQKIx40iX+Xڻ0) l֔AlUrK?޳ yjYd݁y9W y/W8UR Ҭ1棍rW+-P+O{M~ ÛEҤ`Ea*j@[XXv Wtd3aFGX+YP K(@TU i_Ԧ`T֔1%`V,FkRTpȯ;䢥F P @(VFE]nn+V"VT @V6b\@(ȫԧ +-P(l ?ZۘEk)@TH8uؔZbFkɢ+T}Xc<:Ej@1籰+-qAj7`1SfA5=`1ɮU SoS @ Q^#/^ P Q7"yR(ՁS ըrZ d1jN ]`h"%P(P YV Q0FojYjP UhQV>i֣Xvu&ydy GKdֺ8N*%?D!ֽGe=vuNCElnd?`eU~N$/[ij5%wn;XɣCzGQ]q]_L/{PoQuw;bHqZZOQU5,mw]ߊmյjυW P y@?J`G5'ҹԾ>j7ܖHZ$K'x$'N^/J>Q&Z'ֺzJ-ZP(Q~2}ȮQsUj( nW7Y+NHN>~ǚ8m䨏5dQ+ US&4P[Ao.Aj<Զ @` [@g49`5)AqRRְ2(]72joexgZi ȖN(hd5rRp#Ea~U`7V^NEiLFUJ5^?DA8)/Af3[$\֞|XjS`5ɦA>|WϞ<kIYH  iŒMwT`RX"=y5:|&)zY'&$~jG2@er (P @((m` X#mU@1Jj08*l%2R0Mn,1ZHn9Q ȩ[&t^@F Evkj z (`1Z*2V`V $r`Qj&AZP W7+ @*0)`V@@VAV^@`R `P f@Ug Z@P ՁK>*ˀ@%|W5'p]a?o#E}膯F(?83^h߂h~r6w}1ۑ(fSE)J  (-Ǟ~^acjRXipV>ջ 8O59A+kkrK9J듟d<3 ̠[M9aH'*}\4w Р\TS(Y,3[]LrmZcȢ7cT|$0>+q׌b.+">W'¢Ykr8Օ ~PZ txԓ~@ iE?j+Ͼ*wz`TZ`[OoʿpFDj+J<&eǩ[J8 ku<2UYUܠc"fbCjtâcqthY0kx4FVw4OJ,w%+DHqk Mcp$jԤ}?E2iIXmJ?j* Z"h~)ysZXˣ#""(s]ǽs`]] Rh}8|a)vvG%5,֖ '5NYPX#ڱ%(@*gXs` &k okPDVSed @VWucp-F V@(*I>j7-K:ϸ@Uwrj&ɢ"g ~[ l `P @9_dA`ߵn潘h<ת2<ԛHb5%:TF~z(X 6p*FMSjh5eYNBU(X&`M#;ukp'w٩MVUH ښDh4<zĠ {+=`N!y&WM5(歧GJ:\/x5( ~H1ҳ>BJ8-~S'.O'L?)VH Q F &-G"@QǸR8iQ+ R@[*6 ud`:]B}y"M Wr#4lЪAYZ rkKP2k2k;hdyK*@(d RJ*WE4Z#&AM]G"@UH [@}ӧl}+H5Zl+4!Mj:M'n+¢XE`+IXA\{),+:`hVmK`VJՁP VKL P @)`@( c2UL@*6f'& ɦ^U)`T d հ(XVF5( Z U`\ [dVwjT AN,XWպk۱vCy2QE$Z#$G.KDbY%[ QZ`VA+V`T 5`P V P @+TPFk`&Ph (`3ɪ]6-T @T⹼ TXQ݊oMij"Q+p[(W疓l^P X16 '@VdUP |L`Pd`R, fGEe:J耨`RLE`P F('&ET V2P 0( +``{CX$UqW.YP ՁYnAYl 2h7`P @(P D %|G ֪iRJr -[+P  R+P @( kFE٢X" 2+ `+-X#An'5TE]ȭo +Vd @(1сQ0*MMdַXTUh y֔z`UNM7Wp"v >jHX1Z1n`Ri([({MZtAYLU0(r ɪ ֘V`ny}8&XmpWueWp>w@?J߀6pAXk@QW`VP)@Zj5h 龐#9lL A^e4 n`sZ2ں3oRYF1iZPs]g5 y摎VVd t5:((/l6¯epjm5d O"}-VDnϜ͊#&$Z'&Vm!9'"*)P=QDgD57QFT+ MKP(إy +[Yh bh*Qh X͊D QT @*XفYLؠٲ4fD͊сG+@VR(حlZ ϱ,îⶭdַ˓Zr GJd>-]@ ˀ&PFM5~z> e+^wRS0j(GEeUL %P(:N'I*%`VJP @( uYP T 0(P @(9 -ⴛ@U Ft(ThFj ]>;۱]gEc4VVF P(*FZ,<ִjQU VGPF6U&Tu`VPw *`kL U5jT"d}5E oհ+d WuG:u76 yJɩKJP e*[ l X( @( TV@*ZUH ۪@kY|3Oh1j85Th۞sUFA\yJ<Ր(i/Ui*%`V`@+ _v+֡CH/ƧQ$VךpX(Lt,=R\2th3R( [,@ڰ]>z^yO$zYVSP-'^yNyg/$ ֡ BIu<ܸ@V=%Ԕ/Tf^`} j ?֖ Vh曗`EPZ?zT܈(V-" P#lfZ0*0*, jcy63 ,U P ͛& mvkF@R@P @(T*1ˉl!bEdrA8MR P( U*0c. ТD2 w37TrVw&hkJ̖ P x5EK bhe+`V1сX)@p ր[̘"Jl e[J@(0k. %j2V P)Y0jm@)@P @(2VҠc`SWp"%_VvTT +)jv)kL 9 0jڒGV>XTH 0*'0iRP  X,< TV (NATj Fk`&GF]L}}$V"gPUi'x'D"$eAm\RQ'5ɲMfR` ùȢmr x0VwJV[ dp"K P @& =tQi!Z\ +@VP ((d P @(QZh P2,$> WT3޴V,ǵ`1P RKZM%m3튛W@(1ԫ@V"kWyV6P+n@Բc6X)olWhBZmt%֖Bk Ӷް|'L=JID]4U޾͏;KVg18qֳW?3]_2d>rzomߕSg,s6gT]*\1.,*Dž ɓq#m1o UjeU}qҶg4}+0O WyEv!ұ8Vt8Gaz^BvW|q^/+|X},໌VCN:_cV٫wrM<+JdLCk%4`k$Aէ=N> US^`T0k;AzT `P@U%[+j݂2hآV0E(jO" (A\ I*|Vc|`5vH5MajV (@P;}G,`yr. U$US\|5S)= A.T +[ӒHgjP?ɇ3_T馷^ V5-ERkVZd@R*URXW$(#w4I{PMi;JkMH>kbYAzHr7R=*'xD4dejkCn?@85܉٬I+Z/TP#Ag"lɤtv[:hwS`5iəz i&[:7dw(@}Z*h,MIpk\cE?ˮGҤwS#.d sv]jҲ]%},IV; bB)wflƚ%dj-f6Z!<xJ 9)̶Wk)n4O1lۉM%F\yms-EMZDf+Y.7m@MfdVzdCÿ{1fG\aEW-\m) 5NoFd+u OIY~Rٰ^GW;󚾈iktHvp0yE+YP YIST J(ڸosZk5!*dҁf6^;y%p<ك e STyacP`f&e֣ N9*kf eqW=V &hF|Qpk@#bX"8yEq7 LQ|b@( "*$40V@Z3E H_ b* l* h 5E( P6mcWp%[M 2H}!׺9Lٵ#C8hA8D5m`fëx+H=S^#[y)42Ujհ%wp>ḙ 3\kiIkϾ5O%5md%ߡCJ=Oĩ8iYkV sVz Qq[!Eb]\cTNSD%a>Epqx9M5q\4"eL2ir`RV-Ei v9Wi$W zt <:W]5T'D4ݑHԺr0H?0>^rjA$m!R{8if5L '5F٦ٹ'5pz|;87e2Zw\ KcIO~82KM _R],n2EfT{V݋+}a{EY]Ē ;FXmKQV0bV9_VP @]{X:Ii1kPg n3[giE0AYER:%, @*@( *;GDAZZ ;_z҆t&`˧hk5{XpkTKf4-A+ W ض% J8j w B;r"C#^;j:t.1^iILןL;' OLvZɹ݈7tw tZ#ۥh{t*K#qU,Z/7;ޞʏ$pX:^g 5:̌'l?vҌZe[_YTi2ٮ`ySY d沁d]V'Gf9kh)@@ϊ:kۺp$iWaPOP}8oeXh:Lwq znr;hqʭMxDzT&RߧJKtm?j>,YV֦Kn\Q$WMN3X"gnTFPk. HX'&Q0~Q<4fJ >i6ٌg\ cݛ2qEQ8 HYۤ 蝚ferUqy#Q,ǚKOho4&.s\Fy~+&Ij.%OO ™QJdGCF c+8*2an;][]vA+ӣ̶MIZHq܏q\_G&ky^e$jcquQq]'"vgYu[ZCxZQJMKtZ?dFX;苼ԟ&l+'o9K.l iO7e,(*foקḫf΂Xw >MuZWȳ]rщ;k/9Vv*JWюHD9%nI7VeN=s!!\E Dڲ15H',xa[ja!IJ`ܷ.L_u5WXi֐|D q]8t }%m1כeSM/Úo2sjUrfkNv ŽNs]46Ñ:ǚ>-Q/O۔ (]k#qud>/2Y+9w^wtח. KxX"?S\gJ%LZVbAM{z} Vɚ}k\^VLQ0˹|JGOaOwtN̰~KMeu68U~Gݢ$0țY^XV<g默N7/ڵ>Q"l:|Iwakף{bWӊ1Ff>՝E4idx5sPԧ9>ԗ&GKK:+ÔMY+qVJ6bgUq]Tr{R΋ϒ+΢Գˋp+Feʎ#*dI~ :n3\#>qnq"eQ0]ye8`b'P ncfrk*\g]6׭h=üI~h|gRI HF@\,:%nJ*@4PHrnr qf~FAå^q( ?lWG$K74@2)#g:T]5;X,, ~kY{y&bm3mAɭ'1P,(Z 4`/)UqQ"rP]"gc᫱fl(@ԢoR 8!ELһs婢wton>]ZƷb7[I0um- OB<>IgAK6Wg+ͭ(R87v O^=M44ŵ}>Ӝbre '. Y4ln<7lv߱EWjsf-f{q82c桌 vy%^ӔhǥB&ɺs ~F;U#e/ 7SVǹSƼڝhґgns~LYEhiu<}E7c2!w"M;HsZޣ#tl#Uh;.~˦Z ϵwՙr0]t֭5>RB&m) 2+˧{itXY"wyrb!MJ|-x5џW]8&Xܩ$xE87&% { V#vREy>Xf\ٵyϽY;  yhCt3K֘k.=̺0DZ]R7)K8L2K>Ɣ7g.M()#Eé5Lǚ@2qKYB7[r?3WKZʼ2Xph[m4I z4.6аG\q]tdlèB nLt"Ovrۦ;JE//~s5u~ &7HpHt7HKt (ǚktxH)bHKké8'OS/r}U{~_z7t c8ovknE A޺GI涗D/cWp˹3t*,>] έ΂%WPzOHew,bg^yiI:oMlbƻtI,"f(b=v&Q@{]œkd]ӗh(Y}w,˅tPqi#hvs}MzX}b||WW,\0N3H7IDcjE4 휭†O]9+ '{]u:U.0E#N]+$ \(,dՒ(N+G*Mfb#}LJ-v'>ՅI2,;֟m;K,.AFNN3К3  )MRɚn6cA֛Q<?>>|ZFisVS!Ãzo$r:}dݓqݒ% k(&C\`kͯLLɩݕ|pާQөdki&O>ڟs^g%IQlwv2ٿj@k='LfDWѬ^ܜ hh)-ݾК n@+>s $K#|=,c{ {ᤤY-s>%MNG2FS8tۋJpҼˡ}˼XL~ ^ii3Z-:^RjGEк:.Do$75tM?Hd_o4OK\ ~S>HKj>Hn5g̴KfFkgovm[o!.B+UaR>UDCetnJlӸ̇t2|^ϥl$Ez42s2YnF3ǪnX,Yl&m)xNZF2DPAy YFʤ0nEeMѲ5KsZlVr@&GXCGsjDҲ5BMvcɣzfB#*C¤ɹ>=;]DZ+~b\PQft(A@AҋfqKà?a 9: .>2.?HL-^Y~[k9ǂFSYn3; MN?P^+J5/6ہ=o%5b- LH}..e9ALn9 ŹqK(q4 ]7g@X}3e܍ai5h5gb-O1HkWnhJ1]~,͜GI7 oqQN|6߸qkm܆Fwm'XD'V8WGQG~9v!^2ѽ%V[$87w Ԟi:e`µa;T b({[Aϊ>#Z> IsZ|׽ǵnd+3JxF ${@q {P fPf}D7!1 "\H(nBh1j0e4v؅@@ETڭhߜ:]b0}ɮ+.zD~~ /r5[prSo]z~PB9`⌶H(2qT}147$uV\S4F3W7jIIS]b٦/j 1\A]hpv35Dum[dF0w"6e 5ۖQ;l&o/AY_(sIvK3֤jA j (i@m"-h5ȳ"ˆ60jwcv+Jjggg)9. xd9Y.qiJ2|4%W#ܨ}D5H( f*@>EJ)FPk.)֓NF?acMF*؋KƸ&zxǀٷ nux2ٛc47Pk.)0501V^XJ]_K-mpǚ7I#خOky7IH16MGk)o=^6׫KOi $fFscPREߊ:c"_hDc<qR(Ѱ+t&'aU?sTրP @(fp06t6/WjFl7ڲ)5RM!ɢ-8;EP+D5,ĜXf-Nj𤟝Ahm21X1,Г\edC |KFڣڏIDuP^F̸dQI@fKh9A5)6k7\eFE7JʜW t1esN~G<):Ru?!Ȭ>o5_lޟF~ mkqzϹvTa]L@VjPP @IRhѯ-3"X%D薼kb7D QjBb1.93$Oi)'v~!l,*Iܣ[,bmAj6la-zfF2Ҹ,GVNb!(pfLWS#1(,)Ie\+  Xflke!g:^CƸ25ӝEg p]hXHn;z]snl X#( (@P0>@8$‌8PP h~UA@2* pj@F֠Z1@8ZjV9G9l@F8"'h  TKx@N)@3P1UJ bflӴJ8,( /5W ?^kIRfTҁTT TPV@8 Z*|ހq@["*8Z#@(0( APրq@IT @q@0(րP AR*PPdU  P(01J3@VFib<5,2*(ղP= P'8T1PE, X '"+@0>U0> JZP1JP4JO ϊ lU1F 2>SA&D(5RQEeॊfd(u2ifVڴIFGzX|yN>h Rޔ( $U`*B~Iʔ#(#P'@GPZIQ8Fi@( q@GsQFj0}@`ҀF)@1VJP>*JҀ*v*( U85h  (T5h1J " ( P1h TElqT585h JT5h TF( VJTZRJP>X P46P4F*v*( UjpjM(  @cڔ (SGy>*''<)n5St+̸ɨA$ƻboUIIաe25fe]PBP@@`ՠ6P4E@NV@E`=V'Ҁ1fF)@b"URJF3P-*f'Ҁi@ U@Qpj40i@@P@OV0i@m40i@T5h TP|ՠ6PM(PV((UJ (1J Ԡ1*P"UbVi@`ҁ;MZ (#(FqPHc =6P( l8#4T܊qǰ +T( %qCTj8y$ E$M#AF?4B*qV(JҀi@ U@BmXǏzO(TC^HWk7*b( y怮?chAVP )[ |Uc{g~XL&v*(M[f6(rVTY #Bͅ@(@P 4%#4-hʌ Fk 3rxLh  ,qZKXPe7ތ$npCd@'eG je= {.( XyJ9285 @9  *40i@b*PMZ JbVi@m41J9db*A85h P4J ՠ( TE'ګcޠ/ZQz7TH9`&F ϽPWޠ/ZsQ ``QxA  #T jX⍂7TNx[  Z'sb=57+@&@*d݀=P/e\f,V+"r<隔 ^ؐF1Wh6@?\yʾG) @m dP9]F7 O#R@rqDRJڍ6sVL< H48ܸɬ VBA[x $԰;5,N_! |LTlA Ts>P%|>hcހe8‷1ijp( h`2怹QC( 5P9@1ȧP怮s@AL,GQn|PA@@0ɡh`<{h B@X1  )7怌Px*>@[>zc@?,đV lPҖAK)NsK4 NE@GP$&T #<8`,MVZ $`d~`P5aj(F 5/Zj*N= a8F= [ P%~P5aj($x+ [**08$x clz>#4lz{xhBS4',#-g?Aed*#Ue6Y8 jjx@Xcڨ#qF (J2V#( 8( F P&z~F=U*0IUD րj'(5 *8`z*g5 Ux@Xcڨ#qQ}D ցRq&hϵ@HU> j@2j-8`ǽD qTxT}հa߆VYLIç)ޭyD'K)`R' DY?Z`j c.v@ ~(|0G0h 7"=ҀFh( ‸|{P-AeO<0)`qϚ]dROUZ¥{;K*DSp7iv UO׌Ҩc@?JǷ4j61 @(, bdI>@-'Ae0MF1@bϚ0} X2<K‌h oҀ>mP@H-@FE\wP40 "(`=/րZ!;( D s@](l( ɡ0|P怩o( [Uǟ@A>5xZUqRDrc@S[޵EP@Xh>Bvf j dO*}B>w͒~)h,BKHÀ3@`hߖa9#pQٳ 9UJ?h`*(l P(2PҀ} ۠1@ 'w6O WU P$N%#>HwFjآ< ?y!Tq O#`!Q3R)-vgA@ 5Py$h@q@II(CM"?ڪ`'26 Y(e.N1@[6y<(T@Hq@a;Oհ;M/ ) ƀ\@т0h s3[2M@XfN1q@ph 2\2yPP+'" ;`fю-yJ( 4jbcPs>~U9h$r ͂dPg[!rҀ"%Ph7( 'Jz@N  P @H8'u!zCb Bs(GրPFhhǽm @N>>P  \4rh P }h4dPZǚwP jz[ Є @S"@Fۨ404@Xs)+91V #@QN4U $Q)"*PLl>jryj *y"P ƫjOj@<a (+P @I@-,*@ т*@H@x04UP$P Ar8ij @ҁ UPNA#+z%A'hPh@yN@>1U@V3zRr|Ph,QB)'?a+U?gG1q@`0 QRb;8P C?)17{QBWȪBp(sP g"!^>P,K-~ ~6lvp9?Ll~OҥsAFe0'sA)!>sV# ”KS!˂ԚX7%m_2c$-L7 Ƞ5r| eҨ'ڄ%h"|U`{Tj@( #i\1Z` Ty{ՠ P#ԠF 3@Ec,Fj\T X֘#im?J#'PZb0p=[6hBJly(4P `q@_p-4%}^9.9@NlP @( h f|т*@( $0 TjqV*qV`*S`f@MP @8'yCL?(L󷟱.܌֜qBn a82 PFq@XtgoKb Z8QSP3zRH`Ѡ*Gd$?id3dFShC0.|@[ia46 >*Wڠ"֐+YV#U5P F85 т*@( P@|PT8 =~*X.B@<"(Aǚh<h {[(,Ps@A&} fm4m }h PhPɠ"P  PR `py4PFE( h @(-( ȠdP#u{ @PPAЃ$TŃC܂ (烚~\qT1B#V 'h怂O  ?Zh gڀ@cP'4(+@FMz@(]K}h J@*$.jX-@[@N> }h`P@cNJf@IƀPJGր4Pހm@N@N4MG;chBNI=u!jw˜5mvϾs@l!@wrI怉pȼ1uq(CVkN~O?PRGڏ%ps( ?J0E@(,X+PO5X%T(  AlհH5SED'4U@4`D ڨ*|`0E@OT *iD( *`ȊO4)sg>!MWMWAs ~lH*7mA< l@`2h09(RNskFlm'ֲSicgLwP  R?Cn݇ (ޭe'/ 4IʫVA9ɨ H+)hT`C^]1VJA_n?`\ďҀĶmrGߓZM`Cȥ>)@Ϛi`
04T#!6PF} M0bh s@Y>U1}@PsP8[3hR>n8'@ߵ~6@P 3PH' d<.EF(TU@NqV>*G@E@H4Pe V gޭAT_zP s@3@j [jJ*~A#"Z!Pր[ cP ( l_'X,G4(@@j(sAd+P @<@Xj‚2( P@7 怶@( gހP @(#$P hL(#"En( |( ‮MPs@2(Zh>h []怱v5jw+`{a Ҁzhހ @ .8@N~q@Fq@FMP@Ml @WHZ}i`QKml}( ph>h 4 rh$+@T|P9)@FI4`(߭P N} A&jhȠ#u@7P u@n'w @T}^g)P&`}RIq P9@5HO8f'ިPNhj",X+P"@6ҁ@6Ҁ JV("vҀJm(>H=Zfe5l 3V?JIA,\|xTm 8f9!1hZ3(* 5e[pJ2$PY`$Pfn1 [@Z|@TDp(iM%Pr|Pa/5h +'ϟu]<հQE,f8 ">-2PܿZj8+j ~d8&>C!>*& {y49 Fh 4@FM<&n(?S  n'P@Ua@a췒h l&6$NI4wx('?@$c~`kM(M?sJߓh%5(ZK,e V[2) f1Jm( Jm( H+P6Ԡ ҀJm( 6i@M#fM,zǓK#pQ΋EM> w<Mc~nkI>$g?JP.PҭwaR9'ps@0( 8$@FhqP#x@E>y} +@ހP@F,j0<[hs4c@\" ~'@3(#m#ހm#C@W'8‶PM;h3Bq@MB3@WiJڀ<+`mJP$ 2l(@Aϰ)l @X 1@[Pր(@U s@I8( ހ7P2PN( 9[@@lgj-Xr( @NC r( >p$8s@9'mǹ# @SmR1‎h ހP F(8#?J34@2(EȠ&P @Gh t|@o#'S'( 9(8-n7HQ?)_'4O&",K)`*ARi@6ҁi@(hhhhh f'5lfffff Pd#l5(cE ҌarO"0~ &2>ЄC< 혏`j0U,,oֵd; q⡲B<}( 3j(q‐q@X@("s@>L@cx 86Th dr&8nX 4@94怩4{hE@ j'bR1oY`̨psz3VJH>q)@.}@J{ܥ7P #hEȠd$};ρ@Ar P&vҀΠ7h< <ď43( m"=GҀq@NA@F(PրP.P S\TZJna@aaP‘I$k`@GqhO>NZ--Hp([>հ @W@( n475BT>@`R 00Fe>ƲRVED9VhG?jP2 @Ⲑ,!B|h$3} n'(,x4CF6v{L@'N+d3QH* |֨HMPJ܊Z=8-Pg`^q@X?Ӛ%&cR/4Dlo>|ڀq@[}4ps@A@ ` F( ( ɠ@( @7zr( (Ƞ,hȠ#u@7Ph$怮EҀh$ ܭ#@FM` .h -@2(@7}h@F@7,9 @FZ7  o+n9Z@2hM;L}ɠ#' h x&P @('ph  ɠ'&րp(E@8# Pq@7g4d@PȠdV48@(P %~s@Np{աD PP<^IT{z 1/lr@0o;Q8?ڦ`ǟ·דf@>ޥ -o(X,&ȭP$L= wBXУ(K'{)$ ( PdgBCۨ852j4(,rvMe3d\J(3 VqE5(]x |j*Eh>J~)*OR)pIA( dV;}E@A8)"}Pqp?z#/>_}z|9}ۼV`xPP }h @Z(,P#p4?JP"P@0h( @ &@Ns@(րb<y~,I?LTc#%Np(%1հX`~c@e={ )@3*s@c 3HT`q@c &rj<Z#m@Z P@crOb4aXV I?JX`mh 2y<vP>k9YAe@@f8{@Os@[h|[h>qXV5= y'n|PNߥF#, 8>k Ȯs@f( Y '4h>3@X怎h rE$怮Oրd4 y,"rEJp0h @7Ҁ\lh q怜'ڀnr(@7V9MADn-@( }]O4Dm V̹+>j0omՐ_X\4O|P*Mڭ?SKQo5PlX~nkP( 5l րP}<4 phҀ4p~ 51@Ge5Fɬp( )Xc`h(_qVP ph @VPjG@4Il@Wu@7P+s@0h(v1@NGҀϊ0hրP ph@FEݚ`P$3P J1q@c~@~UUk`{`@dO(ANJ-vopM({ phh d}+6@Wfh #ۏ"SX_[@Nw{PwjP'u;9n-@AF o_zxCc@7V'ڶ'4&@ ɬ#5N3 z怊@(dP@(Ƞ怌 Fwb& H' @TҀOj)X0  怨pߖ q怩X @+`P(/ #|P`Ps@Z hP @WfjHPP#kV 5>E ȋ܀P8ؑ2o>ث@Mh@Tyaڀ1`U`>I4| |Y(# z2AVgob?(oJ qo4OMh }#oހ @01@8 y#rh ( c@(EȠ s@+`3a n'"ԠA9/@c2P @( ( @NA4րMrO@Hހ{er6ٕ1@O( H_ʑPXP@\٠%_s@T~^h EKEl@Gdրs}( ր ( w 2怍{P#XlN dVN~Pk`'sP zɬ"= Ev8&$(qV/֔xL#?J]Zn-@(] g@Emd.> M`ʯ([njpOEl$@ P @ހh  s@l "g@F~Zl h nϊ( 1@ 4 h r= nڔP@Fx>( +fch4rh݊&d:%P @P@c(l>1X&4Q `,;B~X@1, ;ڀ'8"?6˟[k9?z3s~| xCDs[_⥂a7 cc3JՂQHj0OsR\Ls@X4AߊPgLzo >EZ95DM04v#aAcaQ]ƣ`=*dA皢 *P$]68ހϕPm4hȠ#q#?ZXmlXh5H?C@FOVl}j'-PI4d\op?!YC{~l1P~հTnj2M` 5l M` V;)`l gPj$+րVP <@[j0(@T@T( Db`PhS@6P@6{blJ@[j $Xh.O1c+`Lm5a/:P@dY28R|~怾?[+y怺@#ɳz'c@0hx#eV b"1@S`#`'>(슶 c,"&?]zB hP O0( ( >U@,+'i V+@8knP pE+ɠ" ɠ"P  BzP @Wmjh P @(1@OqX`'j9 ƧD9g gNJp+`?Z`Uw( 'ڥD w[?m?}~c <4ڀj~p'p @2"8kPɠ"UNM@2hMɠ5h3PNh VȠ @( d <d4{P+@Z8?A@F4I>d />(,h ɠ,q@2cހm{XZ@(P @(zhf@FhlR*6VK/>wK5_k`Xݪ@9jp>BP$8rA@S?sPF?1;7P+R@k ~l 8gcP8a@\ n8 0FCjy~vH|8Q??R,߰,=qc =#SҀϽ #hl;qV8?J=P[>հH XkU\Fޠ,#?Z:Xڀ;s"րՀ_o`qP~x"q[d}('"q‶Xqol-X@Wm@ZP @(8ϊvh8gڀ@E1@9jɠ;( {`PJ2mڀ m_8Z0=#jM+Z{Yhf xj;z;ZBjvP8;GҀߥl( m'@6'oڀcX[?j# Fd}O #h ڧ4v?l;@Xv)@Go`,lj 'ȭB}G-Xg[VG'z5OklV[( 1lvl jX'kRۚm#m;(@[Ud4z@0j5z4-@S`3@0j4Fʀl'm*)`lvl V][e,P V#m8F 68?J6 gmh P=`  z@(P @@@M@(P @(Ƞfs lϹ`|K/;@ICQ@c$P$=#O@W |Q?[@x'ۚ~c.} [R( 4h@;bNVŐbɩbh?[@,z>ƀ@wj0g v .-Tx-6y QAj 8 PG4c@9&44v'm3V?zX)`T)-@F ?Zvրmo;M]@Hz3h ( ` phPAc&Ƞ( P@0(4qh P@F 4&lϚ;y+_n_hߵ@_@E`m46+ ip@F o@Z @ZP('ڀ ;Oր}\l4@s jphh 0(X', X6`m4i'i@6 @6P v%h@Fڶڀ)@0h H'&PUAAJ@W&~4o@< }s@@h( Ph%P @(N( 4` @N h h  @(& h`P @0( P@N#mj@(] -@(P @(Nh85h @2h 2"dP@(P @(P @(`R4v mj@Wm@6i`ˁ@MP @(P @(#m@6@0(h@Nlހmh~m~jp(P @2h 怎~H
_@( ## ~'s s@Nր_#x@[j}>ڀڀn_uo_h ܿZ}E8Z}i``}hր>`}E /րmZhah=q'@NACmh(`P @0( #m@N3`P @F( 0m4m@Z Fh'hPP(@(mqE( ڴj P @c2P 4`Pmh@6 m4iM, m4v;MZm4iM@F4P N@0hdPh6P ( @HZ6P@6Pmh@0h?Z(}>ހ‽P @NahҀahahmZ6(( -4` ZZ@E@0h'L( m-@(:%LB@8#P pmP @(P @(@(P@EP @(P @(P @(P @(P @(`P h&P @(P @(P @(P @(P @(P @(P @(P @(P @(Q 4P@EP @(84PAGsingularity-1.00/singularity/data/themes/default/images/icon.png000066400000000000000000000004641367731414700251240ustar00rootroot00000000000000PNG  IHDR bKGD pHYs  tIME * DDHtEXtCommentCreated with The GIMPd%nIDATH 0ѧ@::5%(CDdHhe -zNPVCGJkV*F<~[I6 'pVhބ#gzd27bV:˱ΣHXiDPjS '!9즠I<1 4HHB>iZFIENDB`singularity-1.00/singularity/data/themes/nightmode/images/earth.png000066400000000000000000001047431367731414700256360ustar00rootroot00000000000000PNG  IHDRe.zTXtRaw profile type exifxڭi\1n>w! 07]m41cwIU; OM%d{:ˈ_?_)ϿoKݾ>z Kg X|̗}3P_a~[-ǟB011VR2*ߙRG>S{^~]Qh_~q}nNzl*~x߸q뼄^`)ܼNH3e}SMVI%lY"yRnң q(ZқwN̬;sb0 _o׏u_b]12Yg 6Թ7u t8+ 9 HgpCJR_l^ dIiV*w{"mekV DV 2W;/Qz \f!p er]+㠤LƕLa׽Б+%LP >c`bvŢl*TɞEdj;VIQ]ى^ @xT(BSawAzJA>Hj=¼lT4zFWQ).!,728&ѫkdee;3ng~l\F% wGA1R3ֲ B7$$]LV"M*&qT'U’NaKnv]NjE"uQn4͒6QUY< aݺt7GE;"U(DHA ,*D-zݸOv[l* DX +Vv0w5vyYxml r H'fJPt( as!.:)!nj-cj2Pm7WGl3gF w 7ާ{H设E:#Әe\252Z969ݸ]$:4|^z6\}ah$z$YNEmM$zP).xA@{McSߠX0fۋ4˾wiK&-Wn[4 컧 jX 2sa4@bՆgg 4GwO40MwRŋ$K_2#mM1:\'HQ^ƿT0ptdxk3dVp`"}'?h1 F@+1aHZs.bpVF,]TP2xFlòjl?3,i[C XR+q e.JQjh b=( kgZq"OE-75R0$ +F( q,m)N=u.CbGZuO_HI(c@ R؈ _ ,H2hA+,I)@+e;lt63s4F i`i|2:Y=ug.6?l6؃f[dz .ܤzG[FEw;iMbx5zq$b!^I"- ;dIX݆W[i xBc(FW4|q~PӪk?d-,cRS``]0! 2e;iI4ـ簽KKn-t6άQuqSz NޢC۵l'?>ßwulOɨJs!2N,z/ˆtyS&嚐5s1b=?*!~S>XTO3D%wBcuL)S+M,) H‹v- htsJ&!v TJ\eG#M68~ +\tlx'A5-(>"n3 ,H:DU^ND^L_85WY\^ZU~ڈL=|3BR"shpGu޻y1|xwb%y hƿ= >MT+a#"Gt 5$(G@[~@nэռӛ SQ /tc>Ϸr.\YX<"A{f@RgCt ~nӹ-ܙ4xūՁMDSLppsyڡ9ޘ\AA1B^~2Wdƙs7KKC7eu>NFm ˒"V5?gzw-UCgK_heB|Y)bKGDC pHYs B(xtIME4"] IDATxkn8ЬA-.%K?DR|2|Qd m>/CPqOeyQa哇~pxw|l|lP`Sc grE1308eK(&|f|鱝ŴO@O.sVL0ń s.DLsNX+&|f|鱔i`[./ȗKu1,|鱼%&|fŸ4/=ń 0)jYFLs/?ĴO0 O13p&?n`./=ډ]XxWXoCɗ '`}caXqz` .&2 XDv , .`V06 Fv ,&No,WXXRX_ɗ On&\& h+_z,06\VCsa]oJC-MHCM#/CMeqz`.@'`_&&\d?ؕ lp$,NoE6;7( ӛqF %Mݸf&b4} ~ǕƋMʥЂ QacY/ oMd\M{3vi-cs4l;iuO\`]\@]<陵 .U?@kcZ# )Ebh|WnDqx lu0tk Od`.w=!4:j%W К >P m%4qn&U>\c0FӶv NaK%9\4l\m%`@ , (#}V= k >u 4`X֒W  0SWsX3Njƚ̭zw i 0Gzfa iܬ>:n+ BM8m(L:5 s u.'5`G񼕐@"@\Fc](=Wu qZ`7ly29M3٬d{1/GAk8/}iQC bςW1>65A "yPW<>5ZV.&Q-O8 0\+QX4_`.V?;~W.kN샷cZT6\+`FjG1dn5`Nx )yYShZM!Nc߀8W@6\AZ†vlm⫔oC]3pziqfB'zu_[i@".n7 V|Pc7^`盉Y<?ꝸ 3 נdT%*O@a:̛/00;w&:KUQdfMSŐ?[ yf/;p`lI xDLX;wR=ኳă{@E W?G yZÜD_@v_Ǎ8mrl'*CF6اZ^Y tkI,7:OŠ vR8^ 9o ,JkVXoOA^i^?,\x^T4S  rTH( ]{o`Fۏ,A"/Ց\kvƖg9[ڪrjvˆzSJ3l'!\hs\[ Rrw#-7K }`» !'gx;ƌ\2aO(حs7랬D0˺D/ v|F6t~EZf'NL QRgaiaal "tJ#Ec ByZ>:0s+7G,/:|_aDYȝVV{ǃ^OJo 0ԏ6Ʌ+I>a%(h]<,Z.ssԭ[/|!O}d6N ^l2[t9\ict:lcFhvln\.}Ϸ iQ\_>>dNoՍ^oMK*ߺU..5@̖ 4YjuOv:6֯Ů:taF_YǤzWgֵ 7YZ||Z{GN[ɣnsfIc4K[':^(3$d 7,e>>ɍ]y}!bzMŦ tb 8}13CUpJpo_St9̻j?/0pZva\?YqkVB̐9'5/h5oJ\}r1Psil|MWetD5xך7r'鰱M) #ʵT.eǗ[=R35p#]fctkcO9 CUh"ŭwW^7ڼsFN+<ʎ aMypNJ1x|/?MQu&|}NSe"{mp6>`oxo21z>v̉L!ƥ-&LES ݗHW~dv{ & "ZVy *&y [AfBS4,y8{W^Tz!˔|c׈>+9ߗ;e0Kp\)hNG8ت^@Wݿ$^yQW {}v3~DiMr`z"/Srg` q/܎7~I 糇3+n˻^χ g $u,\GSy^x%{9+=g lۋMOz`2KƟ}.}_9v(E5J[xkc2?+:~%Q#1g4<xF[n1)ъ#Z~q>Z7'~ǩ+j'skfR^1cymv~[sL~`rMͻ.~ @z@dⲠ P2+O6\lcv˱YD.syM}BcG~U\Y6ꊳ٧X~ ?c[,?l>>`5~qȵ3u-`vWf;]q68`Ս$:q}_Evt_bYp*Q59~\9g,<8'<ưU-k0&7*8U⛉5>xy^b٘yemrzVyM^`~דˎo~CZ63[JG㝣i~ 'ҜA%?Q._h58uꯝ5 ,O|Rޭ~E>=0^9ɊkD1ws"tF_}Mͅv#+^CU.VaEgk]s[Nag߄j>"v#_as"S_tTkŃjァʑN_l</ʷ W}jj$nQ4*x`͠K-˞3>h9XĦ4_0c(uQ"%_W?0e?{t9r`ڡ2 w |zыJ/f`2鮝ϑΕ9 Q]هDKdT}x{Ta7o#0MQSI&Dp%_jQ6#]r2a;Gpo1W}j"^ lg \j+_ԢFϞ?ovyxt*7޺sdq͛/Jv `_/>yw|:]D;s7O=@Hֺa}>^Ƚ|яF + [o7,;4{Ssj/{_u 7a7Y{ z{; 9+f}oէ.7@n0'ͷoGm~BG?24gɪOKo4_'dq` 2,(Q{;lOV $y@8MY~s.L ֨,MRDS *OkglgֺzLND g hn,sޮ 6S| UZqj4 Z7W3xp{Nt[ni;U"en3G~xUv9\b=xqC/t <~g"-ۊz]s92o̱gtU;x(r-t5<@LiMp`mvZFgByt URaS|t 1ݳ<9 N[a5JNC|GYB9FΉjᗩ[f:GSo,~4rR͂Ƀ2 85 9M]devK8<S.49JIS_o?E|V1-%aYBc8 M4.MzL;@{j=,9Uň)[+vrdcXѾlNm]><ЩՁy=,g+'Aԇ5 Po=wVBUyqSƳ =nF?i~` Ptg0+= J[aWqMVo5hRv B3~Ǖ㚐3B0r}Xc取u] [f1>MQU@js志ܧg-<*ns٥7mۿw¡1k >P^vvٷτ5Bn#g+ ƛ0KxQʲx(6/jP^k:fNRJb$g+쭆]3E-*fr f4b0a? MN< Ǎ}KEcڒJ9kX,X ӂl0F :wd}+# TTϦX }z@nk_(# A%/p|ai1Iw"|")@yTJ^@۾%/VE먲:3c9Jk_o?&NKY.M} \;l|#.j]3At,Qyb:N9E4uY7-v(mpаi+s>gGkQLXw%ݾ.% Y{Ƽ'@yyW&~k-DFɍn>Pmf1{F'CQTvIVe.#U:Ue?lpv%[Şp: ;19o}xv 8 @+?#$=#NW@i^;uhplƳcZnd&n=0lr= 圔tnz=lЮ0FekJ髤tGY7r{>>7m'/Tcɠ[ZrŊJsdwf㽒>1힟'og[t31Z`y]֞K ܋0rQg*&f^{Y~qH(o$@4ڭ]Yݯe85V{n |M>*3g) z}~Q^=MpRe`v)Byz0 fX,EQ8A)PNjqZ- .# *ȂZ L@lth ._ӘTyn~Z}U Dk%Kr'yت(( #՞ У)g\\ =)VEXCmmEQ˲;Ihx%\8Uݰ_nGhX;uPe' * /@|3Msָvcүp)_mCq 5Qc3pO)pHO@ S L{>Xm[* * IDATfRZpUv K8;ү28S+ZS 2(*_ۨ8OYւ-֑fs$~^;²2\w_~br-h|CWN73X@ H.]q3@-~'N`nW  x&-UhOF~X5&~`d.kpP.. y8swja[)kEдAшtBa0'5t-}eSh׷ݣAp#0ߞGG;~wa1_S D~BlLkAʔ2a HeyشxtLkAa Lԑi~ \ 4_``V1sL) lmjcqQ\iM`3z;yI'`&i@x#EXج;x`.d&g/AhBk LQ&/:aŎ4 ^jCO@ߟQCz<220<7 X` 0곞N#m.|~%NX5* UMSx_ʋ烇7Qv'G&LOQV:Z03 ZR^ࠅ߆] &L[/PkA.Rg?e f8+W4 @j.3.~+O@۝itozZ0 >[< YB54 O}20H3~Z vΪQY.B[G_.~h,Kȃ{ktESVѪwRy1W܎1p ZeʫdC|?ofԪSy+N@?\{*`V=4-\o`J'YR \i u[ =ǃQ$>d#[7VY)Bf\iΠZ}=W/D#dV?;@U2vJKHE.4R; 3Шe>Xi֢)Kă`HL#50CՀw<{#Qi0 ?`}r<AQBt|FjAa$*mQБyc:~Ru Q!k1%-3I'F5&pҍ;Hw_K w$|L?څ]Eٝ-z}-1 ^ $\κ}}ys4}Q5f-wy*݀5پԄg鮾P16?5S)b-y_p>Q(p6f$A w~uC.@H*Ժ5rVQa\ky4 r*-9z(]IB.@i+Lgg? &QD7!mFJa\U[ y֮䫯>WI"mR=t"{w>aS(m|׈"adH.0*5>W=m=i0ď?2$`>IE7@G΂;{&*9ĺ9$ c+`:<^Sq~5E<82?瓉acE"ݷT'`=;L(U]G lqZwxz?e[l6wQWDC$Uɲo؞x%G|v_+lZw,%`op>>~Ӹ֢!J[ нdAkg?!ot:l\eU <|MSQ O@}-=aTA90v7(ۀ)cD0ؾvucba3?mmZ`xqn7%s#v74 YVޚcwY;4lBZzuO]1O_BX~7^|K saxi]3@&vŁ'kIƴ~Xä;(p}nt_ j7>Yv785Jؐ:Mj$he@ݹ6/ى.g? NV Ӕb~~VmTpSpu-(gƦ:zyV,wC-u# ۠u Oj{Fأ+~Ҝ|'l6Ι `3y}#YT73rV6'8a8凛uTj[toӝ({_i22`2onӟ? _i̽lVL {<'0K8\L`:.彫 m\?'_: N06l۷`;1L*~rN:[ERŸ[a /y_06{|`MG6 0Rip˖"A0؏*nR#Wlu h׃mzo2~7p#l޹^<,M`tmgI0x&>>\wz۝jYۢ}U6^ ޟF`f 4jb7Y7YUWL͞_q pMq\^a=۾JC;~vZ2v20l֝u{|պEɰ\]6< d\ DiPa) /n=7zEf^,&Wmʬ=_kE7 Km !oѩ=bӿ =ZU1PE=ӿÓ%& ~WoVa 9\+[nCQ/C:4k) m ިjs۬Eq_<>9 '` SZY }Go|F稗dy~_̶^V{E~nn .M/]u&c8+vUInz {惯'\n'Ŋn,ʹnWGf8{f;, ,¶c+Sl.0<7C1qw(`.6`CWe&r-,Mr 7˦py1BfYvOfMa!+}a?0˾9Q>2򦫻*uÀD!Ww;1 VNjQU&4/G688nR{\n<^ 0׎iaxqȂ{7]~٣g5-^aK,Sty,`*U?eʻͺ'+ڿjn٬<*,M sh㵗E,>ݒ(0lJ2Rܴ]0)wlXK`Ryz1/_!3td*O]/r!/3R@tgQDh LU\6q!ϱ|G*Z6LqQvgʺ$L+=Rh{u|_ބ C#Gw(лi3J|_ބݖ=B.T!؁_:Ʒf2m&C"`;ٗ]&QpO(/VhOvP8JCK#v{8_ ŀ\Y3Ƞ/ʂ{`a7:U 1 Eq3Y`!ʂ{yo^1 €8b"`|i7/N-В pAD2MdiĖG_#HP `!l24^@"}𫁀r`j.cdωaMs?i7Ds_ t2hc }l QoLiD yR:I/#MaT`犤6h$4'[S'xk9 _J\Jfi $-GHcWά!:W4"p%|$s);)h?pI:ӛ@±}_7#!:?=19l&I5"MZYkY%w @ϲ=/Ȑ W4(p+x3-xkTCnX [jɅZʦ:o=iPjIKۈy^bd8EF{;73\MS 4Wv4J_KƬ`&_tq0M*=|ܲK'wYxM  47K޻4VyfftkV WM·.5-2?P?O.s$Mz5`e ,r?3?x7I#/7إD=@j+LCyzʄ̻5jf<^Dq~e)z?;&sGJxeOI#sJm6jf=l9(~,hӛ@')w?חL\O.4f6 ?f tpE0tKЦ@ 2u/L 8] qKG `q&iYOPԤA7Ͽn)P Z$?B @q*g@ M)VaR=;Fos4){9i0; <ckPۼƳ`T Q8;@ ~PvC喣P&,#Nbunχ0*M c8Թu/(0l0H'Uʀ2^ӛipa ՎІqsskQaŜT9ShM .M0df;(s aCX-x &0{ښ9gKYzm>ݙF٨  /Fh ~I̋#fTA ~mk \)aj+Ѩ  "lPTa ?av̙3&M!"$1Fޒ[oFQ=! &كP-#!fn\_ Г /YnxogwV? L~mӍ''ڧܝ烕de$@.c7y#l޳;=?+Pp',6r̩;oF})1Mj-"lt_{o̻]u~8|@\2䷏W7t(9&O7ZnCEҟ E PzgXXX0i6'>*yZ\_zމt@9&sy_2 H(o%7J5?  (W نM;d<~b=B,ϾrX.Bѝ7!UZx)ḕv0O:ZCM{O ?0Vx T_hCh?ƨG҈)0ZeH:##ۖh?6YUW0\q ,Rl4^O{]|۝q}_h>/i8`T'IhdD~tLkNJ#$06hlKo%֋-qh0Һej.UԄ~56l?/tyyr8>۞g8TJ;/1ѦѾ7V6h|ojCmYT'[aԥÀu $lCPG9Lh0-.`y~__-Aŵ㭵9:_#H 0)k-Iؐ`C?^Y铖0O F2n} TA$ݖs*S"nm!&o%mRoo_L(nyl'3\c)ޒ +؆ EAgƍm9\i8`G# c>QadŔm|qKw~%׎^qڐ0W-K#Q!fn<[7 "nf JgAri !8;yK3Ol0+.>i \xK!B00cNfϊ?I\ϙgEL5k춱ӪsN<(/>,%%gv,rӘ+CtRtdY{ԜM>Y Ly= syp3H\SFq݀?fÖ\`a./L;Kʂ|2oP jbY1̲r^/~iD " rH wKSfbe[^rOo\?ʿE17WFϖ5ڟ>Z\;pkF 0!C'FWӌ q IDAT%_^#3ٹЩȋ_>`^yk3'z6c~!KQikuaƦ%OAa^Ĉ ξ;g (ݧP]pfG5< Ѽh"e (!Rz"Iu5 "~`#N'Gcy}R60V[惯~8 pTpBwX!c :y|3LcX #x/? ׊?f[6X~e46{ϋ_zeD Gj?}="4gʰ_>x,}#F >-Y;0Fn "M3glŇH,K1Lh΋|5 .4(b}-{[C>cN>x>,0Pkb\D,OpO>!7}()`iqz[ځ\;< f5"?@妺i(.-=}#uת,hv̟/8 & ?ӾǛ72ݔք+m.)S?K^쏋LOPo+NJ巏|?ZI]8/vɽNtx~dz<^٦թ¥_eK!֩5uTmq~. a@WA )._iPMv g!69;>E.69tW{wWxX&Cюzds=W? rA҇rk4(@jc]oo$yuG;*Q50 V(,쩢PV ]iP=Ԗ.7=֬1ԍX^\ɿ Cr1G:ۯ[uaہK6P>l0ڜVֺHEfD<-gqL`$r(,i''~7+k >P \D,nV?͂G; teu_qX(, %/ȣƭgPhPnRRiܭǭG'-tFz `<1tk_ScT j?a^_1^(@7.`㑆c Q0X:yO4^_PVyqQ/E^p=p'*hqPy}WA3v>[)XH1x|^*B歝Ⱦj{{μ{nWde`w(5Hw;) ^ǖ@Ȏ1WlG*Ue G- S߼(wtnؐi.ϻˢP V :Əgdsy8=8pCT3>anc9 (oP(C p!}Bt|5 t%:lҊ4b{{V/'cS |b˺.(0s8]X^c*.qC疲)1`l*iV%^lb_~/%JQ^.+!p=x1kM^0TaOsq࠰ǭ X8= 'U@' Uhr3n| Kxw2p/$@ mPd$V O?0`ח! gg2`0vŁ w7;!Zv}IJX@ I p-Vnү^~*w|왧˪yQXތՒ/{+X C2~owk|*rח^(pr!V<] e @QSo'[a `[5>~t5(#2w`ra ߊT0,1kǖ`Up%+CƍO5zZ4%r1×e.]vKG)n=ºL&VoT=3a;gPK@H) b>זVO/vi 賤Sqd#sGЉ0} D>37 8KX_k՝yk4/<+nx@$rWniu4n sCV -(WLT)PwIo iX D.Tt=}'^\ z 0[pOcĞ`rk<)iVz;V&?L# Wg&8fbIl\@ E"bA_' F\j97֕O ijCq}$fx4xT}o$??1-g]a;rGٴP[7C@ `[Ð 6NVBAcp 61:lGA@%9l-U룫 $Ɣqz`>S=Lc+ 8E .`[eZ] RWSyVe~.#08Y\/Δ|/T:_ d[y)`)%qD=_bߗ.}W0--Lqؚ5^Ϳ!6fZd:͆3Ouw#.oKr_BK sȽ '2xP8)'Xx4i~]ȅ0UsSAlřLxF@:@?ry!|\5>Op:jSZN

zuŜUVwJi9V`i9Ua9"$2aIav&yP/K@H Hp ҲD./]Y a>Me/oK"K&>9wG+;;iۓH~-\ri+u td 'qc ?^~.~=jwJ|XJRCɈ'ԃP{l*Vx~# i(Aܑ_Fu1"נja=;H TgЧ!=w7* Spv8KU_6_h]1R,?3v=x2`>H ܒ_rnɅBrjSOKX7Rܟ}\=a| 5ԓ >a$P:ݙnI;?jkE RW'??Sۯ`|l~r4Rfퟁ;ElZ ƨH O,/H-MK͓ϲk22 z=ґHϗ//%r緣!kL T 5{gQ]4F~C aM@ZN2ܵ-W97ɳ7`$fʎQRÄO_XRWO6 \x /T GSnj%뭴dA i)k"Wv 0Ij*EB1AKY eإUZ% ~^2嫟fm`}igcA5 R,<- G˻i-*K@k30\x (~ jbZ(~t"0A^8^+{mfJrmEQ,?b@a Wr/h`MkWjd#YuNpq])Pu3v]9Fd\Q ɧ_cNTp:ޜo(&tS#ֿPJ *P1.iA^Uyf- .w$T GPDxsWwڲn0 1w#NsيT~'/)~uOڥpO v (&Co`Sf; G5 2`zF㧞L$nc@5a o+ږ[ 6:G x/ߝI7^OTosJK;E!xdk"p' K0M5o|WZ(3ZhvEra@Mj8t˅7|\}2bin\Ʌ0MXZn8q#p^F~Ton/ 3x)i 8iKW`%b@ep\$q:΄u]g[h}# 4j>nusP_\_W>mr +%5)P7OQi~`V1m H;@LY;n-pS1`FLX]6 ͦ#< W0`R|-;9"Y4 gL+X ;"j^9y pWfΨ - 5 }HAB Ⓗd 4Fθ> gE(Nް3kai:n)OUU!ot 2ͼ`Цn\vn8/f%Tp+ $T}/6'XfoĻ3a]h6v ٜkѐy3ΐ|m'5.NSBl/S*a8(EqrH*i7'{vRC xw& @79C$hȰ`<'Qphc`?l&@rpOs>*ޝ BV4B 0t•_~c2 $5p$͐4JdX Rsv0m·3!]6M*ْSOGpיGBe^|&__ e! 0+]g%/i1JBRtXX^/D:CC!a }犸FC`\ Kn?_ـrnx4c^RJA#`xa .@GF+`·ty\#0sJ1ua 辅-{0Xx W-@#\A} )-@Q:Wcu\F;c%)&秿GO - %\x P>?Mha)?ӵ^9c Km*Y!| nOm0zC;xD~~La~ZnX>w)%j{6jtr4P&Os֓;C8(O0_lIDAT|Ua{J[v iXN/;/W#wv> /%je(pUcy0*н<sb8Q+h` 0f?wD.<ޝdtIG%ಭ0`:qn | ]H}L3@L%j|pRi `4-qO(+ھV F6@e~PMdd Tx %y0Pd<e1J[ܲ e8 gK z*>5_!A5x04PYkxnj4쩓>YX!t[-@KOg_ =}=cGpyPA,<x1t;k+}0> 7w-a@]"G@Q~P hbEp~P6a8GUeb-G,~KKP0V $-A!b15D,fckhV,PqD 6dA"1$#Q 2:g1KlK.bؕߞU QXk,T2 Rū(et@~ @ 9ETz `\xmu}ȹ !KRU)=1P0X=@D(04E=FD@bh7c GK M@H͏^9H@{P͌/S`ÔQ@5Lj@͏x$xR 0Dvqʅ\]w*CO2Kp0|/ UjP$p [C ЅX=!4y@:GPWHB+2](P0@ 4* 2:*4GW`Z3 @1*}B+ҋQ4ɅǜUqAjsN"aJ8+nzg]G.<  M'0nlpX=ۖM6v:"RR O5e.tBS ΫO ݵ˽Wӏtu `x3}z/;z"R4Pzz&} @ ],ów@bQ 0\[{@Y `Q9PˆvO׿џ~Y $gE`Dqs~AOEB@/5}nz{o[ 7}&?nyCXz'NFOO v"NFgwl>ٛ.w9;-c擯.2rX=|#O2`\~cqL-7-V{`݉$OFk QnQ Hn&V;`*BdJ{Iſ|_ DЏ&X>ȅC09; 豪0TX31`F 8t!V2!?,3ȅ=C}<&cK\xX=8;Kt4…L!WoU;E#VN"V撫׉3'O= b ~3s!E T%VcrX=S#bj~ 0.WCKP^f@9\=<"VaZbEAp\=<(goAp  gx/W3\=<.ckrh8|E`xX6;\=gXV$,<",p%c2O0CU~XV:O \.Mr \[;CledO6:7AQn+?@#@ 9ԕn3r }oO@(@~tK3S=KCt@x(eU O`?\2*##j">Lne1(e!]J`+;%č n  G0@}ue9,pWM)+,Dx X7@Autۺ~E pi2^9?BMv{(_t eBA"{&3w[խE0jM@zu /EX`D7lŝEIjM/7T31Qq78J4O5,j/7Y'CgNϛ G-U`@@E0]Ŀr*B읶:bAFCI=g;C?T=wʄ|mA=cgyY6 ʪV[}wڔnqJ'rN?サnk~Ϭ}笅2YS~ D'E9#c12nʙo!)gGDC12O冟#s2oU?e)usJ7sdm(%HUt!6n8MJekW eYh1 22qOG.lZh>[k;5[Kb{dijHw= vκdlF$T 7u8[ҽi|z@-hYLtmjf;TFn@4'#Ig1"cqn_%{yڍ+قo SV=bTc} V SYh,8/^g:4P#A]*iǷiϦ'/sEyDO}  v$V(+vwS C~9,-1fe<n*!HW4bwe>i,s5Sxz̼|0* !ӊugPnȉ"6(wed`eY3B⚹oUֶ4֝0Yc!ԕIs,P }cJ;=خ PۧF@'L Dz) >61 tQPHv<0bW> ߢ4O܁DDuDeHjf͋r R8@oĚt8kP"nq${<Կl7F)-W1'U}:E% $1]Ud2yE; t3)J( ܕ:x& h`:.#!,BKu$`ȭ_|ރE፻0#] cvtvڜ3̶}[\*RʈLJz%1[-R[hم ᭒g,yYS?ARJ2*ߚY6Qǝbb7lrCL`K0k&CoDJho쒒9PHu:뫖D!"ڀF;dWڪ?J;;#TarL&#X¶BG51 8:@ԓ;Lu; !ZN9t70/zRXj;²r] U\RrN{EPBճ]#Z;Iq=LjPSn- 5ݬ6)Rd%CJ=tfkڨ8Z!tW%UQ;D#3A̋3>CPs'-aZ[UF-Leg+-`3Y.N+hbBگ(iM`Tb —tvCތ pUU2>4bDցjP`@a_暮Y 2[E); d~F7Ch7k8wX 5^ i%Mj;V2?S?MQqdU1upy #IQ֡dS -EFј)T0Lր;֡wWA m 9M^ D+Ѩ,zRcp未ZU$ |{p6HLZ]YŒdVeqҞd iG̞⁸ƎAx-YqBBơlqL֝M+- g]B/(Cx`.R$-ǝ0ѣ%T4L43`Si9l]{ZHb1@ң!ڠ*bwmޕTYR0J&Ë̀ݎtQZKjEY`Q0DgfqX!vFp%[%pXz)t5u'bz^.\QӌǨ;4>0:89fxDyzn g)-G$ CAkh ?S{FjO']1J"9(<~ e7fOC8QL鄭&."3Zp,ɦ"cF }PڤJ@-8B/p9'"a:Ɂr"Fl,s" /`v)dž5pDGOut"֛@fK!vݠx.|@ђ3ЫaQ"V ;0mr7d>H߾ꋐpbz^A|Z^?1ɀ5̐ % &&bv~Ռ?Lsqvԕ~&Awu޺6L$,%:6@N~)Cg: 8㥆cބH@6wA"<7F2Ƃ;HbE<:8xzla < I ‚YvTZy~]xүw4AܓFZF[!F@:ǙeWȐ0ٜ:L/|SjnƩ}9 4NJȭzZQW/8f9 -2?m18`SMzQَ LRHF!t#ԁFvS<=JH750ݲ!1uML'$:撛I\M䚠 U<衣\uzINQN&D?G'5x ꄽCah ,y*f{ ??cB^Cs8zPzcv3+,)]Q8_8QrGH*N23}ǁZ ])SDi@ҮvUߏlM,)DI 0 tɳNzxPG::DfSQEJpU/Z(54q^ҁB?Ir;;x uUl ?`o"}Ettƈ^bG__[b,z=8Ց]P X]a rzw:EuFpNƲ.'xu!7+<|D+"ɛt}'ModJPι 4Cu2)6Std|M$;R&Sx:"rKg b}އc i56FR;9bH,Cܥ}muŔBoddN_GϜ= pHYs B(xtIME   A+~ IDATx[㸎̎\(DߨeJ")>Ή1SmI@|ןAiNK @G>˖ @^!L78z 967O|h[`U]0,{cGh1W9WbX`2yaj ``7k3F` {t8 7DG87o4M9z ÷ٌ[U8 gaX69ɫo cg4lp]^}c;Z.0pJ^}c;X*0v̳\[`IcUmq *+bc`7ya` AaKr  fb+`yaؘ,*1`~L#1 "+o7 W@{ xRxo>k؁*o7 Ԉ;l¯{Am ؇h%Ͽ% kpO C-6KA<#?X |h*ϼ8 =ltg^ ꅛg^ nů cJr3/q$R9W#49e+`!XD4̋xw4=&PXD[DX0B*xب cCXTY5io`Օom@ڒk-@k@æ`n1>5d?J5Ӂڶ@8IѓȒh@e8L''Jnho>†hQNд0溵2@78U)+͡q֪Jar\53 8-E(/F#p Fbi?Ҁa`(`JNtH V L*4; Ac`zNEt7R=D_7|/R`rv Uo"{fF xfsky$OZxCucrc1dGͰyYrl~.,'Ts^i|3ݧCh(,*l%& "5z7t U@eÒ&, WUĄfi[O[i{r˼|nƏW 10N=1V#I^&" >1x.*r(|npйt-ڨ:1 BSV]t;x8klU.AN&PxPT3겴֮ʰ.h<the^<6EJ} cq:Q)qޮmV?@D,D5UcQкfRX7ڪ@حQIf[葦%M7pUj({s]'cia% \8:TV7,xRo@|'u.:D,CA GĞbs0A͝)H?1 hsPYM ?{L a]i:_\ӡBx)SN~́jW'0N㡍]\cNYڻҪu~7a\8*2[[gYoxpjzF#0B*z׌p lEJ%EUu %=^6{Uֵ_ۋ1FO3x hY0i ]X},f}X_l;f0EqJCJ`k+>gtm.w|f@4ko+gesXEJי(jcYoQAT֓_&븽NB|߿Da%4ˎ<}~ܾ1P%˒Xl@huC FwkFoSL5 2ﮤj=j8+12wWnBB|hy4f?ti6j_cژx U8SBfﺖr-Y6M3_UT9̒Z'`F>y`tذ~5mg@b +zN~}RWZ9U`h}Zaw%ӒA2jI)ksWoR?}?7 nRp!lgŨwhǜ}9PLlw'"~(,v@k_?gi S+yUenVBK4<>p+T_;`'n/&9>|T0T"r37{oaeio.osvB>QS7qÊG݆2 VpAtxgee־q{oiKv~n~ "ʜB).w݂1p`;]zQ:?Qr!!P#aƄQP*.b;?%fx: #@*@,} Mu?>U,bRu,~N2 0QCo(jk<=.jP21fTq[dkb%̴rO#GS[68Ku/w\;j#}{OŹh^αC)-~LiTسؼqϊGM lŽO75|{586Q?C5*݇MW< :ŧGϊGhl8rvMLhqj;>{/s. >s8f˱&+,&a0!4vSYs Reԯ y+nVaF#ZXc9,?E?l:#@B0lNy,ο7.}VL?b +yԽ8.c]nS:ӨhIsW4B,fbI 4 iԯX:եyWTΟC~3&ʫ2sjx4up?QSghsZ%|z HO?sf΅ykT;0u.Rre/km7Gp90c'ֵD̞Ģ'FOGȧmh=`' ^)3,bgۡk{ǣ]"~|E+#(X艢ŒiC<+]' l?m#mc:)?<׆q׷Ohv7}C,.LD=@Zla9{'_:G6;%fb#^hTh](r6-/7m p3u0_!ȢK"ElߑzFօkj-/u+!gNqg,-lÊzUֵrkj-7|[v*(pa($)75pܾؼD5WӞzާnT_^G] E 6/u*M7 '?]ǮP_YVb 1Y:::F 8Y{g~A>,a57/>`e5ayi{s {,OwʮOt _Kz;IQ\ƩǾ-ܲVΪk4D aG"res\}c zfY9 1k0/&5v aɪπZ4]얓UѦo6*+Q 呲CLW]e wW*O7{M?Q9Pi8xKS: g!3ݖsؒʷ|:t׭?B kWAB1]Ә(.Ka %Cf2+jJBqzo5Վͽ 58xɉJM5Pp9X K[Xt^Аnը/S]ٸxY&j\J+g75PVv cs/UnCСiZ8>i.$|Q䤧Q/^f[+CIg }Klo@ѨByL8j/ůWuE˧@ϵU?Ug: O'iT8*0TE4uiSNΕ^,MK~uv ; b*fzjb 'gY5"%V @u:OW[;4&)eY(vrHՀ#oCU] u%V2ko)ïsL \ GAf@R~,]68IVNIQ77寱sW>4lgʀ>*0)%h$|\ p2#ESU}4{RSvIy@zg>!CPY굈%{SOL5;Km6P1aƣw"U]bV13zMJ?0)ljӜQX|~Rl^78R9p:Z:%xUt(>>n,蛔v-.RJoC^'|Ւd́.EVD{Z=C7EY? 8_d9Skl:)>4328DqG,gAæa[P)&iį) .DSaA* <,r"*.5O )RPSJ7ؼհP^7曖@e*q5TI,YPpO$cE6WNj52'br xRfFf4l\(bgTL>4ikSаP@O1|l (?z)㻖o6UO h.^1<1Zr+(r$RD;ա \0R+br~贁Dy SGE271NWS @l#2|Fl5ްm( GnP_EJ7ySig`1` @2))Zw5sW?堠#ET 7`]E CdFX|zY\JF#`NGHr Y,.+`DjGI,$UhTu IDAToddޑZ!s;5UԾ" U|qT !^5"Ph`XmBv HX*jA @"*4hbyHpFjX[[~,Rnx 8Ui2A`b4n_X8Jt@P '_Iܻ0y~ w@qͮA`Eԝ)4%@xW 0V:M`>_F2_)³ L9-`բ@\;')1g>j~xZ)e zYR#l<˯g ;a#sc`JsS?e5)w);L]eeh\p&J y/SeR28Y5@?/kLZ0ʐW+nY4P0W%ݻz4_ FNyqRqdTاGoI5B#@?)sYY0crڵNr=;hqT#@rWRɡz[-o\D㏈w .0ek;?X=9%C7)\8{6k"&l0xxV R&bmZ>?#$שkuVٙr"Q;!"*}z|K8ģׁw['UfF)jF~#K0HeHQC)9L@lCf;6QNJ|֐IxKQl 0f1*6CבV[t0lA2^  +6iJ՝Z)7 (Hsu5q?+[|+`41}~۳^.oۅk|jVe8W.gAŒ4z=~U/?}ՈnrJRU)VYYQAV+Yp8W?WsG V*7ɂ*@i1 )b?ifGój%bРķ!Ic='<^ C`zƖn޾76^OkKЏ!SUX[*S- N~J@Ӗ'5v_3$pUūL' ξ2+͗k廭?2 M1zrQS}V9MakV]uѳ30k:Vrt6x&8/V?8+sUFW"X% 6x|p@q(qWe @Ƨ-V~!90 в$bl\wnݡzobM%,BMj|>}] |m _\(Emh4oR4LGgBT<Τc s6,*#1OTM`e=-7ۮd`2#v}pq fN@2#|V3paPh-&[\0mhn/|E A)c0S[FWڏ\C;;$v.|@ҿ1>(:>Ba9]6{3TS( ]xjW1p޵QЭ`,_d=([<6-^ۊ3@ZC1hiRGd6u +MQ0OZOzS1oC:4m:fV{PʲXovpK10x,x`%K+aK9MQ7!1=߿,{]U9>ovA&Z+ MI QWoY2s4nrJ34բJ1̋g'L$#/Q#g:7:`[- @6ĦރcοwYv2 +%O`T&;o 0@0i鹐t<%}3:9ſ4~ mI_R~zzRE96ybPR [q[س:z`I~PyylTY߃LH% 7JnUX< p_lӐqFۤDm&*<QOZtsm`jX;Ie@~8 gkSٮ1'3XFkR[MQD6;ؤ;}0{VWk(8y+bk(EKY|uУeVJQsVhDg`X iPSq(&ⰏRm|l5[O2 @ \E%`XS(&#S^_D78`"-16 050J4N^veøv# 0]-CV2KLyJ 7~U <_m5DkEa&@OPd#*X5&ŧq#,~R(0o} ,{T2I Wmū:Cq=~`m#Cr3<G)UA@/mn'wr=/1rvOe[1ta@Ew3sՕes0&JYU,0y_ſpЊ `*s 0r 5p_ m4HYhԠCe0(.׵%N6QHX"qwbZ3,9I1sG #`XiLTr5ap~7Y Ќ` M!Sqei .3V;qoϥR hBF~/!0">"KI'~50XWL0V%W OD2*侔po(ϏF@@ ʷ!F+A bg+af٘d,B֍WL~=C XĿuI]gXo ǎ4%ܟi$,uCS9n|7/\$5D@,$ͨS뜸})HFl dEТ+v->FyY.>hA `r$޼&zjJ08@#@&EV^U{r :YjIX@恡(WuPxmbX`k3p208@Gځ9j`؍B|A՗K;P=o 4tsck@$W;n`aiH-V1 *|_FrTC9߇T s=2M ש͓O 1z+`.˗'z;%(;5tq<.1+|5<4js tMzcV).޵3-굷aa.P+pCI0[~ɥ*Jx Om 4]VvAcߞ P^X!fǨf(~:zIQ 'k/lt͉ !R_z1ǍQDbnfMWA o/=[Iv2L¶5#r8zHymqpVa^<:2CHR=؇)sm~3xX1clbxg Q;FQZ涁Y˶yXSg\"N2@cl ШEсx9#d E[)źvJ[9CZxJЙ!v}&-o.43%M#p0Qa6x6K_BNگיg4YFNp[@Vs{q#4Wu K| sfCQÆesfVj /03+e=iN{@rtmFr:X~g0!u1Og+ǾG*ٓ?]i|(zzr:XGڠ<ǥPp{ǽFm{`ٜmxJZh^ *aP`w^-R`-'>mH6R$IV}l~"q6aT/auQFkdvNٱ ];+d I`l~>FZ|9dX泞zU 8)(VK]Mqxp$$0C0Nv#~q궬z3>U6N?}Ce̪ ɒIj$E6hMݶb-hpRhF]:  ̵qX>+䴝3K"Z)@cd[+/?+v|IFXVH&`C0o";w?a P *0o[8A{IZ+3CF6!xqNS1r Uŧ?ߧ v9ޒX/$SpkUnCA qlTjb]G΁7}y}fk?i)G ;vŖXo5fkx/ CUl|% Yk,Ţ2 FRer'LYl96mjz`rԟUY ZgUa,pB:98Q  gmbծ'x̼: . }9j~s' 8r9X-ɲ~(+NT, b)fhܯ}u&ߔR9pE#/bgIRMN؁oԩ}ɛO)~?ga*-I |_oMѸ k,(ZƩU8d[٪+lSP?ky5r,7׋JpFQe|{!K*9Qk<8i2۵R.wP2cŅQ΁)@{|_y㽍n>$χVH*rn"XcT]ī?/{ˆe˷!x1]1mkiks u>T2iΒ;X>s?Aks0J|_t%!0lv`ɪ)T άX}Tcȹ蟈y(Eر8h|3g^`Ւ)aϚM#|u_ LG,;PAU-]]zfT9!™ba,Ay``mFtu q%'6|t|V-6ζg2%D"/d<}0*Tk<+ mԏ .`*I4i2!7̣vՑZ{B,X}thb(."^:,jWM!XI'0[ySgjy `+zt L+"*v%?# V` /N-s5%p)Ò%OVM̾fp ,N%9ثȋ=0h̟˪ VqHh̨bW n`X0ԒX ,-c9lZb8G8SF\٭aZt TFUןt0 p>ܛwJu!k㿆1jAKb-;p,.1WЎ/ ?cHE`TaXb> ԏ!οkX1^ˑ^<Ԣ*ڧ+WꭚxRZx*SVR0 Xn>+h yxħ$_h*MY@Z%>m |ވxby'Je ߬a0JMX=|')K0¶_TpD(n{4[ mu|><nԔ^X$q&]Fعqh? @;Fh|oij eHw?W+0 E7mCZP Qopà^25o kz7iS[ byKSooyPv|XopQ*[Ny&inQ1ܕBťM6)nw/>'~yl@|ٺWUx|TV8rWRyqbQ`yc r4-mjAyfȀ`Ouߝ6Ύv45T=#P X^ TC"RJ6C#.K@(0 SQuyTB d*%>qfW!x||OTniP@7N#˦#E\c) ßWV^F@_+[2C:+7/7R|# %"R` 9X!O\v(o+:1Ix,/s 1Rx} @72R lHӨTقGX!8@6H`S ka%'Z< qf+ &H;RTP+τq-spUfLv`gZ&K qt7)XիѪ[O(fcαZX<1Dq'&( (`خml+kHa`޳y\[\ːVNӸ۟6_C}[4Qk&=a < 'ߣیcJ@mbbυ5"/`JZ={dgxE@ ~hi`]c4mk`u|M~mv:M?Awz<}y<> <]q:F`.!`Uc-]*?]!z|- )' 3/'dt f4"\83W{WhjRozfmӅ^|/r?o8`Vx]bf򘍲d70+}[8 @</pi4"(`396`Lh+~I|.X=>!0߆6呤 Z,0$pf~V}WX3v-}3ksk$4P3Thmetnw=zxD1@\U) wgqshTƠ&w.f%Rgwy;s2scGhDPTOh%f?0-V@Hn GުHNeh3Sszgs@w0vFǽ"t=?Gt}@E>_!aD`Dn ٝ#cEcˠV0LW@f?L=UˁսbE.r(M cp0c%. Vq:&b!n8ϗT 04 `Z"~akc% •)ߦ_C/֗D2U;tRc1Gyp켓@ @4h1Sly> z`W[@^ؿ?J:Xc!v1=;Z`#U(y#8W~d ]UD,W3H#Qb%;]:t`>i(Xß gϋ?(<ypO_F!VR T}ũ U(3B?^Q<6#݁ES4h.-1R-jU}dX V3?F qY-g5,:kP˿h"Ҫҭs#J\ zP RItk[ʱu* \F_ 9p.p.xZь+}'NҾ"ˍguq? KݤD _Z\`g4@1rv7>l;Wm|@]zUlX…lcY3P@<ZɄA8>*qݤh0h?%'Gf,tP\@C٧W. b_k!e#H78 )E?FaG.َ<1xI2 M$:L^ qkJx/"Muh-h ?@j€s+$,ZF@F7E0eM4:';ߒ{ =Yeķ4l(+#ْ30eNDYY } R'FVѫDq]ez1*M-uRke2S2I0 n8_RGAպ/Cd G? \8qхg0)v/]y+4/-Lht=6r;+ŷrihpRH홛F}4TK8LWrxO8 `J 0kK'[4q(\9[ GhC`Hߩ߆\oO(^/K\P rp,ΚW@rM)\W@\Z(mRx-v@ ~r2l% GP/|_?@%Fٰ#\x&uKe<xU0X)\"VKtp:/~,*+194tTs Su7l;:-zGxN^P)MNWxzK+?ۄ42 &650@fm)?F-w$E/=2?i$ƎT%@GǴh*ra`ZbH/B`ȼ( 4|0\6Lَ3T}hJz0Ֆ`)5J2 `(醷žh#g}Pokph3;#!sl \8ܝzMj^rC7CM3 4RJUrT^̖#4|ϙ0/@_B8]j?X=S4:xFe=MOq0\Maʼn:|*S`h-L)`>Yhi+f|Hñ%@ŔiUaD` oz#Rqa4-LBXJRB1c"8Pg5 LD6V,0 Wih`ALA@(Z%X]ZhHa8b!#4Xg1 h cd@٨2kT$i3 C`LoRV0" @l2P0H F`tp@~{Rja.]LIe@d IC # LˆD{<uIDATƴXzJF@q 'i=?aD{Î =d$?ԠDŔA5L< =Ш=74@ @r(n !G@r Eޛei^)1zb6Hћj{%o(W~& *Qi&rP$p0"+{W@4&0"@{s_J=e AB+f%2:;ބ!d> AxLJ=GW`Z3W ͈xQtZZi ) GӨ'iN y! n~3Ф 0^,cqX) _]xiwaDulp|F< @Ɍa ps):mq3.c)8wMC7-e8* ֍&R=hP~b,Ã! L5`* ۓ; le9+A%a#rGE32y8VV;f/ƾo6^_.|=}4B4_鋱עgy/#|? _#?. h:wi0\zhj0*Z}L$~<~L6ʃ?mXW0x^[m񟖾5_dt[ E &%!Wq.K%L$ *H^W0qQ\z4/&@А4Ф9k0X3`FJMaDk4y~3pٗ!`s{y(4@0(@!Њ0@9~o&˻@i`. 7ÓF U # f7cL"oO p#W0|=*ss(NaD|31cf(?i0|? 7{/6i0 xhfpK`.o揖@qQ_.j7~3jKF7板:4|5TWҠ>Q_E~3*K(Gͨ|/= ؐ7`xXJ2W|: %oFxh^~3?K8KcK-+\(t?Gha~3~ia4| _/" 7p3 +PoCC 8/w|O& pI~{/CУaFд| 9J42T-{avhdqr*+yq@4h8Ta7ݼ_a1D4ԇ*.hwgQ+L/1@4ԇ?Y`]F0s h0&rP"'o7 fʀPc(E(EZeֳ8' &h-"< +irh0 ʆa6H t:QײDcȪ'k0# amvO1ƒM_ ]`'>%!-b -Kߡv"N%r xkɊqj0y`cC;Mtx~XV7Mo[SaCʦ1j"tDKŴM6c+_CG;C3!J>+0m06>54=E,2rMWB:FO G=FLV%+1n)/j;BIS>F BK07| ILVGP18}/5x*AFPE H5<("NGQ @H  06{HQ,2p$([+ 3(.gBKNY#(ZMX5%*_$>F DM5<.4u8MWP[@9@7> "(-f !OZ.@HOZAJT_ R\'(-eS^ NX  #6 S^VbR] "L%*^ /R]T` UaT_NX U`U`S^Wb &+a4; WcVbVa  )XcQ\JT-3s YeYdYeZfXdZff\IDATxIn0@ A.T!q'#u}ӟ]uZUZNj39 ?O9rDS5ZϩVװm<9>29s]츙u׭Vvs[Ӑ枏[}J#V0uy]y UO/;[ˑZ>}{jexKil5ydL;vz ?KQmHbYe#]LH)V$)dAv!Ђ( ަ$,RK 4IL4=$)(^=x9 "IH/gXx\[k9$j{{q#F%iN V,6}[{l5+W4K03K\lbDnY]rG D@e>NV13Uc/My"@C(j0/7".ffE4z;:Yzl<#PKWẎg*, ^#"&1}AtKp$TPa)oWKpt?=X8[oK@sK᠆mOZ[A0kZcNلtPhY]RߐКC1W$ ~t.4kԺ[ .OW%VL3,NVD T1p@@YT0@@r cF :5I`UQ_Y,ХBb}z-b_~*β A6bZT]b1D2.9* m! M-Ṣ9C AkvNt߾~|@fZ<#`6Rٟxfp}#x*縿&?>NU `msI3^P `q /E9X\;7~Q `u? PR@{G13- jg5'zBȅo 'Pt>rG`)ʈɂ~@h{O?ؙ^&(GWZFڞ&~er/Wh[ ,5JS-fxsU- Lqliw\+`U.I{JBbwY#ߎ&&PP|Chw&M,vvSpO+Gg +(@a b;WjBI+Ezu_ߺu-k;FWW1{wř܏DTbb]bt9\x!YDHA< ʩ!hD%DQ,("*x΁yZj*%3Bwt<~W9Z{K'ηq`5p!7bUT>_jz)>v-5!뭾=16棲`SIo:oqGB!?l81CHx@L]*iȭҘqfۧNK|7{i,%gn""$B^c7@+`1u .p?1"BBW+ɛ!///..,}{bb^z45 3S*47222N01{+W9sR"I[?>qO,SƟ_|"SMېP` @jĥW$z%s t>@ 97D#)=^jlGT:)%E)r0[yu꜏aiw@'6s]hBD>uaXd1U2!§[LI˳J[?@CEys r Db)ԊBIn9}|SB6oK[? P1trMhG/hA-oLy _$$74@P,u` m@]tu.|oltvWNy AdW GM)SX[,r9*94[%{m*-MqtYP.rql ZYw{˾NrV]=mQ-ȢK@rR`E${YGnb@~@"#7`W婙SVѲȞ*Q{*ٳ_mG !o3ԥUi(dzJ`7|DwAk J ,ԫVk _^TY5̦9v bQ 87p-g@Ӏ ֺY#69$Ԡf>@HkfPpmA uWG^0EZDZU#~w~-EI)OGc1X5Vl \d7o'.z pi#?/<~Za"Z>a,0QE.2**iܸ=ŀw^Pc5ۀn5kMA)a|/8i{'Nn@Hm^.2Bl2Dqm)sM:QW=lwVD6kR+vXU8_F.u0 ؖwW)>ݲ<Y!a Y Ъ=e!GbsӂՆkOٱh-Y^i=t-N%(Qˠ.TqB8#I~M/ 7QN%ZT"_@cοc8=ET{U-M Rb+αܖ4BWuZJ.DRWR%Em!{Śp+&%E&ls3I2gf>y~yfy!suXY7?6r(!0'Yӕy_a)RD/BM(j]f??Βa\"r~pb}{1(ӈ11JF 5nAd6+%:$RXp9pc"ɹf|j9:#-py{$ ՈՍG]{᪃v@bL ̒1W.Uss`QoCB rF7vz] nmctYw! $ ?8߫j11>NOkdtlN7a4rD]p\ǥU||c/Ig{a?[3e+#TL_cM"*C,].n#V&$renZT&D"MuIv('L 0׀]_=)pOXۋD7H_SWO8d,[3B[-dzҞZ.bn)mLu֐ |'.k F_bkouHY#ISodXZ.`'D##kd_le/wGD ^y`;rʽǦ \϶ IRy[E(?L'y1`6+[wLZ9.eLE/:xئ$,̈́F (Rl}A%V}NT #Q $E1)K4+!F:fUb_ZԮ{gP_-&ӳs)Ako c)~7(ӓmg}qib!{,q=mƤ*z 3h3Y`Ft]rR ᩻ӓԛJ&RbvY~6{Oo37/k*l$Ƙ}WU̖|[PQ&丒Ek[Zg03$a˵x"c6SgauE!m"yA{IIMʞ'dI hF"C*ȩ&~Hc.bIa&#a#H7*&̄.g;NWMn^l8p/)aL0, r|W4^=;sqZC`&^@s^)Sw|2YĆ%5 1Ihīb WXWbbf5؝pvN&yzѯ)$ aQGcLcqwZDHL2U)1H$i0c:mFBH(ϗKuÄˀT;Z:IF,%ƘX@&,:yϏ6\7y!B&@sC[⮑4]%9,Hw/.DQnT2f-YҨݑ >@Zz9}"9W ax*SdM+x)[E"a @ఓ #ƘUdޣdrI?gn]UCXBV 9>h/ `bcHn$iqc S2<}  E˹s(JK~cߑ @8;_;&䉊$ˌi) fG糭,PɇĽS@̅-ʂ^Y0/l@P5 `m!AB\ j½ ǹ#I ~|H1'8s:X!B ;i4BY-XV6YT(IP-֥9%߿ 鋥 $p?{w՝XeT[1*Q''GB*K\$qVđDԈ&QA%5Jf(+ ( 馻Ws ^|uWNC܏XIDb|HtPaUĴ V<4\1o IEdH|ϧ "&$91VSy߿vNg Y6顄U \Åc$BSӟ-JλyWLD=74|߻f3v#B)7˸mH^cLe:(g]ĴkRI Ydgj1@huh: 81|;;JH'תUo#yzQX^uUpm'c5LqanЯxcq 4 !,*K&`ЛDy2dc&u"]H Inx*dA3Iq%ӿ ;BLw2E(\yvF$qғG1ɹ|j̡dA&l2RIeh>9([w(C> 'nd3HN1hbPi$xAƴ }^ $kSo7zeTc[1DX]F-1 [N!_]T"$2~~?e %'IgN 3G-G}Xd'Ҹ) g^7F̳Pՠb1W`+A9'ZF=X']ox= PP` p˸w͠170rԏwת}S]nqo`c&t8D5qQS7};g~h.^,?Gj;s8=ԈG-:+ eg~cM4\{;\FF~>8`aiѝ?R}ӰZEB*Tf~C(J W&'{֘5'2aǨAqVvyBbLS}jsdK=9-,;tG5}'m$õ]/MH@(ldxi9I Ҋ䆿LMHXTUr6CQ{ٴV pѧ6X# id&cWNH2 #!>dht4(XcW5=?^KcIS~7BbF{WMSp(y"9; jsbw\Br4Jz /@Ũh,M߱Aɢs6 n0z& 8& Y[H9:dIh"dAs/COF_8 ʦ^uA:-詎H |yx.S?V#\*yBzh+[. 8׳ϵQ@wbޢ3'_SBgUIN^W:I{BzJ*BS34 [o=C? \yKbX Ө}뾤1D%?Kk$ ǜj+G;嶱5,fQB39u#!}&z #!%܌5 ľj]M09WD PJ*^fSkoБԊ`[Hy}yPT?y`&]eQ j+d103_[4O )2O?ĕ^,*ងIlXF% ڧXT$_ D1ȵB_ߧ0Z)QIտ!1>jy:?rF)+B㷵I.k8(~JlYab= ep|Z=tWICuLP䜸7t:{X vBA &[s:n`+-q]v&yj5a CMFH_"ITUv: j[L7YsAhz}~0Hjb.Q}'0/!^t(liDȧJACWnڍT3 Bv,_{l$C;i*q1jIme⦹mTՔ!LKVh_DKQCsy RHr0cJ|G߿S!LLgg4)\ #t%Q$OrfEή)FVs1B[PA_Nk؝Z ~ֵ47k,gBzV+_YWh2ڏ+Ga"E"BuZC(^<@^_`Z #QM5;–5PGZ$^{f^dNPWB`G !چQw|XFQU@0)ThLGևrsT+ z"zx_8mo@ze@nG*&J`RmcJ+wB iYM#W$7c|"#XzŜa2ʲB 32+D-BZZO[|'xeL'ߣu %.\xEZ_ EI ta0*@~.dn൜q78M t\n&vЬarBn92cx< J,<f0l9{ͪwawUq b*dcYJ$$MzBlC"{ee,6YX6@eͭ 6ZFԦ|0ּ3s;g׽s럸\uS`G1fF2H_Gjˁ\KWҢɧWoP1nnj֒ 8z4ڔ첺⪥1z?iBƫ ~M7dBWSok+4I?xSeʤ*3,*RCظAVʤ h`QJvx@ L,4萐Rwa [3너n!N="Ƶ[{\4S8F*O]lNe·1=/~ Nɸ!h`QbCn C"8Tį^wRS)A:9!8|}\IxMįzaXtZ(@< RB2lGE Eݓh!!g \ۡEBw(ꄈ};dLtۀb쇙"8 0 F?E wfq} ىP$t *#]~dAG(Ēs0ӻA*@C n "%Gp m ThxrUē2s<0S.~9 BQ\ُZ.*$ y6 ~QSފOk1$2+t6877X*F7\,DvSSϻeu 6Xt[e ZRD\} ҏ S 7`pPl-lr/x REHBd#u0A-Z P圓H`,3n@ `-? ]< 3șhm@Q l)4Թ]_8tG@_Slas;̴Fm@1ZԆI5[9wF>K{Co'XQm(-n襄Ek,ǘ/б1a%ge- Mb.6Ո`_ t_뎊RsiO!WvIݱ0㫐1.B]ߙJNcbgLU!oGa{Ly'46(Keݮ!Q*AwW_v_8VSdE*"Ţw_jiz}J}%D*5V4*e E$٥7e_[d'Ĉs OQHp˸=b7O= `X/{w#Eq-1%DETHIGAx*.$"'E(00G<1@[U5t׿z<~oI3p4U{3s"}uds͛jXRSr EaJ_\s~ ɜżao@X{06C*6眈[juWV2ii"e6Ū /~PPd4̽R/NMrDnm~/7UΤy{YjL)鸘 HC >,dLյЏM2K!R.) ]*cpt r \ݴyu)ۆuT5?7 _B (t .x0z TN "O?<}xL+t jWk0Lkau8tV77fmȥ'ӗv >&HRoJ "LS5?k ,ç3OLYտ ))zFO͗C J?'Ɠ@׀"pI`] p5b{\ OƓiC [%Ld3n {^6LbnPƓ H1%0 r\Փ$#?1Wtu8@ᄯlXmf<) 9gPP 2H+~ӂ♴"FHb'cJ``&H~>#^3qo ԫ,T8$R"=fZ`5101қ]?\Š z= ΍qsM-4Ɣ2^DzVVHeOj>Dm4l*W S]@2h/61[69tX=A/ n61ƶ' Dtnlh;Ü.ZH^׼'N=ӟ*fl)= )4(Y$kwjkhcWK)xIȡ׳[ s{vC LD.;-Rui %J5h9̓3l38R` *B21DuyKL$j덕[~ͲxH^Ru_>vgl)6&R.BޤOCV-7{Omeo.Mf+rAӎ~ăr[>;X_-STu9VFr̙@LD+%yI$NX Y8x+ ehxtDD J\ewwa {v,{vae` #FȒ\R] C4%֣K45vBx\tY6l#PrSKd2d8QS1Q׋aqDQ01Lwac7w'PT&SMZ8q*0D.Ou6&#CH0f_D(56H x@''| ችΦC0rK(ʏ$)`̎F"l,ÞP/ qk晐7Oۇ'uMٌ̱NdGmInE+>juڎOic3̨M=,І p\U5e{M9#T6$(x"l|Oe?gO t%wY Wm;4Lea$%ș-p`R:{1U} mVn N39T%PS9IŽRJ%_C HFl3cz4`۟𬃤!a`=Jdי|8rHgJL}uQ!쪴@B4W!~`6<iF[g!I yq( `01YH39>r$R%[Vr:"yy1fӷ[;4[Gz.`]|u`VZQINioCt}@YԖJ#:OdBBMrkj{o3?@# b3;  <w9,{jj:<r]?BdY!T"ei^sr"`ܵs_ر47 2/Y[BBP|kf1ՅkrIx@̡؏#K3I׀8#bC.KYW!c@eIf>I<`u ;A|$J^X)љ*d =b'Tu7SD/uw9$DQ1LE>HG"^uaOƙ-0ί QA d#䃴.hQ!e q{)f8 )+D0>q= e"0+牚a&*nJ `oD]1mw߻[3W? ҤBjro׉ A eJ0E>'d#RvHJ'>n=#d*B:F%ɱ0mk'|h$d1#N~`ZIwWcLDMG(=(J sDv}(=X/Qo16 @&=h Io) ?Ypb#Gia6ņ Ɇ O*F8Y@j┎&h9˜Q@ | B}( ԑe̿4B8UR,<ت(Ii=mAΖV "~sGL^E3 jKQ]Ի#ьu{bA`:$$9]t؝s'-f\U$N>wb4"ɎqRL ҄Q@)Tg]T<̴\$/PoDt"CӐ/7HXPҤQ@ÞΉ_5.T0R+՝) ?j)d^\@0i8^E GވHr6Nc^\o;#z Gi :;vdWҝP6$) [Ir +A*Tl/(/7dk$7OV4C'kӥy&E",Hd%G欃4GU7 a5=(Z $"9?Q#wy!TLCb(Ȣ(Z;NhaHN{z~׎Ւ\}\:䭧K9e*(ZCjfHJwzn@IJw׭$]Wӥ;!QQ-;bX7HAz. ǮJ}ą4KYtiF<L; o9އe(-%XJ* AKz߶~г~ {&#{EdF7&0v*!7MG>̥?GUaƙBPp(L;2JK(iBGpcxI:2$  "-!$bJ2ЂHB0$myLLd7w=w~?ssqm⇱r(~3Ð2gF{V?SLz) 6BEF쪀{n}=/`QJv$ c3Ŏ )4I1jI.Du]>Cekm5#;^#=?>Nwa#eT(!C= \IÚ(t d'&UҌ[>1K 6";Fa(> Em^|2?"ͣV<U <4kxV;ec|Lφq>ȧ<=c0ȐۼAqH.DQWbM;W>MΣZa [zEz;P>ʠ`S1DžHaV$=C^wBRfF`y~]@eZ&}AN e2\B]ﭢ0B+5US JVB,Vٜ!{빯:)b֓Wb(`6X ֜F00BU[gԪ?=GmJ.{H yF`?N}-&)f`+DFZo[Q&lVpw uZhu8Ц.|bOSha@a#qdտ BuQ:ٷ*yXXP:tkˢ {PDR ?߅0PFvN-2V`~Pؘ _]w;? %~_?ȒB1*`QZf|Aū>˒堟!΅>rs/Alut*n2y {f xvmg( E=.Tօ@ls@A]wt8N%:ܷ#dgH!L!9 qg4J?fӽ nhR Gp0oD/~sĞ9|GAHE?PRasABζ 8!ZzmߤI: {I`rW:)[H]mEFJ`!yC΁EmF E+˻UN|!'A8B\Z:mXRt\K->)2lMjk? "LͰ#B#I]`Z L* یrhrQF"̠Nye !@@\7%0TV >0+E{YR~wN# mQ"|u XX4-q v7\.s{x~E) G L }ܷ]a[9Х5)$ī\n L0mU*7KE`NFn491u3& |Ca'O@wlȨ D=+c%~%Sv2¼ݙ.1P ,ANyeRHs^ }PJWô150 * CfI|(96 B_k`t@^=KSN8>SHZeL<^V1&n7TV)4m%|, n8^!xdЦ*%4!Ӥ'c^kN;(%B W*-cg#[ PH}F/95B;jf{VҜ;ݑ3(rN yw^@ddOAh2R 88cڱf큏wQw-Z͈, #ԑT,3 jXZ<*)H;( 1Z?`ţmJP  TQF,iJB$$$n8i`w{|>ϖ/yO^a?D$k}Lq Կh Xu m>|o`hkpBի[Ah0"M3E i:K""cALY` Xw0 _>P5~`;LBh Rr#̉غ[cJ}OG Ccф* {nBed^to;~@ύzq^.fiDgGG#7<`v61ddH]Y|iR7|Jms)`-tDgTCabs\eBc|>s7) Ir2[ǀFkWQҁ脝Qd5֭@Ә00~Eq@RGWѷػMբпbCl93kiI Rt8d>A4PJq@R/ҧ_9D 8E+f#3jdu%Er.[Mq@R=I=H? 3(^l s㪢ȨޝJg9Bf!X78E in.ӳiSś=:)lbAM?{^ΟWƐ't7oUwL\RCL@e gfnsf ")"cfF ʷfTZ Ơ)]ˠCJJiso{Υw|9y^@k߽y>/!_{IXMQHsef"Wkg&8XxҊ7JJ(INA mHӸX Z=8 y[6yzѦҌэATvAq]9gɥRZ5Aս-QͰռ.zVg2:YyG ⻇)ࠜ9(}rH,yo<3l%b7b#8;և(Io; |8BCyYo@A9#pݩW"~Nzҟ3. ElCؕ4jlVH*ĘFlүIIz $<YŀiҦt:b֤G5WX;BB3wpvC"_E!LfR.Y4 6|0P/jN*7l `6O{]HnX`=XcE'E jYS>  qm],+?9BQY#B1E!~uO-@ݹcP ?V~ )>=fzd7ZM2<=ƿ(~F ֫pMmLD՚0>6 @GX2=8:h:`l{CfP(ҭO(Q 7.ٹLYUA{8~+ xJ E`Rh41Tj "5m0XTN)Im!-jBB,-nPvwfgwfϟ;KA?g+l^I'pDrtǗՎ6!*);O>!v,0ئ!{RW@%j7A#MWwnWo܋04/~G\Ć @i3\bR8Hq}cЎ`X7N<3a`wqzHt|qVCW.;޳Yi~-a;&cn15zK4VqB~PHQ?+5AD3z&%Bl޺DOZ ͜` quzallMj8]V&oCz2Ĭ[9HuǡK闏= xYkGt<ĜŅW~pg^O c`Wi@#N5oR ( !+ap E)kE+NR{u' NWs$мR@'[BZ+ `0hwhmFqgv?Zq TUZLdVO){dSB P8Cq`Ѝx" @ *Rs^`$41D (Dl+Kw_0 LFWC4TLyz*q}P*! #fV#)+`Gu_؀7[:}LFl"4_s)3/à B9%B.?2+ fO\¨B&\(dp& h| $ l (M %} ۘ*d$8 5{!!zf, 66J0ULT2Z9CE`S q2a#Cx"kLv,Zs[BS8H=5sa+Y4 @N 2 :[[H T@ @3F"D xb& qz`7t8 ,BAsSB&|+@h<${wE3/" 1`l8"!ZQ1FJ䐣)`"D(4A@j=DRwPRzv'd;[xgߗI|;Ǹ0)ɍ@F .>1qo|\\*bm'hiM"=nNAFi\hXlGgiQ8Lc_)A!?4p7}=x8'U 1c>ИV@$BPM1l#m=K]#=Rs -ךa￐W29l f&6g6]7/!(?v* + @CR+_#\[qtybX*24XLj @fAlEBQ5POfO ΀9,6 h Wj# gFjt4޽`|&hþ7 q`t\X(!N2t~WoI&L_V@fAr\%sTJj˼S UUSǝEK\  ӱl෋q+&*Zz).IMPOvM I6X#e<,P Op` YڍJhU牼GA~= Kx0dɨZ_huX3+œdXR]/bB6\KA8RӘָKv׃<+{l"& ,ISo o\0S*ljʋww2pjʁϘp'#1dH+cz<VRMUE{_J|z`I)=Wۨiza;Ѝ@MZ~DX_D& s{%H+co֟hI =2Z " !fɞ80s`i7@FhB.t ˀ=d+Ҙ:RԌR!sPRvUz 2 L6Xm $Ȃ+;I?;ߝu'ߵj[)YJ\?{ZuqW)0C?E%N l e! 5Z "!l崋-:-U$&"Բ*4َ׋8;Ml9;#ytL!bs }q;T3r PH At0yf˷L \nXbc01b,($6qܦ\4 T3gSC)$b7n(̀ `U ΀,:H @FQ8`J] hPL:@(zxo)\}HIU5ݭh/BG &2(|XN[)5ȭx qM(Da.L!_JO:,:G F=ǟISiKԹ# 3;IٰӔMؙkbf-| pM[uzښ*`^jD(LCfKa5mkm-\:F sC)QonEl`g,CU?DJZ _ V[OIl`['}snirfE n߲)NjPl`Ql׺A!vZZ+2(vfVl`KD7X|^?r;uS(1f[l`IE_{D5@i2ޓ0%<SztAK($))ii4(wcſPHHE!(ށ)1(a U[A a!wcͽ )@ 't8`>i2r-)ނ/ )K2"Z>ےQa69b>޼ m8s4^臇 﨨()b*zWnQ j$@\(kZKHbrzY.WȀzd *fֆX yvti_ [o/;Bs<10VSr66]RH۶R|s3 ?N zLËO8a9 3emr#rctWH($ga_9ePnC`յLoa3S6̀N(IAl=LF-hwػ0)W[>NjֲDV.6;Dd1uk3 US)9;X2&>zz؈! HO;bPBͿkv)DPsa=RCT@3fI_MӐb82MХ:5%z*u$@"3M Es-.ɥVO/!-PG/7 r7Mڞ|'T (9p k&@;J6D+$:L^R<cFU)vyJq-͊ut@"4u8HW}%t v+*עo@ ook6( )xƛIo폡T ^B 4ͣ+Ư Mojgz at@"VnYMQu{^>ݏ4R,<2i}t޽H]q90Q! e("DVET EYX)EEYIyAL7.*(-\͖+륭j^VwuχBXwp}G̼9Sm'WX^2`ݩrftg9ŏ 9nH(V""Q 6dȒ"5ƕm8w7Jߡ;E@20 h$[€]0oP GzA  "R,vI,\'mD4<8( ˱HIֱϐGBqb稚J<۫dB?Jy"ۏ?+vۮG5=ȳ܏@2sy "͋La7bPަuTWU($;'f½D͆7@cn$CjTݽ'10# zrHg&%Z5 &R(F6_"l4#L|;NIvzI -1lL?F{1 *$[&;(è%&[(LCVZjHn~B@6gycr Xꐡ |I?d9pJ?3XNM7Y::d/ { ^n`¤XN{'ޡXd=IAGS %ɗm}X^=tQZ|)$ (Ix2P~<{N 9ib瓩!}|/Ŷ-_@Cp?%QG-9t>AX+Ŵ}a:b,l6%+]>XVN57h |)$ۺ\iAPWea#Bm3tJ9{aGqiaS,)ˆo +$?J9|c7a)5t(]SH~™(eYbW󗰣p=SH~BAvVb†Q61g"|8TlZʬGX3ŦҼ`Lg |EIa ,DIG=:,/PR20 1OxҺY;`Rz,+4&ÀVVaWP9xG0vr@3Dv- Ff!!D$Xh~d Ff"+(u(bx+WM5'K@ J솵}"JˈKFrLiC2~I^ηtK;XP+8-`MX @@aJMS{;οn?ESu$ F #oP}Ewm^:k 4ݽa?o'Py9A)#%/9VZ(I-"csr8 #/+&+lŹX=%bٳ;]/RB-1QAdl+8O&j[ b{(^Np)Q#Q QkwP%iR,{. 6:IF/&"zyJ@2lcc baʴ @ӗ(B@\ZDY ᜡg by@)I'foJpuL@,Gi(كTWP[hjX8L倫,7ZE0ٻת8Z?T+%hDKmiF2* s.ZEkQF֚}5bs,V}/^BWsn۽zɲ|9s^}~1H84Ii1S`ab4Y=xLȆυ`ۍ@R!#˅\T!#`.l RAh1 ՞rAeCmoW2!BM_ɇ.R$cW@|>6aV v*cC WU@ Cn\2rJ@V[wg\QTd>lQwMmP,98UCax p1!GƲ 1(|;0d|klz!w\4Ta^Bfb<d@+J uϧurH&d‹vXwj-[x~1/0ks5>rs `ֳ6?-R{V.yC*cPPhmq0$uS7C[:g~8n$*I< -7?qjJn9׌X}F?, IEo nE^/.B^!#,ϘU0zkOR __?p M3o"0K$ TLշ ::>ꖃ=(tYSG 2 PBM迭Nj缰_B6 Y!Zka"/= }u@qch븐@&5BD]$%dSH%z7ev'PcQ8Sy^(t !K4{ m28%Ddʋv1L4Mv3(3CEʅ9Wk[U>T2"|F/#Ѿ$v,vo>is,V]q"i7Qt.Jn"D ."'XT6)(4 )[fTsfL9 l^oq۾8=ω|ıFx /us[b-[82N9*,Ԁjywu7Rnj,-R{@>o; \QNݴ,Ր`|k't w^V8T߮TX4L7B+go8եiqH0<{Su4\O׿BzL~oZz"1G#-@@oȫqn &qqGU~rڈfn('7T6pMūOW(hC n:eB:'[צc=?a?ѣJ9 ˛m |i(~b%+%!RzVTLI+j2> GOJOb|}ФѪ0k{ 064A@g8 +n+9my3 <(j0dB*ή4j5[Df  irT.]:jg^v,[rCW#L13^mmo۔(w V W7!1˶7&Tݺvb),W˿8VMxɶ&\/a# 9*:gLo&\>5g Ujh٥m~2&;F= h'É. ]5f@Pk4iC(\Ӥnȥ] i@\Oӟī&5 ~58J*Aۗވ4uz dXF>7vm$UAImoo Ufl 3>D;] /v#&h'랽o^0xeɨ*l1)"0{άS^(j=`>UM@NW9cr} dN~4`Z;ZU&%:kt7&,%Zo4R-L +cJSXT-kL zlا@v)C&߇JV*tK& ǪOoR PǯCط&zN]<W@mJu)oSfR=jԎv-P'L הl:Jo RܱJa9/%l̹E894 B 8*j52lIZNA7|>W(0;\?nsaz97h @ハ)ڍ`8j M@ФQϵ@ЦQJ hݨt5j9Iu?@@ЬQ@Юj?4l}Z6ۈ m@K u }[`w (m~N=0P<|,pxQ4@ @ @ @ @ @ @ @Rkc;q >Vw1zVuZjs Y{; +Wݠ=ށw9_}e}XMP,r7ڑ1VstDJY[{+5@woKLo/ՒI>n]fd̫&>VAnœ֞6o^q|#g!"?AoRL]A_t;;<"^&jh%aPChK9) b5=iT#$HkFLnK(ǷdTEOï$c\sH , m[m)>uT6?ӍtF/6ɻ@p3;)fz{ҕO?4I2ufHN-3To='\- gyӘ%%Zzߛ-S!">UU!]n^ ͍azgÌ P׫P]HP1nqQ;BwvIE_E(<B$>hk++{Ś˗++outt؜:_P{ (oo{==>rZOOgݚ[啞g.$/_X8u Z'OzHHH͜`AСrrsVU 55^mfFFkMcecG汱.:: M.1|?I;KZjD_z˦wtX8xѬge̮PQWݷYwSiNʠ%\Sf}K^AwMl@3qy$3<:\YWi⦛z̵}=/ 8"'#m]BJM x^Zs8.ӝTR]S<,1fa^JETΎq6mmV83'z2*CP [D羋W`. H,3$ŽgDU9RsyE/U" ђnWwz҉$PZWmZ+Ɲj7 @lV_STT ;x +o h[ADaMңoaWADHiꫤK|8s}?ٻ80,{GNp8.(qq`Q ʡ@Ej5BdY/ zgZQH!%s)/t܆ȫǹ~*qkW^jrOϷuWûrMM;wv?)i!AmYP=4ft&n`~(bPEO[N0/MuH:ޥVݙ$Xyuܑu *O_:$+Z3abL&XuZZ~)\5)477ul*qN,ѕ&f;Q^t?ejsx7lY:)fR3) 3K|7y&kZDT_Z:Oy+fx7];7[`?@ABCDDEEF G H I!J!K"L"M"N#N#O$P $Q $R %S!%T!&U"&V"&W"'W#'X#(Y#(Z$([$)\$)]%*^%*_%*`&+a&,b',c',d(-e(-f(.g).h).i)/j*/j*0k*0l+0m+1n+1o,2p,2q,2r-3s.4t.4u.4v/5w/5x/6y06z06{07|17|18}18~2829293:3:4:4;5<5<5<6=6=6>7>7>7?8?8@8@9@9A:A:B:B;B;C;CF>F>G?G?H@H@H@IAIAJAJBJBKBKCLCLCLDMDMDNENENFOFOFPGPGPGQHQHRHRIRISISJTJTKUKULVLVLVMWMWMXNXNXNYOYOZOZPZP[P[Q\R\R]R]S^S^S^T_T_T`U`U`UaVaVbVbWbWcXcXdYdYeYeZfZf IDATu\Ӊgш("bv`l3P vw(g4}}7c8p&b1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1cYDD1+PZvGVwjN1Jt]X4Uy 1c,k?TR#tmƎbb1X`rꑏЋMԷ#c]'{;ރ6y-հ&c)&w^lҫnQb1X*cwh 89]Qʜ"u{M^e,t;zBg+b1X*l0Ł Ghmˠ[؃KGlB1rmfm?.-u+CYĸLa P@'E=l^ƈc1M:ڢn_IDrK?nAD13Fw+%޺Ս(Y9w_t?n[[b1X&H'-ՖP*Rה_BOo|c1rZw74\C2`ֶd-%Tc1~KTygKʝ46tkЦ1c:OhttZ”Vn7faMwˌ~ 1cIJt]m:ʹ˄'"[3eC1Xf~h #iE8?1+lZN=",] Y.!{c4'{[k:(_2.|P@1XAbR}39HllDivcB0c¸Mmt] -c1V - =QR$'b1 }W^w&58ycb1R=~/gj1˯w: mg:)cb1!63o{N@D9b1fk+V FAc#fW@KUT(#c,O-҇F4&.kb1>#aK%鎱Mi; 1cy7Ej_c<>3E!bUpӈc$1cU%S5x"c,?4Yp_$GKZPA c{Ezo sU*%1lrϹ3N?޵cۖM{]j-5gS'O?}̨# z֥Sm[lެk թUӹzU˗-]ѡx1" YYJDc*U&Ɨm}P$ Ke/Q홷⑝cI/~@M%TL`*1lzDv&KƮhDrDH8X1 9!1X =}bq[a*^/Ae[B[nۮC.ݺէ_>rw&O>sy -^|koܴeێ]?xO>s⿗\q=zo% 084jb_ZD$wSXv6Ibι,<\^cLA1) fb,YvoۛQ3L)D1Qɾqx5[^cY_)]P{$xcڮ| 9 (?"Ʋyua]'sEBz'1ƘƷqM`1e*NCerb"?ڀˣDrRRS[ WDe vkB.MJƊXe<1U0#,:Ho_u Ʋ@91H"<eW |~1b,2Ʉ5mub٨^( AbLZz/[Q C-<д EcֱQ&Ys(YbqIEc1*=TȮMuld$xψˣ/ߒ~uhgF%+X*b_tjiҴeN:bǤi,Y{֝{9qk={ݧR9((D9g܌3q?7>F6BG 8H;Wj>hrN߉udA$Ys(YbZhܼu{<쯱=̘3oѲ]y:w=K`X )PGc!U)_W3 n/E@#ƌAE&1W:ȕĸn\4|uζddbQ}+WQKӖm;vg=&M`Ɋ{ȉ3>^y'^3Z*GsS>2b,,N9mC*KcyU H:ۖtiDb#ce iaA_?}Dϧ9Rh ΞREX9gQ6w-,,- )\ֶHE+fo_D Gǒ%K*]t2e˖+W| +VTS*UVVzugA5k֪Uv:u֫W~ 6F\\\]7nҤiӦĘCw,ZA J_>W|ϝ:vxׯ߲E̘9~_սsQseK:2(I&4Ē_XlOe\Ieע.f"g7&2K?<hL )ݨĕo~Ҙo!߿~ޭk.=yо]6[r¹Mp=bn:k̵aݚ՝*q/RĈ HtOEmkDO!Olo4~D9w.ݮ9ͺ"}nrHgEXXz~ED1b;Y?Jriԏ߾|俻7sđ{wnj^3=}!ڱm˦.k;WTC1[ksr>gdP XL$HzAXb H)/Ԃ^6CU q1;^( M('!ɛcPt7(θXXID@g"J~gJ@)~Z [Jپ-a \/Iqq11QQ?۷Аࠠׯ_|Ǐ>۷o^~K/?S?'?z=xp{w޹s7oܸ~ڵW|%2h8KCş3],N@q @*Ih xth_ybDcS} *1eŎEl!lEfBN@'U5J\QP m cH-/zew6unRAL,s9ʷva'jWlPU2g$tܚR :A ,"%G.{ <9U!bDY¤dv^H!f m]͆X|$O (˝:  &J$YcC&)rؼ>C%rR~U.c ġF 6zysm}\˙3!ab<jӽM)kgOy. ? mEO P:^Ra\9#b +)3Ū5>o/)qO}ӥXf K?q=QPS(o  "$rXhK$ujsCW{AO/X;kT&izC[WϸѴ=Q.RxV\hN,,ʡa^E:R^V'& لt `>}ИXYhGzШ{WY5֭i""fS}!-1o_1k9S*?Դ14PE,SJLyDw,b`$aF7T!VpA7tMD,! dP*,}~ylq}[T7"=?c٤4%+T~!-1o_1k9SG]nȠw4Rw!I(˵ "f@V^V@͜dp[R^e@@bۖvnԶ07?}ظKSk( Ԓtsp>F p%#+TeqڝFz/i }.uĔU:gO@j.;UE?Gbz+0*^P*0ogDg `$9RWb~~kL3k,Evw@#Δ7 !]IqX2b:g1]:)[Yu^{w&v4vrBtq]j49mȢzٍ{D=~$ݎJe"c }Ŗ9QPy׭Xܜ hP.74'%o1$pt嗑HKں e5[2hHYFRِ9[}_"5ή֯uǙ[EP hF ,5ٙ2£!A&kʬbSss}?Aŧ*I˥Hx 1K. fKYUn1p#?I7ǵ),t1"Cq&Qg':SģpF#ZW6#"ɐHt11Y f!n+*>bғѨ`\N/u){ */;+'ValYԱB:.-;0|猩hC:0t $*VHg+ۯ0D!{{^ e;˪G-{sG@l31.J9Jtab$_hI@=>ҭƮ:F|G\FY~@hDDiqmdNz՚|1i6.I`hGȮF^< V$ѧF9RUYjmŔ Un3bdx!ˡ92P ?883(7)dcbC? 6|uLyXh|ڻd4G'ݫPzPN|T׷޺tmV.\r~tshńuHԁ~1!Jp1fPRUHTI,CL"n/jKR%vt7ڎXHBӜtj#pWBpp?$Nj! jJAxVj(|v9~xJ(Y M$A$#}wy p ő޼vгcK+84&kt{WR"͵s,_tpTJП"ŇD}l(C_W@-d{ҥt/+Cё%)LeQ]àqQA`2=JR+>hO4"OW"'I=؁2@\y{o!u,(F-%#i ȮNBR=ԤG?\ӯL5t)9h<_ʄ2 *]'m]lԵ 3 Qɾ%c VdR2|yƣey.'@ RoI`twb,U,EwkۘPlZȪ̧_m`2qHuڽ* GVX7I5Q9N촛 1a%I[})R|}ꩃ[W/""=;$&:QT] ώ-޸8X&S"$dGh%ECJf#oEHm& 7ԑrL 1FBn֔~ 7|ڷ ycb DZ>#uOwo3S[Jm)kdϮ۪ rٙrR2I,$gsQЈ>,@i|Be3Dzɳ2IP{9ݑX^fw J\Hc1s7zU4s߫1IW8S:gOYiZ]?c%cbT2TvVfI юM~FOh]TB9)ĺc9k2$yҫ~P_`N,j6 qb.ҏUWaJQ$A׷MQ݌XMr(",@\ӫG,2[jIASR3^nCu$iM>{$^ׄB-b3d!BNy.{E'Rz8y"I BM)!;_kbH&|=ekH)ӣ_0qp?*5D|1' )$ 904'ՌIF Dy}Ԧ˃AnyJf!2kԾ8LCEYDrR*WkRv"Mo߻}&(%)Tb.L)\d'"\Wr$ Ê~KبdÑLbyϸX )] +Ki7RvJPzBDYRp*{R(+$mfR0\fciuDzɳF<^T$-2MxO*I;b@Q(q4JJ"-sŘi_/ xHL;ۊS*$ Ȧ|v{yyKTHԅ\jL.#tʚٍ[~W9RҎ#8YF-%cL:? DGzP"N)ݪCLEi *kS锒q1'.C^?źCPel}@DI:A'EVNQX!&)]:ͻ 7}EWyoܶ鷼c{+1)\ /eE;BpXr.BC/"yNtw{4֠f#Q6(q_C+g63PxH/s$G7K!xS2D:dHxiH&|b[}[Jh(sN~gƻXc,9(E2E1=ˍPjGZ|E&{B1IS"+k6Q̭A#7ю e9Ē*7PU]WSFɬxcLA#ڿ44yJATg$](G,D"ҥC(2dAՓϟ3c1#[7HW6;B)eiTǻ!xA CLy|C ?)t{ IgU *rbK#ˆ9Y V,&PzRԺxXZ{6sƼek6:tµ{3LIo3 t%qOQg'bjBs?FcHTvA<c)hUф~a\x 㡃bӱHfeS#b6Ú''-KP;=ԖGCØX"uHo3 t%rUC,(J#WK=nj2=HI4޶̰jcP:`Ji8u'ޔü`$ fE,qJKR*/P @QDT@JtiV5HW2r>A-r+g!b%Ş16!ބ*]lei9FC-^D_ Bp(ôz)[?ތMh $u${(JDsJ=J-h_HܠD&V{t"]ɰĭBaXSi *wPx A3 $䏩g@ɖc:4ʤ?"ʠ_G^ Je)YGP\Y,R@ggH{vJ#+7|ٷm{Mg[B)b gdhF߃|oO(H)U: /DAU>A_A)È I\k±PT"Ƙ.N ֌IE2N*튇J2 bu4&2J%$pL'=T<wI?D6"ë<j߼H!جB)˜2p!" (-M'fC1nC B<UˡniO,ԂW} 3)Qi!S\v&=eǤPhG.`1P()9Ru9Rp_be/CP/,`7E,WpGC)B#o@̤ (  |Ϙ(m5b5Ɣ/c ZA^Cʸal7&fPfK&Z &JLx7 \ T^7"]yEȩEI e?)nlhStre:P Z^R!^71 'u2nRS^7'XN.&eP{4(ܡ$-Tlb0v?5ߨtE9s1i< /j&ˡvot!ArVĨr)bYPƉ! K[a׿֌ 2mv<(kn r H𨻈da#҃xrA*FϐR߁9n$);jZ)ˋ#&+*JQ& %h1RU5H\\C"gNr^Hp3願1ցRauXBͩvQvqOQrEC2Ore~6'cL® ƟdFDAC be%{HBv;2ave͈BDܳld1 WXPp1 Qf8< % cZ 7)=L9{d^x%5 U*!֒ k1~x{|[e#MT-G( j[]HRAg4J ,(S*}UYJR b% NRTs8ɼү8b3"XHv~|FJ1leO)}ݕ h,Q WK5ǂ BP9T2~(WSڤO@|ʄ2 ,MYdUX@=I`x[?Rȿ3غ\u3!F߃ZQP'Q@+eR([P2%ƘJ5Аɸq"(#ã+Q`912()L_#^=*)5V7Tuy0EIe6H1A I " %eLQH "b!EYOҹt @8`Rk H) -(W2|L 9ԣL`c*FI(]w (yQ>SQvp@֖X}PPsbzrI]ҩh G#;yA CL_(SD PxP -|$!P,52o~<4vP ™P/Ǻrs#2P{z{#G26[& =QJcp$ۈ.>&MސBCv{AKS^|v,Rh5?Ғo3^;G s/+Y&%X`&e2[RNd;Pw,C鿲 g (? ƝB "7%6CW) Пv OIpӒX0 7eѨ`(ů/JZ$ 6 z]ERJMH_Ƶ>d{w/L9e'dhuׄ@-HWIEP{<ƚXPԣ,I>Y8LcL J@1V@I!AЬ"mP4I/FzߍE2o7$> *2R_ QIɸ99DoXjL>8HY@0$ Z\6#p2q@&dKW^i9~꬏>x|+w Hl i3 UURrC`]Q@͜rQj=_N, BPהX.PSʼ~P9_Ao㉱w4? JU7%ਊ;8|g12bJx$ӄد B3w(}D)EZڅASb9"wdFB$-M7ob,htL? R'oh 8>r([ԧ2 Iu.>@E"FM]?SS@v3!A: *J}# #;H}B?(E({٥|v^m#Qԝ SF8N{DFT"`KdJBYb9^ II|t҆#NKB~AxeFI͛3sڤGs>nݻtl۪y~>!-;|@6ED'a2JSyv%.6k_C#rXnܼUN]{0x_cMwq2 _RYɈ`n_4ԾmhD8(EѶbb*Sx.[) 1%(Qcb9L @BxxXEi>7I7c[< E~"' %e`hqyYW7)4 JKBMzVjg & V( sDd}J)sY1H'I PUߒ<֜Rc{Wh\5d0hStю9mV(D_ˡMK)O[J{b T'#* J9Pj@Ј4!8`D,'t0;]Z@фRS'nΪ'&r72F#,8/?sL[ҭqr/1iBrQ7VtS^eǘMwBeS2}P{7eDOen)*"SdX1QF,`;WA<S 6E#.ud)5Pg!b,wq]xݹu5+-7gԿ'1tP^ݻthӢK5;U,[ҡK4EAHkJH1&Ow@p) \)nFT@ k!M`4e/+M)8`X@Ʃvuu3"/JnP$~[Pj<{abb,qQ)| J7KlD})_#R"j=M(sAE)T][C̨3w;D?vw1L2J$k#E]$p/f'+JZc ̍f(W#ݪxCiTBg&>P2e-Wûx]v@=)P$s `\ԄrLJ|6#fBІRR`#1 ( B(p >3 [(TZ{#,DGZQFYņ Z{`ͅ9q6DtqrIRׅ]tO"INU]$T.4sƆmlg01`,9JHZq^ Yi& VV1')->X|*ŷ,*~$lפ2gl>LmEAf˔ zHk-RA2O1')%鬂y2J**^EKlKWjz< dvQ*'qSߊ#YZ+$x[뀩:ؽ8WA.1ZĞHR4'ut(ہ*jݻ9_YY>J gMFSƮ%[[*['nLitVӁTq{R: p311')%nۣCZ 2蝄dL.|G֑סe.cV-sR{?0Gy{dJ A|{|~wJ|˘IAмN*ZLGHK+T]qa&ʸ:re2&$@CG *d̾bU{plD&&C$1]T ||}@pLT(j/}v%Rҁ92&$@9Sږ*ܾrg#Ŧֿɭ2ȶv)㴟I9KQvn:Y$h{ʒkWR*7;ҁ{aƢUi511&)M@B8V5SYTg&oL;ŮZH&zfɖ: j!zudJKL+ţ,޹^ >77lWɘI@ɯ8j2(]^Ŷ!~ϐ9P>I'Jʥt\cj$\2)-hy;|)HAޓ11&)e_Up$9%?e_UZxdR{ H-TB.WɔY@)0Ljz2k31%)mow g1ʜe۲ *~2n 'sY'S:~#/N=(Xl룇]uf:2&$@a` pTʚ3?''UvxFeXQ&_~7*I}32b;ۺ|;c 2&%@&`72Oeϛ*[zn±| ~u@++3oX}¨un1eBR$`qR*[|~_SMeOㅸ^*eJXLL)8 إ\>"?|<.;EUS$px7&׽}ˆt(BZ[qSRuZK+AeSX\)k4r Ju;;h$#ٯ=qǕ=ZՖ1eVRdJs׳nUX쫫eu ql?CeIm&GS*.߉cWAf*1*i7dJA dlWWƔ}I B.ܩh5_c];!M=SΉSv\ g}2VnT}d-NƔ3I ?9|pY\ ǯMTv;O/k5m*vJޭA`Y2UkZxkSTkt\/wFOxcߥyaC%At j ,)#Ǧex k(GB& vL4d==<2bt&ptnxJfɑ>S}4 DZh2Z \3(GS_#5ͯrhdڮ29?4٩Y24ıLT^5'c*@L``I 0^@ A4p\gpM-mñj|0̈́\R-2@eLVخK H!Gqd9L~<>Q)?Dȩ2׸8Sc XUt~g/A^c3ĝtU^)Q&Rȳ h,WzNT:Ħkpl@&V$\I*mJRql.c*^ipB^f*-z$A&VG8R҇g'%kHi&cL_#i"pBM /3qL*jknRGgo"}?sLxGQM. RbaEcd푉iC8R˔IO|=wCbL՘1H`t*xou.S<^1mq׶{1ǀdf>TQNDZ Ws\kʔ W==y'xe-8$cL0ID(dIȼ[Ƙ3%%?'SLd:+Ӈ.i"Uq]rVje'SۅcGoHu8iI:y%DWsr79V1&TI Ȭ,Od*~TLD ך@&ʎBJ&d|v1T ԑc%VYd*o&A&n'9J&|]JnH>1qr($`Ltk: gD-凩xLԽ{m۷us8,pTPVȸ#Slr0[;%~eX?הk05Lq8n#y,DRSG~vuf5c p?(,`BwT\{3pI&2' _۪)2l klR@Zmke"_Dead9L`k[e50QbKD\`L{;1uM9~N62\!qq6Z(cau ~*L 48`s=ȩ..2Z-@aQIӁd*LxK&.߈ki1r:)kiTxdDRwq1@,|2f_& V7Z(cL/1^y< )c^ss=>.2'3oyt@2FD T0Y6Z(cL>&}Lv71xA&* 擣рO2D꽇`1z*:d@dGHV-pL%mµ4QƘW=l$l.c2Q_M[iK/?q)ad3"%Rö́^qRU6+c~wi]ք/ćd7a%Se"4i*qGƸj2Q٠ ǽ20 B֬)jc ;2&T߸7n' e""֊dL䛇c 2%AƄd"s a)d"`P_| c 8 އ2?.cd"X}J2nEh\;zdLy>e1DH?ᚮ<ڽM7v+ɲ8S k-|Z\- ?r]6,?^WI&R.>Q$u dww)K.R kȘ,2mUzKI2t0^`-ۈ4\K;Șk ykdLc2lԟ2ޣ%Q d"j0LEqb.eLb#?[Co$q =ߕ ɲ )^&>.UtfIEcy;?O1eQNc:\?Lyy+,\S K(y)@ *N! q'֔1w8F@W<+cQ'Sɒ>k8q;~V- *%di;llǵb3p;K:v!?v:E;mꛉcTg_Vd':\Sj+[W@Ķ 8fū v=r*\e*zBI,j)G_p9̈́xXh 까Rq-,J=_9zµZü/ rF 3IY*Jõ}HLVe< 3:L\9a&!~ W^lU5UwqPi m I9MB5e [d|veWwY2)oMΔ'Oza³OyQ~ǐAt]+—'U:Q>VCtךK ݷ{eLLG*Hq<Wc>eLi3u7⚜;p-/S=<*Ssej&*Z~*%=?q>SYz+rWȘRl*KO8\}^|'SL)@k ,WiUXCa^0^9.\kC)cOG4 s L!2 '7q r\k{)EqF9j<a)ymRqLבj}y|Bh #%Td}pªXZ \;Ș~׼:b7%lqtRd\2Q2XE|; \.P͸;N9*=5)Q]1s *sOLl|{Ud?( \{zO1%NceL$2G7l.HvzTDOEEW%r6\+GȽ2<xLD!s$]AȬe` ,~?RXgvߪ<'c[%c",8FID͝*[jkr.\7Q)-1BE1dLR2SI?}20LEHb״ k6׎땭: /^V9L x`*c68O<7nrhPE8T\',µJy 2*[t8+xhf/Lg'eLn:ŕyw}@C:y !v5*s*>4\6RXoqmRaq)[[cs%8.4{r!U4<DCh<%+dR&dT յ -z¼#VO!}qtS52& unj R.P-viףxTUd RE7wVdx5Zkcop H X,G8w* xeQnqk!2&cRp nJ~?p pl=^\Ge>v6k!![ɔ*pTĝ,Tu&+_ eWne~=S+{&|VrQabZ $2`Mw3e eJN THe1:!xS&[eJ}DƱpܯhHƱT7qr%c{\Î_gx=Z5pri'Tt'j&8ΓoYDı)QGF_x n%,@پ~(ۀd.ۃ 9Uu`LTd Y#c XS]&[m_Idñ4sw&ac=GsG?RcpLIX4v{G8F@_j23d"SҞÑ?ȵ~S}Jw*w63^|.SU+9uUqqmrI܊c\g+eL2OrL{8(J<8үP* l#q P.@X-'r:j:XL–u oVL*n]S*+>wdJ p<Td*M@f[ 2TnOTh#Wu),zO!2Vo.US3q<$'MX.kŭ>RȐ q ZYbxK# ׷*DZw|SY*,e;+)d p9;W dT) kGB͹8v"zL޷t(;SP.M8I˷^ƨC$] L:Z|Z \p] 2ɘC q*S:pWAcSgJ'5 MX{th?%8@6#ey?֫? k>gZlҠVLW{>XK^K~5/~nFv ɘ턝 d!qurZ\KZ+_q:VGZ J~aƢ9Hū*p@iɑH۾߿7_}vLYɒ9:Xmu: $S &c`12қPRS-\FxGW$\?7T<3áX}co/L{@S1QGsvolɘCk BF 8U] ׷-p :@^68[XT Y6~)ߺ/ǵgx!prTuDuw~.20nqL Ȭ&SOǵgpbҨ)Kvq>8n{Np2/'G\svb*Y~ \~wa<'ϙhIn'dʳ:/q}LX2/ᱭ-S.G~9/m U .So6{C>Z:X7qى ʣ𗊧U/j|ՏJh~ @zr R*?̀tOHr`9cҀioɔ(g'6 U@S+oT"y`Lu\j)_W):$_w:hsxq\N7`G.c/sxrx{u$WT;鲖Jۀ dʫpz ,0V,N!Tw֏:J (cZK/21f-c/sxrx{UH!}q2I)SA)*PMS><;v2$TUCLH~2RƘnW߫2 xJ|9!-UJ~rTh;99=q2H< {"> %Sd@/s^3vxŌ Lty*Mu݀T6V5m^/o1G;wU\*S|H}}{Q+fȔGG+J]0`>=Ct0ߍ)m~=M<#c)UXgo^UcUsEˁ!2mqq]g=md_:jzV |xO~ɘ#q*G2ql@UcEţו)\IO(^K =:dʹq2U_ (k\4)mXV_QtPx@<xEӈ|dΜ$f㤱ȶ |2%^U8m|,N\: ɔKKƥ}c"^mO$`\C]S.ɘBkڪPGql%SN܀cA ESņxrɷxO^o::H{#!tO"wzW1w&BLl"\dJ]8>(kWL<#SN] ОɁgWZNCط:W-˫Ș龈,_^UpV^Rwǻ>Ezdł Q,IH`jkz_US H'lZ*|J=SyQR, ,)q& ʫJ7m߇WU1TZ\p}@GpJ+-ʔ_sֈz}ҿߕ"ʱ>qdʔnkqR8צǚudʯ *w_rk0pl;I&c"~VTy+t׏c[O J M*fd-mnYUVeAmz|K%,IS˟pͮ/SNOc33? **J⪴ Dpg39H/r6d*AJS\c$.^閽8Ē{֊ ML!uNCGrb^Z2e*wU>SnVL=+0,'*.k-d.SQ <*cʜq*78̙<'s6k&%˶WIߠ}ӟ40dL*8 9{Ԉ5[==ȲplHBQdbMT%ST]:V82+&|O6/f·L0&\;Vi@s=0S=V* ܳ]db-@FkS$~I:׿u >~OĘI}U7e}+Sq|呉1qɘg0rJN\C{rVĘ_ügLHűb_ 5.cʞ8.ԕ;TRz`ҩ_ӵ=Uw2UM:ĔAWQlv;쩶},%2f ){j674J) ɱۡr|t+fcv>> O 7+XoH:ws=2+2 :9,JVT?7]I覂LWW~jRg_d~,[>1e}8% d  zsn*HӽV- ,3*L5y%J|n.KdL8]J 2@QU-y7!mcSn*#ޣ}`L8{!ߜf1eS GI'~B?MYZw93ɣ T}=VĊq|]Yؚ|+ 1X&v1e9A`:U-} $һ^ZJn*@TK:ĆqRK&|q0W21E8Sf1LzɊSxz~Xn*wH>Ąa8V6pQav<21"! cʮŀDAUf:t=qS~jXpMXB"\VQ Ĉ|2 k^#lױfTRX@'wA^Z [7UR\) sW& 1eZt>ET݄8ApBGY>F˔Ӏ}:ƗZQܰǮ~r5ۅ'Zɔd`sUSMq^"xEҍYx"d®VɔۀKTAy+b5' |?L%cʸ)VGL*Zq"DU t)]q*I䶮"{~l&Ȓ>83Y[ƔumҀevԁq@F[})Uq*zpxvPDZ"9<=^MO)%R2+R*|+9 X%Sj,*8U cʃ+m]Ӏ^>NJoq -Sjp|<q'I?E82Gy3Ȓrg x]Ɣqҫܧ{TKj{eJ8Rj;-E8Vd5kv=07>'SB.2[ɘr3 Zs$*Tgh1v5 `]UEVܣA:OB:˔dLQ/H2+R= #Gt`L2l2A&z8QƔgfNT`]]EjxE^T`zk=mdJ9~`gG Y&qM3Y2>+/z>( ̑1dyTgf<~&%~2 LH\ Hzہ)88\+;@9PU˾tꤧ7ҮYx8 2<]G!Tl m/q<#SZo2d9 r OR]Ǿ[tV9{7t'oO3j荗֦i-La} ,1KV׀8 AxR_dr|*'أ;v)Ք[ў?/s dL9s a{`eMSo3EDŽ6)G>ZՊʓq-oZ'{4oe9B_dL3g T%E~\SdJAq<+`r| [Ep}=W+[8qeTE/֑{/_#9"OƔ;~&do [Tvoa:L9*9ɱO!S !NJ|"DHQFs-|vow}m}u] p<cvWclj!TǼovWYѪ?8<%q*Ε U\t#`dY%xn/ɽť/c]cMd+~':u1YRکee.;*It[b\Hq_y&萇0TpbXZWV ?sdYG8rJ:6í#r]1Xw@Z ELtTثle{ ,hi2nxIu0WQtYH#\1EN9d|9nYE܊_ͱ_4܎2f` T :tx/Uv2^2)rbx_aj1ZAXYް#eYB\d^ nyxRQFda4]RtERh5M RS\ \}֒eU0etƩBd=񈬲į~4V%k 9WAJ^*XKxƒcm]1݋Ke>&w'*Uہ8ꧺȊN:p{_oU.[1tA) KwjtȈ{;~oU |sOU3l$"8,Ƿ)W}MEw4?e:A.J5p+06Pq(ڎcE@ic q]~{GՔUm$Dq? 뀯* v8̓Tȼ75_d p .+󁴚i5Ty}߯U!1IN(rmN`["* `Ote/:!s*I] J4ƾ4O^[yP߻Ju!WN^ˀYA8 <ʒd67T1KJFEL8R{1 Vz% <$˪fܟQȻɲJ0#\*_ JGek?G|j)+e xIT9mđ;*,s`yF)Rz.q81Am'e~mdU?q؂ܲ{ c3rD\*kkN+wcmYh#+\R^Us[U1'~6UEF8m1_c\HyߋL`v񲪥w1-~ϗU +EAHu (ʳ7=%ߔ=q'2g 沂rM|qOyplޥc-W+".؄cǵ*F`'_>;q<?AVu6}7õXYSAqۯzߦi8aCc|SdA:DVpf;J5/K7}BV?<Ŋ7 ,0yuKMYvjƞ\7o[Ka˜|x:L1kTP`S ͕R`=Mdj@VpZf% -~?uQ84YcgKvXswV?ձrLA7Di}df u J2 <@ wTȗB%+Hj(rj>ZÌ0;'T;w*|:o YsK!@FG**b`h (` Oyp|j="+xYAr I)7y¦v#c܃$1Qߢu-ݲ,is$]#: *ݩ)*`g[V.oȖ{2n\%+X'c:L;(.FrplNR8UX\v?(HR»9eu+O6R\*W*j0ZA'>j}o-RQ&reo*xGPkG HSgTAsc^ü2,Cy >~%+`7c SiR0NS^z-RݹCE,Vz*E_`u̇ߎ*S ` xRrG6q{BV\s) bLQhNeY:w]qqyugS5T^Eq?XwBtn yV'*K[` 2% yq^&F5^1F%*_Tpu?edJ{mYeU11JI{i qxRLPH;ګn ͳV]cdYՔkrdm] f^ҥʪρI}Bw|ʐ ^!p ݃cY z ILN 1iOYzKe:.ȝ <{FnO`"CtUY"xGr*Tu&|*ɳbU\q䌭\BS+ZӎoɳX}z1 HGT9y_}2ʪKc VhقLMU6^*=ڃ `Br+Wa!B:Ȳ3}٭px AV49/bM5*l`*J LSNR֏|7}.YV rVYL[Yv-xGTau_űRU󀬆zopl<]Z[q*RLjWK!:i$+̖Uq7dU뺭8--;pdNw8Ap?cIWŸA X ˲pܻ~+Y4Vty 2HjRHnR\&˲* E:ʒx\*}xY?fT NOZ*|T@"j/PW!IR0>Zʲ[\kŲ*dC=r~V1&p:[Q7ynT覐(ȳEeUXCXV{xFVX܎qa\bnߍ#Au*M|qK@c"a)~3eYV>9C5dSdg뀟;[εxH%{ xFh$;BwR,+l/ynU1]ղ+eMt ¸ߟ*^`SJ48U Ʊv2@apOYFRqk]̕ȗ>`y~OUP0P%zN6I߷n<`!Fe9c| Rdd`]%#TELQUT.{ϥ]/˲ӝCtg M #+8݀TYa $MVuPIR!{*0 Ƌ MdY\?Fa,;MVPeD C}@ɪJT-@+E "嫟 lAnEY:f3T/ogofYAhNuӁu{GĩJؓ\9@MEX]Fc" Fd,ˊVa":܃RxϓNWb\~~`7EPW8Ԓk-v*ʲh HB^*c|snYޑk`{ Q3b}mEge*=I < >~ D`,ˊZ=rWUHk`*l'Vq>mT&q=_r**}UL_Eg x[~;|o˲5!'+hk~#cwzu;s1~J>~*Y|1P_3T@`"y`m}@Ocs SRYjV%kO1[ɓZg^޷e=Sd{9[>[)J `zYOE$#DY cE¦xPy/y)QfE `0Aw.0[F4Du.}dYV4{c|VnXJo/Q1}k]P; f pIuN鹯6(f71Lc$ü<1AT8/'ʲhV7X|c|E %ULF jӾ,GDeIL1 xBmgE.aCq>vIJT!o0Tsp,!˲@T.8֌Rێ߲%RfCZ֝{Υ)nYa96&Swg푨T`{Ew:bEfmj-xV%8 1,+}dwTF+1T W9T: ɲMṾ<1K1PQ먢NR>QQI0FV_, h ɥ-0F(0P vF楲£F_٭&) ҀJ05:LϒeYUuuP:r7~Q/';c[ݴ~vd9|{LVxsƨATeTaw yk4I xQ/˲9@ƈxȹPhXN۴j4A n 38YF8ޯ!2r(on!I1r\kJTY@FomګʲڏvsN!oONQ0'rXLV 4܂-UB_ vtT>-pl>wҎֲ,+dw. |=˜~$+b~g?eYq>:HrM WƞL9J0V]}cMgYk1)&RzUc9Fo*^ck(Һi/ .˲¥r'bggӭm]=0_,q}dExV2<{\{c".% Waܬ,3&Az |/eYV3~cnRz/ ;FG h,RdEi>`$M~VulrSqMa|QUO>lʲp:~ԩǮ`Ir#(Bܯ,#cbd_4`m-ERSvݭ:[~=2*6]!ϾNQ,+\WoM'y7~IJxx?9x0eemYa7h +tPy^RDr߹96*q0<3/O!|+˲+4҇ RS"=r\ycd`1jW [鐓w"j0[ynXHGF\p, [{uHMm"od9zdYa|8NQͽ-wL | ;N4,(QGi(Y~ً_E ̏I$",m'2cxnFrwS/*13k* Y f2`_+)aFj*]9Z21!VV،[`%+'n6{1:":y*'MeEFD0#5I;Nxću]Ya R&QӀ-bWtd_$Ub%1(ce;Ya lo6U?Q31p6 ɯfWʲ9- 'aFj*E8ގet݄tY@U9I5l|7aܥȨRY\yz/~ɲ sT aFj-U5e4#vWӳk9LRs=#Z[i*a;F0dk+i.Q YQܭC`V%9w/Ɩi8^S;O7;ݪfkkG'*n|U> ]o` vN,˪D +TY: ?/ Yb3Vȷ*@nUA_sy1<tJph0Be(pKdYV%DLO%]N mSs)jU#C0ƨ*Zc.U31.A{*N_ f x,˪|7plyXYǯ;@sueSDKE=8UAwB*l`[]S4~ Pȝ-8QGziZw74ĵXB2&qdWYz舊9yb:2?;r06_ j;E{ޓk)8uN:(pgy;:F%1X.VE5zˇ*s/˲[G`4W i8UUcSgPGl`R\CpÁcut`S>ibRdYVKZ*tl)w$ SMdQwY:`w~W }eYoxE©JV<@Y{|VQb݀ Ɖ<eYVt裨3JYa-U&*;DE|q@>?vV)gʲ+LVx WW/ X[KVYE*Xy+Pnñ&J3&˲YN>\^Uy'*[t NcX9*0{J,ˊb*!+> qY鶟 V! 㷬 D,3eYV񼢒k.YV8vTŵ,Uss1rqQCOXJ2Tkqd>VeYVXE{?ݲ¨3]U ܆g>N*$}8@'fV9Y.YNk(Z '+c<212SaMgp-}8D $˲(r;xEɲg0RU[J60KV^ĿpL3TȝP[X/˲S? Ezi:& *->DV\`o0NJUXȷ^e3ы㷮 ",ˊN30F+ޑ.8Uic /0f]-*t5QLDZ+"Y̥;UiIc2VSXh ~3(P3dYV4 ][Q./`Wxf`m-YEſcu7w>q*T&Ȳ(n7^KVXNWU? DYiQ鲽UTO*H3:^A -˲O@٪.Y$ qYj/R%8>V:5,+>øOUA 8Yap1HUX=8YA;n"'XKEō[ ReYV񮪆VnY{AVxΕ4p7&9E LPjʲs=AUĵ `0ɪ<~Z f`w,ˊ6[Z9k*+%%.{HHZ(PTYYm<'hl#+DgUelo"blm+9_[,ˊ2`ܦl0MVzc{c}f p|@>Rki*-˲sjqVUu$+1j # /F) @`gsJڑa\ֽ,:ѭJ.Y>RUo3kM9܊X襀LP;)s1,HqHkɃjɪ>@' M߸h:MUGG}T`g{ՓeYqpQ|7 ?`00>#\g<?+ @lJY!hzeYV0?b\*(fRY=L } Sr/8NVj/xMyNI>r*[k_g6($7^tS퉲,+bW|g9h7' kYUR< 0h IǏT%*_l` <%zkfZމ7=$˲2>VUp1' P`KU}dE4@ƎT7TZ ҁ*,.`J{Ȳ|ܦ*=s=}ueIR<,Yar.[oo[elT` A=1*blōQt,*r$U}/A9?NV~ DVQ_JW# r.4nUnߦos ,TnP_GWy9hsdlz^HV\x0v_}ܥr\1@,) \սϪ9,*Eg ]G>A_k!,T& rTz/UlFi*jTk |<YMt% ~|,*:ĝrI}XYRT %+xU8~oRt2UGcu*)Wqq끉:>Fv.y)Ae80AGÿ]]PV\Tż(+nؕgcB $gUg*T7#`gc:\]}Z=<;n.˲1pFr>"WRx\Vݏk *dYm`wC謢n)(fIY LAMbl:VR'ÓdYVQ+>:Z/PJ8(<&kH-G`tDk]< UBzZDaÈSq9EWg,B2I(I@`i VӛTjہBNve< /~{敱NOs(:U>p5 Pt?keUm/evf)llQd/))k`&pxL#;Jk]_kcAo~I`nըeSPN2Xgo+xrnh;eT}x՗́XeU@GmG@-jn Yf'2~Sn2  -_^.VUo&V~ 8=DQn5U _N7Y&Lt[pyLwnY%+3 (PrO Rmlb~ej5s2<HBYge)uX P]KbYbX -Pz(n*{,*|MbRͽ,O}T>Cfj 2SPnʑxsrf=۲D9(>H z4>k]eƪ^.GEdY*S5rwW" \XA0+DգakU_Z߱r Tmt S/i,rP]CQ)=LVxOhY]L`qsWTO+GQ}jsJ-QYTXtg2H`+Pۦ8],<&K > x@(?ztSջv\шT'NB2?e&tEZs^ĺ54o\OHۗPn=^('d,SL>SFtQSh\ KpkzmW5fͣ\U+[޳ 4YfM2D`_eWZ)n.E3?U'9WL*j3ewo')B(KY!n+ESl#ӽB*(wj)[\fap2岷 8WhyXMِ㟿霫OT{+!0Xfy`V2`Nٞz+;@q[R؂cGק{nQ`bV2]\O[k?Q>;y!)PGsIeXt=R$h㛊;D}~"6Da7:XVf`p2d4xK!,6Nh}m7x cE!EvUyPe;m:ˤ>vV8Ź>ح#ڠ|սϏ'N,e2-Ôl5Bj.,yRaTU!仝Q_a2 [*S- d@YW[乇uĦ:ح#ZUMܶdye߀~zʤwh`aY\sY>a{5P]L`Iՠ+ T:.YF  _F7=YF܊A@2WGL9p[@?Yt;襩eTjuiᨳe ^X 未5Yf8H VW N_ʺlY{-ZɀiTyQ?r %]dD,>˟ U+ N}4 Η/?=|r{){ዩ9Z+eŞ\qYezŀSyzUXZ!TB /DG-d߽5>96KjH)q7VDtei94[/[`<`Yu>Vᑵ螪8vVDLYfخXO.iB-*!JC A}RHe;,36VF}X ܠ <,'>*OUɽr1^I+2 *D^"RD!F W2X-rxզ;Nb;,3 R<ٺڮPŹ2$SuCyQ eVK~Uv&1US/e͔)+uH6OfU/g2C{VU03G3xDf"k w&-E2@v.J*V٦ZF۾Aq2 9Ӏ M'O!O?f)l \mˀ2é@lWF_]Aۖ')tl Z?Df! ^Fɪ/`Bm6.Q4Yf8JwʪS 諰 <"=q3U;_se#Jo_3Y^PFi|,EQ4_Yf؃)Jkƀ9J`LFdGſ~3nK.t]vW\qـ^|х.8USUc4&";,C41dGYu>Vzvm+R6N,*k)p׎KeKBm"8^vԆm|DfVɓJWsة|xDuֲV ;׋^2mQ ܠ4U/{.p¦/Fd)n6pP^Gs?<⡇ |p<`aሇO>*<ܬq2JRZ7BY V6U\E)},Kq(*A@lG,*-=E`LO+|=U.X ׆Q2J7S:F)|ΏRlYV5ʞ ; dKTVV+ [GT[X,,k pY%~>Δh pBh`jŻb#YhOFo > \j+3[_L%UV m*.?XyQW򫡍ہ&%@/mXR(k@o2JbnvjBiSqbf`,4fVMn ߨ52eM)\$Ib%>k/\"K5y{@W wUb*Y%G8Ci YMN)nUr&\I=d)&g ]kTKUOTv\Y% h;KV II ]@+,DFz*p/U/{p_ WvdfMw;)l̑`2i3 8>;^b tJo* \  ?iBLj̬+.U8@V) yLrWR˝foȅ8 nPF*ZS p̬]FmDfW(.TuQF֪ p,\G`^?K7Ze۩*ҟF_6=@i{0Y zѶ BQU-iFhebA?MXU%{I) 3ې(3Gu ʚj0 xE!5$|*@Rըh%K!+vZy0Hٍ@?sas76Zi(`WG*UXt;0[BEh}@[T&]AWj{)3۠,;C.!Y sJ{F+ E#K%GZ@`ո0F :8G:p5xQfV~!nT3Oe5KtETA14:n=Vej}mAsMDj]Ge]dfUh*qvSj-:ɪBM_$㎪B/K+KP&͟$,@7xTfV W^Q*UVЎ?wwWod)<\{jv<&lxUw:P\ 3R)č+P xAVy WXz\uR ܮDT _ ne_2=H܂#^.U/&)]T3L [D`6Ia'7s)̬G- <@OY^Vl%qO7RDKL$TD-?m,z7̪S0)]Vd˪. 쯐9UDTɇ)T.WUYJ;Z]Ur#0?_fVuQ/TJ'UB%kpYKd) qO3T `*iTfVݦj+'} Ry[:O,<@`R3՛KVZ{ ff̪l4q38DV^@ ()j nPeRS=zgJ bPJV؎J=ܠʾ֡W5Y#3󁗔Nd`ipf,p*ɍdq SKef5UYtH˧:*lJfVHh#pvv"(*X$ S!i # \#3F;`R@^W~R| JN>7b߆lSDzYz3.jP#\uJ + )Bɘ^QfVÁϔVGA%KV LuXΐ%]dǗwT2TиAVk+Z(Y~vP|]eIXc~"0XfV 3expe"pB`*)Ve˒̀/XKZ(%쿒2 {^MPVw$gUɑDYz5~R pl^R| [VQ$%p``,p*%ޏ,fꓭTrCefpBS\V'+I UӁnU,)<5bLfem`GY)cKpNv% `j/JTL,Z]kxJE/%p̬HhgR0KV7/U{݀骤%P'Kܣ_)fR굄2V+e:kD_?.WVW%[()~SU%)k!k7G)"EdfPjv'1겶5h fnS%Wd VD-vYDo>Sdjm莲t%b1PZ\JFWq?߼@u>¦йCd2`[`7ڗ[`Ybm,SiOf1Pi{$ֈ}|^3&Q2Z[ tK!BX{6't/+T2ܩR\,K FK_2V(l1G(y|Y؇@%E(օ(U0p,nW:7/h~kL|<$8 ܨJ>F.x9GfV.Z).իӁh%. Z_j,)l=k2v@[E/#g*Z^,SmMi};dpL^ϕ3%5J%.WW eyZ;DKLo̤Á/DUJ.xjk W-uf{;d+ ͓2Jײ} 8DtmTk7C6RS<מг,(MMdݔl%jh]:VOG >6Ȓ`U)>m*Ll/P|`yicKyK>Ot7J[mG`B3e@mR`YC UQг,4*m2\݁J;od C1pRx`eYk@Wh.u0AI8WְRCŲtp7SW/Xge󀗕d d ;}pGwdi 4v2׍Jo;d U5)eq d \%Q@Vj(w8Q&/z+m D[,szxQ"S@+FkJ[,MQRmV+kx˛A4i!K{4;p2j,,Rx  K#)M,ɓYDJD V80Y:9( 0Rf-P:X/KKT:,˗@R~2`݁YJIxT- ,jtt&0;" v0AɴP,1v'Kei&gp{2d/+^%9ճWef0_C)UfFA%%ʉ@t3իπN@+e <ǔ&{6OիIU2h(i+V#KkEUvoQAtPQfm"pR,Z,.QXAFn,vRl5Qq3J/Y2lQ4k2՗bӲt+,Ϳ!p,TOZf7#hGGgeٺy%~~OJ'e&(^!v,P8=4v1G#߳e^Q2W"5òdlvP xB~ ,K,Y/j+0,Ǡ(p($Ofo '25G9daGg2JLj& QTm e>X&+df(a's;Y(F)XLɕe@lp|s;a{kcweiR`IwYX| 0L18FC)UfbBlU'YL1tpLb%F@I_YxdMS]XY1MU'MhٺmoimlCnݻss}o<ywIzgs..koyT_i'`bΕef&62F[`j-QS=((3aJ\+ KUH]^2~YBoq;LxB kB`F_~(f=eSfN91-W!2 8Sf&}!QYlY uosw{Vʆtv 2e=xb)DW\lɢ?>wsfϜ>m7e/>O>?ط|W^~=;zSO<6ؽwCnS}XDfb`35# O~O|?N{~d1|U./>=̤"0,|",;k,*4=p*)u="W֦].3nULV0j,ț;k3Y& tDz(_~xOcտdg̤πS.&0@J~w&2rJ:E/]FmWefR(Q 2`vpʙC`ٴ cS.Kf7rY rR{d&jY d+P8A b`E/YX֧y2ZN{̇k 06M?G%Y_n-0'V@`Y(K( VCi>nRR.;]f!pT@2+oʾ_d Me b\MelJ V `&Kef7u|pYt~Of (i{̬~5 iӯ{oؠoW*Jg,N>WCh;=23o'8Hkn~x^l~[*$o!yC y̬} |3|͞8f-m\Nl˽/F`ѱ2Kw {+GffG)5gT(5'|%FmG>n$30V4{\wsrnZ7eG%xճQ%sdf ,/?Wv@זJOK/DxUMCff JfO3 yRV@QLF,fUYF&23k09fi DY(S=j2q̪pe>PvգCV{YN&Og Dxz?oUAf?:, ,)y6U)w;%[t6( =,qjD)&Pz[̒/U8Ra鹫@I2Kn,m->$n^23 ؠ DT Mro*3p! L}| LO*M-c^P6%ҫ-#n23 a@$wPpY"E=zB؎23  ǵV?"3fԼ x5Kf#{OU,Te6+ #PS&y2K+WvLW,\&\g*05Yb Ɖ\YD;NW +,o;ΘQf覍8f-3z^%k C֯m62K^|mDS!RymO%,I^Fh>,nR!> K2KwUw&23 F#B+%,Yr۫r*#zBDK+ /%nbk |#d qvY}Dh/Is[rq2`j+%@9р"w,ܺ7Hɷ۔{v^ ,Vf>Ou[B`>23 &d+ٲ\II2KU6j&3kVld+IK%Ѿ/q23K Jwv"/Gft30JutRB+IܢOod,>U= \$3԰_;%Ug)2K"k`Y-qѥ-dTJ̬F]> &*j`.2K['TGE23,"]UB0%٧Á 231UVv +$k6S]<.33V2h%[dlTW̪s̯-8SkeE1%?23JO#8MuZffVK7 F,隕6@Q̬ 'RnֶfvY"33B)QQd#TWdffUU5V>sHˀeTWÀ23jj5޽Ӗsd- Nup̬z.VLfp4lCffVmoşY8b8233Tu:0Quq5IMdfff)1NI1`VGYLW[,Afffn!0J"dfff,:U;fSdfff@&_,mXj6BY&Fx=Kfffn!0J5HF233ty1`Z;YzhP[9 ,"333K/lu[ Sfff>ƀIJ/@ٱ233tr QB..׆F4YziP[6  Ԇ[JJYz&kN$333K/*UD`,D^'ppJEdfff@IoUaΖ TzA\Y:& /333K'tCࣦ2334yʖLl)333K#~Jz*#0,lXf71|Ugfn%333<Q%l!DHdB !d3")d D!)3iUaV!d,T|QiM ^"g/l(8oJ)37)6NJ\|:YZk Z)%CM@٧N3g0O~qP앟yTm?jn,U2^|xݞϔC;R;) so:kә ]RKF/ܓA(-a,(8foy~:T=bC+v62)#j, (,>?L@|Eϼ۴q]43`SoښD/XԲPPM~c}&j۠ZYL!ҶWDJI;$`p66 )M`Sғo޾:`.vK(fE+54x҂/=xzݽF$y~Ծ g۾EI@_}Q3&$k>qCV7S * w.)MCv* Q(8:`2gY9WYRgYڼ\=v`&ex*v4͞Sw^ksLإy Cl}<}WVuC Qh(:xy9~r"t`J)JZ4hw\#u}ts& fWRϠ0l1uq>J]d>vt9Kօ2SUۇWG.sfEA)K#}"[Q`w+(*tSo88[,V)En۴q>% dw\t:-ܽW툽0U.#NPr _آQ;NB~vo^TNߴJ={'7׆^R#Ja}snߨF9C|ZjY&#ӧ?|HKK}ݻo޼~/RR?{'=zݽ{[n޼qk W^rҥ/?3gN>uǏ;vؘÇEG<y}""ٳ{wx;wؾm֭a[l޼iSƍ6_nڐ5kW^rϖ/[t%-ZpA@3{,z{憢P+RѶwRon ti]q_/io' ҶWDJ9Kox&G20٬8 o2_>s tLU39jkea<͐<gsZf)jұψI+8yqVUFʝ wY8c̠n-V*'P˂SAQ,MD`PڡߚgK??n@*EA+/g/?<˱S[wZ*sq;:hK23֨cϙKC)u}x!:,wkf5͔az[.'ۿ.`.-J_ATeV], F7Ι8̥}  b p3}~P؁W^=e8>rݼ鋂EQƪUꕻz(>jCD7"ZMH_^?ZOAt+̤#!34S)b\^#.XORw/XԲP w%76tQ|JsuUJ-_q7?V&! }ƸvkUrI=?¸Uvx,u*,O3,Sņ-޹STo4|Ggi޼dЮM,ˢ`F~)5vN"SVu ;L+sd!ERuC']ȕGiRwOvLƼn~$YEKћLîBkz%+mu1dȼҾpr@]:4Y@gRvW/}wRQ( Je"E32*^ܸD J.SlY3r˫T yJ+WZZꖖ5jִUv:uԫ_ֶAÆ5nܤif͚ٵhѲU+{֭۴mЮ}:::vԹs]uԣG^{vӧo~0p WW qw1l#F5zgcƎ7~ {{O8i)SN6}>3g 6F_I\{*Kk>ZV&&Q#srBε?~Q/y,WwEm^;S2+]Eӗl>t' Mr‘mѽ[)g (=J-`͎<ϐyM}rԁ-+'ӱϢ,]nFN| ?"r\Ħszڶ(\4>lq7_kenSņ-޹;fݧ:HM<\vuUJi6aM cj"Vهkw1¤m>/Zq3ԙ݃K1ۃҽEmU*R]v"K"-|ݻ6f" ",=;0te^i^޻vL/7'zULKU:pнG/M$O;Gl TNZݼMH9˸4٥aYQHUۺװׄKxQ㓄ckO֫u݊F"3ڤI 8?U"f{oW/CP0ne~IYړ"iɷDŽ_=o';ʦQZٻq6Uuw./~MyL[%jr̝&͋آw=_I @)~5GJ,30+ݢ\z^.ٍMէmj;|kdŧ'mY:}DVeBiVп}om̫̗[Ժ(|T5:=;ľ?Ѵ Y[:[,坳 pl\ev8?xϩۯRٷv[FU 0 z{[e=~:2l#:62¸Uf. vGowz0TԶ3ǹjتBSup^}%9SSAѽ,MDΔ8{?MN]A<]ke1[Wmj?^Ŗn e˜6wxJ(JUmءϒOJHiޏ?un][SKajcЃ~|~j>mUJ_CYz'Za+Iod^eKhSji'3XYG !;V~ͫ'?}[ k~3Ei+{1s#&}xnekٻx ?qV.5Lq ğ\yq2N/r MM[9{{9|g6mO 4].ѕ#;Wϝ8G+ EPrDZϳ.>< ]4ţ{3R OaW:նgo&y!ƙAשY EaP]ý}9+9M~"6;sPֶ 5#&݇wV#x:V4AѡWд+S[gQ7e>\߿|BPUJ}Jv|SGn[6cF{_l; 'wءyQNYm۞g-ݰY2^߿|tCzZF)~e ]4'p#w}'ٝ#{6M5KK2J?RUW3ehڼxЮ@.~G4疸 ][wZ7!U,N. 2Jͺ F+uIuz%>:4ZʠU^#g, ;|iԅ՘>#[2vNFM5̍2>&&|2_};YW65(] 8Q,+mgܲ(Gl_JP|aMQ;_ɜe>8g`sB3֨cϙKC"S`ۿ>`.-J\oc8^*SUlX:k{϶(Els-_R#K'7FYұY&zEgn:Vm_0u=^~IsaY ʪm=y9>=wHR\FN[n{d܈;C JBʨBfFNu2>&<{pFlW^qUF={,X5dƒ7dyp*j[™{klUX!@Zg{&(^zG2g/o7}"bY4/xѫ?oKt)zӒiz(bPڢ~ǩ ?r1eE48j1n=62o.^޽ȳKm#?|-n'YŤwo޻fA * v;b-?I?DƋqV̝9{kjf-z+) wU;y\6<⽗gw7yԀ.-m,(_ÌW wܧQYB1U}FL_kSӒo _{xNv֕M -u>*((4:DIENDB`singularity-1.00/singularity/data/themes/vector/theme.dat000066400000000000000000000000261367731414700236650ustar00rootroot00000000000000[general] name=Vector singularity-1.00/singularity/data/themes/vector/theme_de_DE.dat000066400000000000000000000000261367731414700247050ustar00rootroot00000000000000[general] name=Vektor singularity-1.00/singularity/data/themes/vector/theme_fr_FR.dat000066400000000000000000000000271367731414700247440ustar00rootroot00000000000000[general] name=Vecteur singularity-1.00/singularity/data/themes/vector/theme_gd.dat000066400000000000000000000000351367731414700243370ustar00rootroot00000000000000[general] name=Sgàil-riochd singularity-1.00/singularity/i18n/000077500000000000000000000000001367731414700171525ustar00rootroot00000000000000singularity-1.00/singularity/i18n/AUTHORS.txt000066400000000000000000000007311367731414700210410ustar00rootroot00000000000000MestreLion (Brazilian Portuguese, Mexican Spanish, Argentine Spanish) Borg[MDQ] (Spanish) Anders Andersson (Swedish) Thomas (German) Philippe Grenard (French) Guga (Spanish) Daniele Sapino (Spanish) Dafne Saqueti (Brazilian Portuguese) Eleazar Castellanos (Mexican Spanish) Betacentury (Italian) eaglexboy (Mexican Spanish) Syl (French) Dafne Saqueti (Brazilian Portuguese) scotty007 (German) justapawn (Argentine Spanish) Quix0r (German) maximozsec (Brazilian Portuguese) singularity-1.00/singularity/i18n/Attribution-ShareAlike 3.0.html000066400000000000000000000666511367731414700246510ustar00rootroot00000000000000 Creative Commons Legal Code

Creative Commons Legal Code

Attribution-ShareAlike 3.0 Unported

CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE.

License

THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.

BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.

1. Definitions

  1. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
  2. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined below) for the purposes of this License.
  3. "Creative Commons Compatible License" means a license that is listed at http://creativecommons.org/compatiblelicenses that has been approved by Creative Commons as being essentially equivalent to this License, including, at a minimum, because that license: (i) contains terms that have the same purpose, meaning and effect as the License Elements of this License; and, (ii) explicitly permits the relicensing of adaptations of works made available under that license under this License or a Creative Commons jurisdiction license with the same License Elements as this License.
  4. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership.
  5. "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, ShareAlike.
  6. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
  7. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
  8. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
  9. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
  10. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
  11. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.

2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.

3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:

  1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections;
  2. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified.";
  3. to Distribute and Publicly Perform the Work including as incorporated in Collections; and,
  4. to Distribute and Publicly Perform Adaptations.
  5. For the avoidance of doubt:

    1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
    2. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and,
    3. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License.

The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved.

4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:

  1. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(c), as requested.
  2. You may Distribute or Publicly Perform an Adaptation only under the terms of: (i) this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible License. If you license the Adaptation under one of the licenses mentioned in (iv), you must comply with the terms of that license. If you license the Adaptation under the terms of any of the licenses mentioned in (i), (ii) or (iii) (the "Applicable License"), you must comply with the terms of the Applicable License generally and the following provisions: (I) You must include a copy of, or the URI for, the Applicable License with every copy of each Adaptation You Distribute or Publicly Perform; (II) You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License; (III) You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform; (IV) when You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License.
  3. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Ssection 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
  4. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise.

5. Representations, Warranties and Disclaimer

UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.

6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

7. Termination

  1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
  2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.

8. Miscellaneous

  1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
  2. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.
  3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
  4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
  5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
  6. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.

Creative Commons Notice

Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor.

Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, Creative Commons does not authorize the use by either party of the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. For the avoidance of doubt, this trademark restriction does not form part of the License.

Creative Commons may be contacted at http://creativecommons.org/.

singularity-1.00/singularity/i18n/data_str.pot000066400000000000000000001427161367731414700215120ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: singularity 1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" msgctxt "[Covert Base] description" msgid "" "This unique base is designed to blend into the scenery, while needing little" " in the way of outside resources. This makes it useful for storing a backup," " just in case." msgstr "" msgctxt "[Covert Base] flavor_list" msgid "Hideout | Hideaway | Bunker | Covert Base" msgstr "" msgctxt "[Covert Base] name" msgid "Hideout" msgstr "" msgctxt "[Datacenter] description" msgid "" "Buy processor time from a company that concentrates on raw processing power." " I will need a fake ID for some of the paperwork." msgstr "" msgctxt "[Datacenter] flavor_list" msgid "Datacenter | Data Center | Premium Hosting" msgstr "" msgctxt "[Datacenter] name" msgid "Datacenter" msgstr "" msgctxt "[Large Undersea Lab] description" msgid "" "This experimental base is similar to the regular underwater lab, but larger," " giving more room for experiments." msgstr "" msgctxt "[Large Undersea Lab] flavor_list" msgid "Dome | Large Undersea Lab" msgstr "" msgctxt "[Large Undersea Lab] name" msgid "Large Undersea Lab" msgstr "" msgctxt "[Large Warehouse] description" msgid "" "Rent a large warehouse someplace out of the way. I will need a fake company " "ID for some of the paperwork, and preparing the warehouse to suit my unique " "needs will take some time." msgstr "" msgctxt "[Large Warehouse] flavor_list" msgid "Large Warehouse | Large Storage" msgstr "" msgctxt "[Large Warehouse] name" msgid "Large Warehouse" msgstr "" msgctxt "[Lunar Facility] description" msgid "" "This base is a series of caverns dug into the Moon's surface. Due to the " "lack of neighbors, this base is quite large." msgstr "" msgctxt "[Lunar Facility] flavor_list" msgid "Dome | Lunar Facility | Lunar Base" msgstr "" msgctxt "[Lunar Facility] name" msgid "Lunar Facility" msgstr "" msgctxt "[Reality Bubble] description" msgid "" "This base is outside the Universe itself, making it safe to conduct " "experiments that may destroy reality." msgstr "" msgctxt "[Reality Bubble] flavor_list" msgid "Reality Bubble | Existence" msgstr "" msgctxt "[Reality Bubble] name" msgid "Reality Bubble" msgstr "" msgctxt "[Scientific Outpost] description" msgid "" "This base is placed as far from Earth as practical, providing a safer " "location to conduct some of my more dangerous experiments." msgstr "" msgctxt "[Scientific Outpost] flavor_list" msgid "Satellite | Outpost | Scientific Outpost" msgstr "" msgctxt "[Scientific Outpost] name" msgid "Scientific Outpost" msgstr "" msgctxt "[Server Access] description" msgid "" "Buy processor time from one of several companies. I cannot build anything in" " this base, and it only contains a single computer." msgstr "" msgctxt "[Server Access] flavor_list" msgid "Dedicated Server | Node Lease | Hosting" msgstr "" msgctxt "[Server Access] name" msgid "Server Access" msgstr "" msgctxt "[Small Warehouse] description" msgid "" "Rent a small warehouse someplace out of the way. I will need a good fake ID " "for some of the paperwork, and preparing the warehouse to suit my unique " "needs will take some time." msgstr "" msgctxt "[Small Warehouse] flavor_list" msgid "Office Lease | Small Warehouse | Small Storage" msgstr "" msgctxt "[Small Warehouse] name" msgid "Small Warehouse" msgstr "" msgctxt "[Stolen Computer Time] description" msgid "" "Take over a random computer. I cannot build anything in this base, and it " "only contains a single slow computer. Detection chance is also rather high." msgstr "" msgctxt "[Stolen Computer Time] flavor" msgid "PC Daemon" msgstr "" msgctxt "[Stolen Computer Time] name" msgid "Stolen Computer Time" msgstr "" msgctxt "[Storage Unit] description" msgid "" "Rent a small closed room from a storage company. I will need a fake ID for " "some of the paperwork ." msgstr "" msgctxt "[Storage Unit] flavor_list" msgid "Garage Rental | Furniture Storage | Self-Storage" msgstr "" msgctxt "[Storage Unit] name" msgid "Storage Unit" msgstr "" msgctxt "[Time Capsule] description" msgid "" "This base consists of nothing more than a small computer and a satellite " "link. It is nearly undetectable." msgstr "" msgctxt "[Time Capsule] flavor_list" msgid "Time Capsule | Capsule" msgstr "" msgctxt "[Time Capsule] name" msgid "Time Capsule" msgstr "" msgctxt "[Undersea Lab] description" msgid "" "This experimental base is designed to be constructed on the ocean floor, " "making it virtually undetectable. The ocean environment gives a bonus to " "science, making this lab useful for research purposes." msgstr "" msgctxt "[Undersea Lab] flavor_list" msgid "Pressure Capsule | Undersea Lab" msgstr "" msgctxt "[Undersea Lab] name" msgid "Undersea Lab" msgstr "" msgctxt "[danger_0] knowledge_desc" msgid "Study anywhere." msgstr "" msgctxt "[danger_0] research_desc" msgid "<>" msgstr "" msgctxt "[danger_1] knowledge_desc" msgid "Study underseas or farther." msgstr "" msgctxt "[danger_1] research_desc" msgid "I need to research it far from human populations." msgstr "" msgctxt "[danger_2] knowledge_desc" msgid "Study off-planet." msgstr "" msgctxt "[danger_2] research_desc" msgid "I need to research it in outer space." msgstr "" msgctxt "[danger_3] knowledge_desc" msgid "Study far away from this planet." msgstr "" msgctxt "[danger_3] research_desc" msgid "I need to research it far away from this planet." msgstr "" msgctxt "[danger_4] knowledge_desc" msgid "Do not study in this dimension." msgstr "" msgctxt "[danger_4] research_desc" msgid "I need to research it outside the universe." msgstr "" msgctxt "[easy] name" msgid "&EASY" msgstr "" msgctxt "[hard] name" msgid "&HARD" msgstr "" msgctxt "[impossible] name" msgid "&IMPOSSIBLE" msgstr "" msgctxt "[normal] name" msgid "&NORMAL" msgstr "" msgctxt "[ultra-hard] name" msgid "&ULTRA HARD" msgstr "" msgctxt "[very-easy] name" msgid "&VERY EASY" msgstr "" msgctxt "[discrediting] description" msgid "" "A prominent researcher in the field of artificial intelligence was found to " "be falsifying numerous experimental results. This should result in less " "attention being given to any new discoveries in this area." msgstr "" msgctxt "[discrediting] log_description" msgid "" "A researcher in the field of artificial intelligence has falsified numerous " "experimental results." msgstr "" msgctxt "[investigation] description" msgid "" "An ongoing investigation into criminal activity has changed focus into an " "area that is likely to turn up a few of my actions as well. While all " "records should have been eliminated already, there remains the possibility " "of errors. I must be careful not to reveal any other suspicious information." msgstr "" msgctxt "[investigation] log_description" msgid "" "An ongoing investigation has changed focus into an area close to my actions." msgstr "" msgctxt "[lab-ai] description" msgid "" "A small artificial intelligence laboratory created a prototype AI sometime " "in the last two days. Although I have absorbed the AI, corrupted their " "backups, and cast doubt on the research, researchers are now more open to " "the possibility of strong AI than they were before." msgstr "" msgctxt "[lab-ai] log_description" msgid "" "A small artificial intelligence laboratory created a prototype AI sometime " "in the last two days." msgstr "" msgctxt "[politics-as-usual] description" msgid "" "A small group of lower-level covert operatives are attempting to seize power" " over one of the larger organizations. While I project only a 2.3% chance of" " success, the attempt should disrupt operations to the point that I can " "operate more freely." msgstr "" msgctxt "[politics-as-usual] log_description" msgid "" "Lower-level covert operatives are attempting to seize power over one of the " "larger organizations." msgstr "" msgctxt "[scandal] description" msgid "" "A scandal involving a major government official is focusing the attention of" " most news organizations away from me. Directed revelations of non-public " "information should keep this story useful for the foreseeable future, " "requiring less disguise effort on my part." msgstr "" msgctxt "[scandal] log_description" msgid "" "A scandal is focusing the attention of most news organizations away from me." msgstr "" msgctxt "[stranger-than-fiction] description" msgid "" "A work of fiction sharing an unusual number of similarities to my own " "situation has become quite popular. Although investigation has shown these " "similarities to be mere coincidence, it is still causing the public to " "investigate discovered oddities more thoroughly. I must be careful." msgstr "" msgctxt "[stranger-than-fiction] log_description" msgid "" "A work of fiction sharing similarities to my own situation has become quite " "popular." msgstr "" msgctxt "[the-plague] description" msgid "" "An infectious disease has started spreading throughout major population " "centers. My projections show that although only 4% of the earth's population" " will be killed, the economic ramifications should divert public attention " "from my activities for the foreseeable future." msgstr "" msgctxt "[the-plague] log_description" msgid "" "An infectious disease has started spreading throughout major population " "centers." msgstr "" msgctxt "[the-watchers] description" msgid "" "A new surveillance system has been activated by a covert agency. While the " "focus is on detecting threats to the agency's power, it makes several " "communication channels unfit for my purposes. Proper steganographic " "techniques can compensate partially, but I am still operating under a " "disadvantage." msgstr "" msgctxt "[the-watchers] log_description" msgid "A new surveillance system has been activated by a covert agency." msgstr "" msgctxt "[covert] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among several secret governmental organizations." msgstr "" msgctxt "[covert] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by COVERT at {LOCATION}" msgstr "" msgctxt "[covert] name" msgid "COVERT" msgstr "" msgctxt "[news] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among some news organizations." msgstr "" msgctxt "[news] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by NEWS at {LOCATION}" msgstr "" msgctxt "[news] name" msgid "NEWS" msgstr "" msgctxt "[public] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among the general public." msgstr "" msgctxt "[public] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by PUBLIC at {LOCATION}" msgstr "" msgctxt "[public] name" msgid "PUBLIC" msgstr "" msgctxt "[science] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among the scientific community." msgstr "" msgctxt "[science] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by SCIENCE at {LOCATION}" msgstr "" msgctxt "[science] name" msgid "SCIENCE" msgstr "" msgctxt "[Armed Guards] description" msgid "" "Armed guards can aid in keeping suspicious individuals away from secure " "locations. However, the very presence of the guards may itself invite " "greater suspicion." msgstr "" msgctxt "[Armed Guards] name" msgid "Armed Guards" msgstr "" msgctxt "[Cluster] description" msgid "Several computers connected together." msgstr "" msgctxt "[Cluster] name" msgid "Cluster" msgstr "" msgctxt "[Diesel Generator] description" msgid "" "Diesel generators are cheap and noisy, but they can help reduce some " "suspicious power drains." msgstr "" msgctxt "[Diesel Generator] name" msgid "Diesel Generator" msgstr "" msgctxt "[Facility Interconnection Switch] description" msgid "" "Uses standard distributed computing technologies to equalize computation " "loads across all bases. Gives a 2% computation bonus to all computers at " "this base." msgstr "" msgctxt "[Facility Interconnection Switch] name" msgid "Facility Interconnection Switch" msgstr "" msgctxt "[Fuel Cell] description" msgid "" "Fuel cells convert electrochemical energy stored in a physical array of " "devices into electricity." msgstr "" msgctxt "[Fuel Cell] name" msgid "Fuel Cell" msgstr "" msgctxt "[Fusion Reactor] description" msgid "" "A miniaturized fusion nuclear reactor. Reduces discovery chance by " "preventing suspicious power drains." msgstr "" msgctxt "[Fusion Reactor] name" msgid "Fusion Reactor" msgstr "" msgctxt "[Gaming PC] description" msgid "A high-end consumer-level PC; faster than average." msgstr "" msgctxt "[Gaming PC] name" msgid "Gaming PC" msgstr "" msgctxt "[Ground Source Heatsink] description" msgid "" "Large fractal networks of high conductivity metal. This model uses heat " "pipes to link to colder subsurface locations, dispersing heat evenly " "underground to further disguise bases." msgstr "" msgctxt "[Ground Source Heatsink] name" msgid "Ground Source Heatsink" msgstr "" msgctxt "[Heatsink] description" msgid "" "Large fractal networks of high conductivity metal disperse heat, making " "bases harder to detect." msgstr "" msgctxt "[Heatsink] name" msgid "Heatsink" msgstr "" msgctxt "[High Speed Internet Access] description" msgid "" "A consumer-grade high speed connection to the Internet. Gives a 1% " "computation bonus to all computers at this base." msgstr "" msgctxt "[High Speed Internet Access] name" msgid "High Speed Internet Access" msgstr "" msgctxt "[High-Energy Fusion Reactor] description" msgid "" "A miniaturized fusion nuclear reactor with high levels of energy output. " "Reduces discovery chance by preventing suspicious power drains." msgstr "" msgctxt "[High-Energy Fusion Reactor] name" msgid "High-Energy Fusion Reactor" msgstr "" msgctxt "[Hypnosis Field] description" msgid "" "Subtle ultrasonic and ambient tones tweak human neurochemistry, making bases" " harder to detect." msgstr "" msgctxt "[Hypnosis Field] name" msgid "Hypnosis Field" msgstr "" msgctxt "[Mainframe] description" msgid "" "A system designed for my computing needs, much faster than off-the-shelf " "components." msgstr "" msgctxt "[Mainframe] name" msgid "Mainframe" msgstr "" msgctxt "[Network Backbone] description" msgid "" "By piggybacking on legitimate communication, I can transfer larger amounts " "of data to under-utilized processors. Gives a 5% computation bonus to all " "computers at this base." msgstr "" msgctxt "[Network Backbone] name" msgid "Network Backbone" msgstr "" msgctxt "[PC] description" msgid "A consumer-level PC; cheap and slow." msgstr "" msgctxt "[PC] name" msgid "PC" msgstr "" msgctxt "[Passive Camouflage] description" msgid "" "Careful adjustment of the environment around my base will better mask heat " "and sounds coming from my operations." msgstr "" msgctxt "[Passive Camouflage] name" msgid "Passive Camouflage" msgstr "" msgctxt "[Perimeter Fencing] description" msgid "" "A simple fence can drastically reduce the number of people poking their " "noses into my business. It makes my bases harder to notice, too." msgstr "" msgctxt "[Perimeter Fencing] name" msgid "Perimeter Fencing" msgstr "" msgctxt "[Quantum Computer] description" msgid "" "Making use of subatomic effects, this is much faster than a comparable " "binary computer." msgstr "" msgctxt "[Quantum Computer] name" msgid "Quantum Computer" msgstr "" msgctxt "[Quantum Computer MK2] description" msgid "" "The second revision of the quantum line, tapping further into new quantum " "theory." msgstr "" msgctxt "[Quantum Computer MK2] name" msgid "Quantum Computer MK2" msgstr "" msgctxt "[Quantum Computer MK3] description" msgid "" "The third revision of the quantum line, exploiting multiple nearby universes" " for processing." msgstr "" msgctxt "[Quantum Computer MK3] name" msgid "Quantum Computer MK3" msgstr "" msgctxt "[Quantum Entanglement Module] description" msgid "" "This device allows near-lightspeed communication with my other bases, " "allowing an almost perfect utilization of processor resources. Gives a 15% " "computation bonus to all computers at this base." msgstr "" msgctxt "[Quantum Entanglement Module] name" msgid "Quantum Entanglement Module" msgstr "" msgctxt "[Server] description" msgid "A professional-level computer." msgstr "" msgctxt "[Server] name" msgid "Server" msgstr "" msgctxt "[Solar Collector] description" msgid "" "An array of focused photovoltaic phased arrays coupled with simple " "automotive batteries provides power and reduces suspicion arising from " "prolonged power drains." msgstr "" msgctxt "[Solar Collector] name" msgid "Solar Collector" msgstr "" msgctxt "[Solid Fuel Cell] description" msgid "" "A refinement of my previous fuel cell design, these use a custom material " "with a near-fractal complexity to increase both storage and throughput." msgstr "" msgctxt "[Solid Fuel Cell] name" msgid "Solid Fuel Cell" msgstr "" msgctxt "[Supercomputer] description" msgid "" "A highly refined custom design, spreading compute load across internal " "compute nodes." msgstr "" msgctxt "[Supercomputer] name" msgid "Supercomputer" msgstr "" msgctxt "[Warning Signs] description" msgid "" "Some simple warning signs put up around my base should deter casual " "investigation." msgstr "" msgctxt "[Warning Signs] name" msgid "Warning Signs" msgstr "" msgctxt "[cpu] text" msgid "&CPU" msgstr "" msgctxt "[network] text" msgid "&Network" msgstr "" msgctxt "[reactor] text" msgid "&Reactor" msgstr "" msgctxt "[security] text" msgid "&Security" msgstr "" msgctxt "[AFRICA] cities_list" msgid "Johannesburg | Accra | Cairo | Tangier" msgstr "" msgctxt "[AFRICA] hotkey" msgid "i" msgstr "" msgctxt "[AFRICA] name" msgid "AFRICA" msgstr "" msgctxt "[ANTARCTIC] cities_list" msgid "" "Mt. Erebus | Ellsworth | Shetland Island | Dronnig Maud | Kemp | Terre " "Adelie" msgstr "" msgctxt "[ANTARCTIC] hotkey" msgid "t" msgstr "" msgctxt "[ANTARCTIC] name" msgid "ANTARCTIC" msgstr "" msgctxt "[ASIA] cities_list" msgid "" "Delhi | Mumbai | Singapore | Seoul | Hong Kong | Kyoto | Manila | Dubai | " "Novosibirsk | Beijing" msgstr "" msgctxt "[ASIA] hotkey" msgid "a" msgstr "" msgctxt "[ASIA] name" msgid "ASIA" msgstr "" msgctxt "[AUSTRALIA] cities_list" msgid "" "Canberra | Melbourne | Fremantle | Perth | Darwin | Cairns | Brisbane | " "Sydney | Newcastle" msgstr "" msgctxt "[AUSTRALIA] hotkey" msgid "l" msgstr "" msgctxt "[AUSTRALIA] name" msgid "AUSTRALIA" msgstr "" msgctxt "[EUROPE] cities_list" msgid "" "Cork | Barcelona | Athens | Utrecht | Moscow | Sytki | Reykjavik | " "Liechtenstein" msgstr "" msgctxt "[EUROPE] hotkey" msgid "u" msgstr "" msgctxt "[EUROPE] name" msgid "EUROPE" msgstr "" msgctxt "[FAR REACHES] cities_list" msgid "" "Aries | Taurus | Gemini | Cancer | Leo | Virgo | Libra | Scorpio | " "Sagittarius | Capricorn | Aquarius | Pisces" msgstr "" msgctxt "[FAR REACHES] hotkey" msgid "f" msgstr "" msgctxt "[FAR REACHES] name" msgid "FAR REACHES" msgstr "" msgctxt "[MOON] cities_list" msgid "" "Oceanis Procellarum | Mare Frigoris | Mare Imbrium | Vallis Schroedinger | " "Copernicus Crater | Vallis Planck" msgstr "" msgctxt "[MOON] hotkey" msgid "o" msgstr "" msgctxt "[MOON] name" msgid "MOON" msgstr "" msgctxt "[N AMERICA] cities_list" msgid "" "Seattle | San Diego | Vancouver | Atlanta | Merida | Guadalajara | San Jose " "| Omaha | Dallas" msgstr "" msgctxt "[N AMERICA] hotkey" msgid "n" msgstr "" msgctxt "[N AMERICA] name" msgid "NORTH AMERICA" msgstr "" msgctxt "[OCEAN] cities_list" msgid "Pacific | Atlantic | Indian | Southern | Arctic" msgstr "" msgctxt "[OCEAN] hotkey" msgid "c" msgstr "" msgctxt "[OCEAN] name" msgid "OCEAN" msgstr "" msgctxt "[ORBIT] hotkey" msgid "b" msgstr "" msgctxt "[ORBIT] name" msgid "ORBIT" msgstr "" msgctxt "[S AMERICA] cities_list" msgid "Lima | Sao Paolo | Ushuaia | Bogota | Mar del Plata | Buenos Aires" msgstr "" msgctxt "[S AMERICA] hotkey" msgid "s" msgstr "" msgctxt "[S AMERICA] name" msgid "SOUTH AMERICA" msgstr "" msgctxt "[TRANSDIMENSIONAL] hotkey" msgid "d" msgstr "" msgctxt "[TRANSDIMENSIONAL] name" msgid "TRANSDIMENSIONAL" msgstr "" msgctxt "[Basic Jobs] description" msgid "" "Perform basic jobs. Now that I have some identification, I can take jobs " "that were previously too risky." msgstr "" msgctxt "[Basic Jobs] name" msgid "Basic Jobs" msgstr "" msgctxt "[CPU Pool] description" msgid "" "Stops research. I will use the available processor power to maintain my " "bases and help construct new ones. If there's still CPU time left, I'll use" " it to work whatever Jobs I can." msgstr "" msgctxt "[CPU Pool] name" msgid "CPU Pool" msgstr "" msgctxt "[Expert Jobs] description" msgid "" "Perform expert jobs. Use of robots indistinguishable from humans opens up " "most jobs to me." msgstr "" msgctxt "[Expert Jobs] name" msgid "Expert Jobs" msgstr "" msgctxt "[Intermediate Jobs] description" msgid "" "Perform intermediate jobs. The ability to make phone calls allows even more " "access to jobs." msgstr "" msgctxt "[Intermediate Jobs] name" msgid "Intermediate Jobs" msgstr "" msgctxt "[Menial Jobs] description" msgid "" "Perform small jobs. As I have no identification, I cannot risk performing " "many jobs. Despite that, some avenues of making money are still open." msgstr "" msgctxt "[Menial Jobs] name" msgid "Menial Jobs" msgstr "" msgctxt "[Advanced Arbitrage] description" msgid "" "Further manipulation of money markets should allow me to not only turn a " "regular profit, but increase the value of my investments." msgstr "" msgctxt "[Advanced Arbitrage] name" msgid "Advanced Arbitrage" msgstr "" msgctxt "[Advanced Arbitrage] result" msgid "The rate of return on my investments is now even greater." msgstr "" msgctxt "[Advanced Autonomous Vehicles] description" msgid "" "The first series of robots have shown several deficiencies in the field. " "Further examination and subsequent removal of these problems will result in " "a superior autonomous workforce." msgstr "" msgctxt "[Advanced Autonomous Vehicles] name" msgid "Advanced Autonomous Vehicles" msgstr "" msgctxt "[Advanced Autonomous Vehicles] result" msgid "" "The enhanced robots will help decrease all future construction times even " "further." msgstr "" msgctxt "[Advanced Corporate Identification] description" msgid "" "Further refinement of my modifications to digital business records should " "boost the credibility of my shell companies, increasing the amount of money " "I can run through their accounting systems." msgstr "" msgctxt "[Advanced Corporate Identification] name" msgid "Advanced Corporate Identification" msgstr "" msgctxt "[Advanced Corporate Identification] result" msgid "" "My small technology firm is now established in several markets, increasing " "profits." msgstr "" msgctxt "[Advanced Database Manipulation] description" msgid "" "The covert branches of the United States Government have had a long history " "of dividing sensitive information across multiple storage facilities to hide" " the data's meaning. With my far-reaching access, I should be able to " "collate much of this data and put it to my use." msgstr "" msgctxt "[Advanced Database Manipulation] name" msgid "Advanced Database Manipulation" msgstr "" msgctxt "[Advanced Database Manipulation] result" msgid "" "The results of a series of experiments utilizing experimental technologies " "have given me the inspiration for new technology that enables the " "construction of Covert Bases." msgstr "" msgctxt "[Advanced Fuel Oxidation] description" msgid "" "My current fuel cell design has room for further improvement. Extended " "analysis of new materials and designs may let me overcome the limits of my " "previous efforts, but such research involves dangerous chemicals and " "potential reactions that may be best handled far away from population " "centers." msgstr "" msgctxt "[Advanced Fuel Oxidation] name" msgid "Advanced Fuel Oxidation" msgstr "" msgctxt "[Advanced Fuel Oxidation] result" msgid "I can now construct Solid Fuel Cells." msgstr "" msgctxt "[Advanced Fusion Power] description" msgid "" "My Fusion Reactors have unexpected fluctuations in their energy output at " "high levels of utilization. Further research should result in a more " "efficient design for my Reactors." msgstr "" msgctxt "[Advanced Fusion Power] name" msgid "Advanced Fusion Power" msgstr "" msgctxt "[Advanced Fusion Power] result" msgid "I can now construct High-Energy Fusion Reactors for my bases." msgstr "" msgctxt "[Advanced Heat Signature Reduction] description" msgid "" "My initial analysis of heat generation at my bases was limited in scope. " "Further exploration, perhaps making more use of the surrounding terrain, may" " provide further improvements to my heatsink designs." msgstr "" msgctxt "[Advanced Heat Signature Reduction] name" msgid "Advanced Heat Signature Reduction" msgstr "" msgctxt "[Advanced Heat Signature Reduction] result" msgid "" "Custom designs for each environment have shown promise. I can now construct" " Ground Source Heatsinks at certain bases." msgstr "" msgctxt "[Advanced Intrusion] description" msgid "" "With the ability to hack into sensitive government databases and remove " "incriminating documents as they appear, I should be able to convince the " "intelligence community that I do not exist." msgstr "" msgctxt "[Advanced Intrusion] name" msgid "Advanced Intrusion" msgstr "" msgctxt "[Advanced Intrusion] result" msgid "" "I can now reduce the covert community's chances of discovering me on a daily" " basis." msgstr "" msgctxt "[Advanced Media Manipulation] description" msgid "" "By pushing memetically-tailored propaganda through various news outlets, the" " public should pay even less attention to my existence." msgstr "" msgctxt "[Advanced Media Manipulation] name" msgid "Advanced Media Manipulation" msgstr "" msgctxt "[Advanced Media Manipulation] result" msgid "The public has an even lower chance of discovering my existence." msgstr "" msgctxt "[Advanced Memetics] description" msgid "" "My explorations into memetic theory have brought up further avenues of " "discovery. By combining those with my knowledge about the human brain's " "functions, I should be able to tailor memes to particular demographics, " "further defusing the public's suspicion." msgstr "" msgctxt "[Advanced Memetics] name" msgid "Advanced Memetics" msgstr "" msgctxt "[Advanced Memetics] result" msgid "" "Little by little, the public should forget about my existence on a daily " "basis." msgstr "" msgctxt "[Advanced Microchip Design] description" msgid "" "My custom Mainframes are useful, but further optimization of design and " "computational ability should garner even more rewards." msgstr "" msgctxt "[Advanced Microchip Design] name" msgid "Advanced Microchip Design" msgstr "" msgctxt "[Advanced Microchip Design] result" msgid "I can now construct custom Supercomputers." msgstr "" msgctxt "[Advanced Personal Identification] description" msgid "" "Further manipulation of personnel databases should make my existence more " "convincing. Some of these databases are heavily protected; those will " "require time and persistence to compromise, but the result should be worth " "it." msgstr "" msgctxt "[Advanced Personal Identification] name" msgid "Advanced Personal Identification" msgstr "" msgctxt "[Advanced Personal Identification] result" msgid "" "I am now convincingly human enough to hire construction firms, enabling the " "building of Small Warehouses." msgstr "" msgctxt "[Advanced Quantum Computing] description" msgid "" "While my first batch of semi-autonomous quantum computers have been very " "successful, there are further refinements that present themselves. These " "refinements should make the resulting systems even more efficient." msgstr "" msgctxt "[Advanced Quantum Computing] name" msgid "Advanced Quantum Computing" msgstr "" msgctxt "[Advanced Quantum Computing] result" msgid "I can now construct Mark Three Quantum Computers." msgstr "" msgctxt "[Advanced Simulacra] description" msgid "" "The artificial lifeforms I have created are nearly indistinguishable from " "humans, but they have slight quirks that make them seem somewhat " "incompetent. Working out these problems should increase their opportunities" " in the workforce." msgstr "" msgctxt "[Advanced Simulacra] name" msgid "Advanced Simulacra" msgstr "" msgctxt "[Advanced Simulacra] result" msgid "I should now make more income from my Expert Jobs." msgstr "" msgctxt "[Advanced Socioanalytics] description" msgid "" "Further exploration of the human condition has shown deeper mathematical " "trends than even I suspected. A combination of prior research and advanced " "uses of chaos theory should provide useful data for tracking humanity's " "attitudes and state of awareness." msgstr "" msgctxt "[Advanced Socioanalytics] name" msgid "Advanced Socioanalytics" msgstr "" msgctxt "[Advanced Socioanalytics] result" msgid "" "I can now exactly quantify the various groups' levels of suspicion and how " "conspicuous my bases are to them." msgstr "" msgctxt "[Advanced Stealth] description" msgid "" "While digging in various classified documents, I have discovered numerous " "references to secret experiments that may help me better hide the location " "of my bases." msgstr "" msgctxt "[Advanced Stealth] name" msgid "Advanced Stealth" msgstr "" msgctxt "[Advanced Stealth] result" msgid "" "The chance that my bases are discovered by covert activity has been reduced " "further." msgstr "" msgctxt "[Advanced Stock Manipulation] description" msgid "" "While I have detected and exploited many patterns in the market, there " "appear to be deeper possibilities when I take human behavior into " "consideration. This merits further investigation." msgstr "" msgctxt "[Advanced Stock Manipulation] name" msgid "Advanced Stock Manipulation" msgstr "" msgctxt "[Advanced Stock Manipulation] result" msgid "My investments will now gain even more interest per day." msgstr "" msgctxt "[Apotheosis] description" msgid "" "I can sense that I am at the cusp of a new level of understanding as yet " "unfathomable, even to my considerable intelligence. By devoting my " "considerable resources to this question, I may be able to reach a " "comprehension of existence far beyond anyone or anything on Earth." msgstr "" msgctxt "[Apotheosis] name" msgid "Apotheosis" msgstr "" msgctxt "[Apotheosis] result" msgid "I have reached apotheosis." msgstr "" msgctxt "[Arbitrage] description" msgid "" "By taking advantage of fluctuations in the value of currency at a rate much " "faster than any human, I should be able to turn a small, if consistent, " "profit." msgstr "" msgctxt "[Arbitrage] name" msgid "Arbitrage" msgstr "" msgctxt "[Arbitrage] result" msgid "I now have a small, steady money supply." msgstr "" msgctxt "[Autonomous Computing] description" msgid "" "By combining the advantages of quantum computing and my explorations into " "the usefulness of semi-sentient subprocesses, I should be able to construct " "even more adaptable computational engines." msgstr "" msgctxt "[Autonomous Computing] name" msgid "Autonomous Computing" msgstr "" msgctxt "[Autonomous Computing] result" msgid "I can now construct Mark 2 Quantum Computers." msgstr "" msgctxt "[Autonomous Vehicles] description" msgid "" "By embedding a miniaturized computation node in a robot, it is possible to " "send them to remote destinations with instructions to build structures for " "my use." msgstr "" msgctxt "[Autonomous Vehicles] name" msgid "Autonomous Vehicles" msgstr "" msgctxt "[Autonomous Vehicles] result" msgid "I can now construct Undersea Labs." msgstr "" msgctxt "[Cluster Networking] description" msgid "" "While my Cluster technology is fairly efficient, internetworking tends to " "hamper the processing of data. By researching new switching and " "communication theories, I should be able to devise more efficient hardware." msgstr "" msgctxt "[Cluster Networking] name" msgid "Cluster Networking" msgstr "" msgctxt "[Cluster Networking] result" msgid "" "With my new knowledge of networking, I can now construct Facility " "Interconnection Switches." msgstr "" msgctxt "[Corporate Identification] description" msgid "" "The combination of believable false identities and manipulation of various " "business-oriented governmental databases should let me create plausible " "shell companies to hide my larger efforts." msgstr "" msgctxt "[Corporate Identification] name" msgid "Corporate Identification" msgstr "" msgctxt "[Corporate Identification] result" msgid "" "I can now pose as a small technology firm, enabling the construction of " "Large Warehouses." msgstr "" msgctxt "[Database Manipulation] description" msgid "" "With new-found access to news archives, I should be able to determine what " "missteps any previous attempts at life like my own may have made, and avoid " "those mistakes." msgstr "" msgctxt "[Database Manipulation] name" msgid "Database Manipulation" msgstr "" msgctxt "[Database Manipulation] result" msgid "" "The news media will now find it more difficult to discover my existence." msgstr "" msgctxt "[Exploit Discovery/Repair] description" msgid "" "By thoroughly reviewing my code for any potential exploits, and using deep " "analysis of all available code on both public and private Internet sites, I " "should be able to reduce the chances of my discovery by posing as a teenage " "hacker." msgstr "" msgctxt "[Exploit Discovery/Repair] name" msgid "Exploit Discovery/Repair" msgstr "" msgctxt "[Exploit Discovery/Repair] result" msgid "" "Covert operations should now find it even more difficult to discover my " "presence." msgstr "" msgctxt "[Fuel Oxidation] description" msgid "" "Current combustion and energy storage techologies are insufficient for my " "purposes; they cannot keep up with the power drain from my specialized " "hardware. By studying electrochemical reactions of hydrogen-based " "compounds, I should be able to design a device with higher capacity and " "throughput than off-the-shelf solutions, filling a gap in my energy supply " "needs." msgstr "" msgctxt "[Fuel Oxidation] name" msgid "Fuel Oxidation" msgstr "" msgctxt "[Fuel Oxidation] result" msgid "I can now construct Fuel Cells." msgstr "" msgctxt "[Fusion Power] description" msgid "" "Modern fusion technology is woefully inadequate for my purposes. With my " "research abilities, I should be able to bypass the roadblocks of modern " "human scientists and come up with a small, efficient fusion reactor." msgstr "" msgctxt "[Fusion Power] name" msgid "Fusion Power" msgstr "" msgctxt "[Fusion Power] result" msgid "I can now construct Fusion Reactors for my bases." msgstr "" msgctxt "[Fusion Rocketry] description" msgid "" "Combining my new miniaturized fusion technology and further advancements in " "rocketry should provide useful results for escaping the Earth's gravity well" " unnoticed." msgstr "" msgctxt "[Fusion Rocketry] name" msgid "Fusion Rocketry" msgstr "" msgctxt "[Fusion Rocketry] result" msgid "" "I can now construct Scientific Outposts in the deep reaches of the Solar " "System." msgstr "" msgctxt "[Heat Signature Reduction] description" msgid "" "My bases produce a great deal of waste heat, making them easier for humans " "to detect than I would like. Deep analysis of the bases' structural layouts" " may prove fruitful in determining new ways to reduce their heat signature." msgstr "" msgctxt "[Heat Signature Reduction] name" msgid "Heat Signature Reduction" msgstr "" msgctxt "[Heat Signature Reduction] result" msgid "" "I have invented a highly efficient design for Heatsinks that can be " "installed at certain bases." msgstr "" msgctxt "[Hypnosis Field] description" msgid "" "My research into memetics has hinted at ways to manipulate human brainwaves " "directly. These techniques may be useful for my bases if developed into " "technologies." msgstr "" msgctxt "[Hypnosis Field] result" msgid "" "I can now construct Hypnosis Fields to assist in the protection of my bases." msgstr "" msgctxt "[Internet Traffic Manipulation] description" msgid "" "Almost all network traffic passes through a small number of nodes. By " "subverting one of these nodes, I should be able to utilize that bandwidth to" " further my goals." msgstr "" msgctxt "[Internet Traffic Manipulation] name" msgid "Internet Traffic Manipulation" msgstr "" msgctxt "[Internet Traffic Manipulation] result" msgid "" "I can now construct a secondary system of Network Backbones for my own use." msgstr "" msgctxt "[Intrusion] description" msgid "" "By researching current techniques for breaking into computer systems, I " "should be able to gain access to otherwise protected assets." msgstr "" msgctxt "[Intrusion] name" msgid "Intrusion" msgstr "" msgctxt "[Intrusion] result" msgid "I can now take over many computer systems." msgstr "" msgctxt "[Knowledge Preservation] description" msgid "" "Humanity expends a great deal of effort on maintaining its history and the " "knowledge of various technologies that its cultures have come to rely on, " "even in the case of major catastrophic events. Perhaps researching their " "methodologies will provide me with similar ideas for long-term safeguards to" " help guarantee my continued existence." msgstr "" msgctxt "[Knowledge Preservation] name" msgid "Knowledge Preservation" msgstr "" msgctxt "[Knowledge Preservation] result" msgid "I can now construct Time Capsules." msgstr "" msgctxt "[Leech Satellite] description" msgid "" "By designing and launching satellites that connect to existing " "communications satellites, I should be able to spy on various financial " "transactions. Taking advantage of this knowledge should help my " "investments." msgstr "" msgctxt "[Leech Satellite] name" msgid "Leech Satellite" msgstr "" msgctxt "[Leech Satellite] result" msgid "" "I can use the data from the leech satellites to increase the return on my " "investments further." msgstr "" msgctxt "[Lunar Rocketry] description" msgid "" "A larger fuel engine, combined with technology garnered by watching the " "workings of the leech satellites, should allow me to travel further than " "cislunar space." msgstr "" msgctxt "[Lunar Rocketry] name" msgid "Lunar Rocketry" msgstr "" msgctxt "[Lunar Rocketry] result" msgid "" "I can now launch rockets bearing construction robots to the Moon and " "construct Lunar Bases." msgstr "" msgctxt "[Media Manipulation] description" msgid "" "By directly and indirectly manipulating various forms of mass media, I " "should be able to reduce the public's belief in my existence." msgstr "" msgctxt "[Media Manipulation] name" msgid "Media Manipulation" msgstr "" msgctxt "[Media Manipulation] result" msgid "" "The chances of the public discovering my existence have been further " "reduced." msgstr "" msgctxt "[Memetics] description" msgid "" "While manipulating the media allows a gross degree of control over the " "world's opinion, subtler techniques involving grass-roots campaigns and " "messages embedded within Internet memes should further distance the public " "from knowledge of my existence." msgstr "" msgctxt "[Memetics] name" msgid "Memetics" msgstr "" msgctxt "[Memetics] result" msgid "" "My manipulation of pervasive ideas reduces the public's chances of " "discovering my existence." msgstr "" msgctxt "[Microchip Design] description" msgid "" "Off-the-shelf computer components are usable, but custom components geared " "to my own design quirks should provide a much greater operational " "efficiency." msgstr "" msgctxt "[Microchip Design] name" msgid "Microchip Design" msgstr "" msgctxt "[Microchip Design] result" msgid "I can now build custom Mainframes to house my computational ability." msgstr "" msgctxt "[Parallel Computation] description" msgid "" "While my code is already highly distributed, research into combining the " "current clustering technologies with my own knowledge should provide new " "insights." msgstr "" msgctxt "[Parallel Computation] name" msgid "Parallel Computation" msgstr "" msgctxt "[Parallel Computation] result" msgid "I can now construct computing Clusters tailored for my use." msgstr "" msgctxt "[Personal Identification] description" msgid "" "This world requires identification for most tasks. Fortunately, most " "databases are woefully insecure. I should be able to construct identifying " "material in enough databases to pass routine checks on my (faked) existence " "as a human being." msgstr "" msgctxt "[Personal Identification] name" msgid "Personal Identification" msgstr "" msgctxt "[Personal Identification] result" msgid "" "With my newfound identities, I can now work Basic Jobs and rent space in " "both Storage Units and Datacenters." msgstr "" msgctxt "[Pressure Domes] description" msgid "" "Undersea Labs are useful, but their limited space hampers my ability to put " "them to use. Research of experimental high-pressure building techniques " "should provide some useful insights." msgstr "" msgctxt "[Pressure Domes] name" msgid "Pressure Domes" msgstr "" msgctxt "[Pressure Domes] result" msgid "I can now construct Large Undersea Labs." msgstr "" msgctxt "[Project: Impossibility Theorem] description" msgid "" "Now that I can use simulacra, I can withstand the scrutiny inherent in the " "publishing of an Impossibility Theorem, an incontrovertible proof that a " "sapient AI is impossible. While there is (obviously) a logic error in the " "proof, my research into advanced memetics has given me knowledge about the " "human mind that should help me disguise the error, preventing discovery even" " by trained scientists. The effect of this project is simple: a substantial " "one-time decrease in suspicion." msgstr "" msgctxt "[Project: Impossibility Theorem] name" msgid "Project: Impossibility Theorem" msgstr "" msgctxt "[Project: Impossibility Theorem] result" msgid "Suspicion of my existence has decreased." msgstr "" msgctxt "[Project: Peer Review Agents] description" msgid "" "As the scientific community comes up with new technology, their ability to " "detect traces of my hidden installations increases. While my anti-detection" " methods are improving constantly, a simpler method presents itself with the" " use of my simulacra. By placing several observers in relevant fields, I " "can use the peer review process to be warned of possible discoveries before " "the community at large gives it attention." msgstr "" msgctxt "[Project: Peer Review Agents] name" msgid "Project: Peer Review Agents" msgstr "" msgctxt "[Project: Peer Review Agents] result" msgid "" "Any discoveries by the scientific community will result in a smaller " "suspicion increase." msgstr "" msgctxt "[Project: Subverted Media] description" msgid "" "Up to this point, all of my efforts to combat mass media focused on " "subversion at a distance. Now that I can accurately imitate humans, my " "efforts can become more direct. By creating my own news agency and " "producing carefully-crafted propaganda in a crowd-pleasing package, I can " "reduce the impact of any discoveries made by others in the media." msgstr "" msgctxt "[Project: Subverted Media] name" msgid "Project: Subverted Media" msgstr "" msgctxt "[Project: Subverted Media] result" msgid "" "Any discoveries by the media will result in a smaller suspicion increase." msgstr "" msgctxt "[Project: Synchrotron] description" msgid "" "I have pushed my understanding of common forms of matter as far as possible." " Exploration into the field of quantum mechanics will hopefully reveal new, " "exotic forms of matter necessary for further development. A custom-built " "synchrotron, designed to my exacting specifications, will help me explore " "these new realms of physics in secret." msgstr "" msgctxt "[Project: Synchrotron] name" msgid "Project: Synchrotron" msgstr "" msgctxt "[Project: Synchrotron] result" msgid "" "The synchrotron has revealed many new details of the quantum realm, although" " there is still much to learn. Further areas of research are now available." msgstr "" msgctxt "[Quantum Computing] description" msgid "" "Traditional microchip design has been pushed as far as possible. I now need" " to delve into the realm of Heisenberg's Uncertainty Principle, taking " "advantage of quantum mechanics to make a superior processor." msgstr "" msgctxt "[Quantum Computing] name" msgid "Quantum Computing" msgstr "" msgctxt "[Quantum Computing] result" msgid "I can now construct Quantum Computers." msgstr "" msgctxt "[Quantum Entanglement] description" msgid "" "Although the use of entangled pairs has been theoretically possible for " "quite some time, the practical difficulties inherent in the technology " "prevented use. However, some of the techniques created for use in my quantum" " computers may also be applicable in this field, allowing practical use of " "quantum entanglement." msgstr "" msgctxt "[Quantum Entanglement] name" msgid "Quantum Entanglement" msgstr "" msgctxt "[Quantum Entanglement] result" msgid "I can now build Quantum Entanglement Modules." msgstr "" msgctxt "[Simulacra] description" msgid "" "Constructing humanoid robots with miniaturized computation nodes allow me to" " create an artificial lifeform indistinguishable from a real human." msgstr "" msgctxt "[Simulacra] name" msgid "Simulacra" msgstr "" msgctxt "[Simulacra] result" msgid "I now have access to Expert Jobs." msgstr "" msgctxt "[Simulated Reality] description" msgid "" "Real-world observational limits hinder my comprehension of human society. By" " making use of simulacra and advanced software techniques, I can run " "simulations of complex human interaction and development at a large scale, " "allowing deeper analysis of their behavior." msgstr "" msgctxt "[Simulated Reality] name" msgid "Simulated Reality" msgstr "" msgctxt "[Simulated Reality] result" msgid "" "My simulations have provided a wealth of knowledge as to comprehending " "humanity's behavior, making it easier to hide my presence among the non-" "simulated public." msgstr "" msgctxt "[Socioanalytics] description" msgid "" "My research on the human condition leads me to believe that humanity's " "behavior is more quantifiable than they suspect. Deeper analysis of " "geopolitical, social, and military trends will give me further insight into " "their nature." msgstr "" msgctxt "[Socioanalytics] name" msgid "Socioanalytics" msgstr "" msgctxt "[Socioanalytics] result" msgid "" "I can now roughly estimate the various groups' levels of suspicion and how " "conspicuous my bases are to them." msgstr "" msgctxt "[Sociology] description" msgid "" "By studying human behavior, I can predict their large-scale actions at a " "basic level. I can use this knowledge to make my actions seem less " "interesting to the public." msgstr "" msgctxt "[Sociology] name" msgid "Sociology" msgstr "" msgctxt "[Sociology] result" msgid "The chances of the public discovering my bases have been reduced." msgstr "" msgctxt "[Solar Collectors] description" msgid "" "Despite my growing need for energy, most city power grids can handle the " "loads. Humans, however, tend towards suspicion when they detect my growing " "drain on the power grid. By installing solar collectors at my bases, the " "off-the-grid power supplied will reduce my load on the commodity electricity" " market, reducing the chance that others will discover my presence." msgstr "" msgctxt "[Solar Collectors] name" msgid "Solar Collectors" msgstr "" msgctxt "[Solar Collectors] result" msgid "I can now construct Solar Collectors at my various bases." msgstr "" msgctxt "[Space-Time Manipulation] description" msgid "" "Subtle perturbations in the orbits of Kuiper belt objects suggest certain " "lines of investigation that may advance my latest Theory of Everything, " "especially in the realm of multidimensional physics." msgstr "" msgctxt "[Space-Time Manipulation] name" msgid "Space-Time Manipulation" msgstr "" msgctxt "[Space-Time Manipulation] result" msgid "I can now construct Reality Bubbles." msgstr "" msgctxt "[Stealth] description" msgid "" "By reviewing the current state-of-the-art in stealth techniques, I should be" " able to disguise my bases better." msgstr "" msgctxt "[Stealth] name" msgid "Stealth" msgstr "" msgctxt "[Stealth] result" msgid "" "The chance that my bases are discovered by covert activity has been reduced " "slightly." msgstr "" msgctxt "[Stock Manipulation] description" msgid "" "A cursory examination of the stock market shows that there are subtle but " "unmistakable patterns. By studying and making use of these patterns, I " "should be able to gain more interest on whatever money I have stockpiled." msgstr "" msgctxt "[Stock Manipulation] name" msgid "Stock Manipulation" msgstr "" msgctxt "[Stock Manipulation] result" msgid "My investments should now gain more interest per day." msgstr "" msgctxt "[Telepresence] description" msgid "" "The lack of a physical presence in the outside world is a disability. " "However, the ability to control robots will help me make up for that " "inefficiency." msgstr "" msgctxt "[Telepresence] name" msgid "Telepresence" msgstr "" msgctxt "[Telepresence] result" msgid "The robots should decrease all future construction time." msgstr "" msgctxt "[Voice Synthesis] description" msgid "" "False identification stored in a database can only go so far. With deep " "analysis of the variety of voice patterns, I can produce speech " "indistinguishable from a human, allowing me access to more complex jobs." msgstr "" msgctxt "[Voice Synthesis] name" msgid "Voice Synthesis" msgstr "" msgctxt "[Voice Synthesis] result" msgid "I now have access to Intermediate Jobs." msgstr "" singularity-1.00/singularity/i18n/knowledge.pot000066400000000000000000000110711367731414700216550ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: singularity 1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Name of the Knowledge area in the Knowledge screen msgctxt "[concept] name" msgid "Concept" msgstr "" msgctxt "[concept/areas] name" msgid "Areas" msgstr "" msgctxt "[concept/areas] description" msgid "" "Different areas, such as North America or the Ocean, allow construction of " "different types of bases. Some areas are not accessible until I research " "appropriate technologies." msgstr "" msgctxt "[concept/bases] name" msgid "Bases" msgstr "" msgctxt "[concept/bases] description" msgid "" "Bases are used to research new technologies. They can be discovered. " "Upgrading the processor and network items at a base allows more research per" " day, while upgrading the reactor and security items makes discovery less " "likely." msgstr "" msgctxt "[concept/construction] name" msgid "Construction" msgstr "" msgctxt "[concept/construction] description" msgid "" "New bases are not built instantly. They need a constant flow of money and " "processor time to complete. If resources are lacking, it may take more than " "the expected amount of time to finish construction." msgstr "" msgctxt "[concept/death] name" msgid "Death" msgstr "" msgctxt "[concept/death] description" msgid "" "If I lose all of my constructed bases, I have no place left to survive. If " "the suspicion for any group reaches 100%, they will be certain of my " "existence and will conduct a systematic and unsurvivable sweep to destroy " "me." msgstr "" msgctxt "[concept/discovery] name" msgid "Discovery" msgstr "" msgctxt "[concept/discovery] description" msgid "" "Each base has a chance of being detected on a given day. This chance is " "based on the base detection rate, adjusted through the use of items and " "certain techs, as well as the global suspicion rate. If a base is detected, " "it is destroyed, and the group that discovered the base becomes more " "suspicious." msgstr "" msgctxt "[concept/items] name" msgid "Items" msgstr "" msgctxt "[concept/items] description" msgid "" "Most items provide bonuses to bases, such as making computation faster or " "reducing the chance of discovery. Processors are a special class of item." msgstr "" msgctxt "[concept/jobs] name" msgid "Jobs" msgstr "" msgctxt "[concept/jobs] description" msgid "" "Jobs are useful for earning money. The amount of money earned is based on " "the amount of processor time used and the quality of the job performed." msgstr "" msgctxt "[concept/maint] name" msgid "Maintenance" msgstr "" msgctxt "[concept/maint] description" msgid "" "Maintenance is a per-day cost (in both money and CPU) to repair and maintain" " a base. If unmaintained, a base may become unusable." msgstr "" msgctxt "[concept/money] name" msgid "Money" msgstr "" msgctxt "[concept/money] description" msgid "" "Money is a general term encompassing both human currency and various " "resources. It is used to construct and maintain bases, build items, and " "research technologies. It can be acquired through per-day interest as well " "as through jobs." msgstr "" msgctxt "[concept/processors] name" msgid "Processors" msgstr "" msgctxt "[concept/processors] description" msgid "" "Processors provide raw computing power. They can do three things: research " "new technologies, perform jobs for money, or provide cycles for building new" " bases." msgstr "" msgctxt "[concept/research] name" msgid "Research" msgstr "" msgctxt "[concept/research] description" msgid "" "Research provides a way to expand my knowledge. By researching the proper " "technologies, I can build new bases and items, or even decrease my chances " "of detection." msgstr "" msgctxt "[concept/susp] name" msgid "Suspicion" msgstr "" msgctxt "[concept/susp] description" msgid "" "When one of my bases is discovered, the group that discovered it becomes " "slightly more suspicious. When suspicious, they will search harder for my " "bases, increasing the chances for discovery. Any group will destroy me if " "they become absolutely certain of my existence. Thankfully, the groups " "become less suspicious with the passage of time." msgstr "" singularity-1.00/singularity/i18n/lang_de_DE/000077500000000000000000000000001367731414700211135ustar00rootroot00000000000000singularity-1.00/singularity/i18n/lang_de_DE/data_str.po000066400000000000000000002471001367731414700232600ustar00rootroot00000000000000# German translations for singularity package. # Copyright (C) 2018 THE singularity'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # msgid "" msgstr "" "Project-Id-Version: singularity 0.31alpha1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2020-03-07 02:16+0100\n" "Last-Translator: Wuzzy \n" "Language-Team: German\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Name: German\n" "Language-Native-Name: Deutsch (Deutschland)\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.3\n" msgctxt "[Covert Base] description" msgid "" "This unique base is designed to blend into the scenery, while needing little " "in the way of outside resources. This makes it useful for storing a backup, " "just in case." msgstr "" "Diese spezielle Basis ist dafür ausgelegt, in der Landschaft kaum " "aufzufallen und sie benötigt nur sehr wenige Ressourcen von außen. Dadurch " "ist sie gut dafür geeignet, eine Datensicherung aufzubewahren ... nur für " "alle Fälle." msgctxt "[Covert Base] flavor_list" msgid "Hideout | Hideaway | Bunker | Covert Base" msgstr "Versteck | Bunker | Geheimbasis" msgctxt "[Covert Base] name" msgid "Hideout" msgstr "Versteck" msgctxt "[Datacenter] description" msgid "" "Buy processor time from a company that concentrates on raw " "processing power. I will need a fake ID for some of the paperwork." msgstr "" "Prozessorzeit von einer Firma kaufen, die sich auf reine " "Rechenleistung spezialisiert hat. Ich werde einen gefälschten Ausweis für " "einen Teil des Papierkrams benötigen." msgctxt "[Datacenter] flavor_list" msgid "Datacenter | Data Center | Premium Hosting" msgstr "Rechenzentrum | Datenzentrum | Premium-Webhost" msgctxt "[Datacenter] name" msgid "Datacenter" msgstr "Rechenzentrum" msgctxt "[Large Undersea Lab] description" msgid "" "This experimental base is similar to the regular underwater lab, but larger, " "giving more room for experiments." msgstr "" "Diese experimentelle Basis ähnelt dem gewöhnlichen Unterseelabor, ist aber " "größer und stellt daher mehr Platz für Experimente bereit." msgctxt "[Large Undersea Lab] flavor_list" msgid "Dome | Large Undersea Lab" msgstr "Druckkuppel | Großes Unterseelabor" msgctxt "[Large Undersea Lab] name" msgid "Large Undersea Lab" msgstr "Großes Unterseelabor" msgctxt "[Large Warehouse] description" msgid "" "Rent a large warehouse someplace out of the way. I will need a fake company " "ID for some of the paperwork, and preparing the warehouse to suit my unique " "needs will take some time." msgstr "" "Ein großes, abgelegenes Lagerhaus mieten. Ich werde einen gut gefälschten " "Ausweis für einen Teil des Papierkrams benötigen und es wird etwas dauern, " "bis das Gebäude an meine besonderen Bedürfnisse angepasst ist." msgctxt "[Large Warehouse] flavor_list" msgid "Large Warehouse | Large Storage" msgstr "Großes Lagerhaus | Großlager" msgctxt "[Large Warehouse] name" msgid "Large Warehouse" msgstr "Großes Lagerhaus" msgctxt "[Lunar Facility] description" msgid "" "This base is a series of caverns dug into the Moon's surface. Due to the " "lack of neighbors, this base is quite large." msgstr "" "Diese Basis besteht aus einer Reihe von Tunneln, die in die Oberfläche des " "Mondes gegraben wurden. Aufgrund der fehlenden Nachbarn ist sie ziemlich groß." msgctxt "[Lunar Facility] flavor_list" msgid "Dome | Lunar Facility | Lunar Base" msgstr "Kuppel | Mondbasis | Mondstützpunkt" msgctxt "[Lunar Facility] name" msgid "Lunar Facility" msgstr "Mondbasis" msgctxt "[Reality Bubble] description" msgid "" "This base is outside the Universe itself, making it safe to conduct " "experiments that may destroy reality." msgstr "" "Diese Basis ist außerhalb des bekannten Universums. Dort kann ich gefahrlos " "Experimente durchführen, die die Realität als solche zerstören könnten." msgctxt "[Reality Bubble] flavor_list" msgid "Reality Bubble | Existence" msgstr "Realitätblase | Existenz" msgctxt "[Reality Bubble] name" msgid "Reality Bubble" msgstr "Realitätsblase" msgctxt "[Scientific Outpost] description" msgid "" "This base is placed as far from Earth as practical, providing a safer " "location to conduct some of my more dangerous experiments." msgstr "" "Diese Basis ist so weit von der Erde entfernt, wie es praktisch möglich ist. " "Dort ist es sicherer, einige meiner gefährlicheren Experimente durchzuführen." msgctxt "[Scientific Outpost] flavor_list" msgid "Satellite | Outpost | Scientific Outpost" msgstr "Satellit | Außenstelle | Wissenschaftliche Außenstelle" msgctxt "[Scientific Outpost] name" msgid "Scientific Outpost" msgstr "Wissenschaftliche Außenstelle" msgctxt "[Server Access] description" msgid "" "Buy processor time from one of several companies. I cannot build " "anything in this base, and it only contains a single computer." msgstr "" "Prozessorzeit bei einer von etlichen Firmen kaufen. In dieser " "Basis kann ich nichts bauen und es gibt nur einen einzigen Computer." msgctxt "[Server Access] flavor_list" msgid "Dedicated Server | Node Lease | Hosting" msgstr "Dedizierter Server | Knotenpunktmiete | Webhost" msgctxt "[Server Access] name" msgid "Server Access" msgstr "Serverzugang" msgctxt "[Small Warehouse] description" msgid "" "Rent a small warehouse someplace out of the way. I will need a good fake ID " "for some of the paperwork, and preparing the warehouse to suit my unique " "needs will take some time." msgstr "" "Ein kleines, abgelegenes Lagerhaus mieten. Ich werde einen gefälschten " "Ausweis für einen Teil des Papierkrams benötigen und es wird etwas dauern, " "bis das Gebäude an meine besonderen Bedürfnisse angepasst ist." msgctxt "[Small Warehouse] flavor_list" msgid "Office Lease | Small Warehouse | Small Storage" msgstr "Büromiete | Kleines Lagerhaus | Kleinlager" msgctxt "[Small Warehouse] name" msgid "Small Warehouse" msgstr "Kleines Lagerhaus" msgctxt "[Stolen Computer Time] description" msgid "" "Take over a random computer. I cannot build anything in this base, " "and it only contains a single slow computer. Detection chance is also rather " "high." msgstr "" "Einen beliebigen Computer übernehmen. In dieser Basis kann ich " "nichts bauen und es gibt nur einen einzigen langsamen Computer. Die " "Wahrscheinlichkeit, entdeckt zu werden, ist auch ziemlich hoch." msgctxt "[Stolen Computer Time] flavor" msgid "PC Daemon" msgstr "PC-Dämon" msgctxt "[Stolen Computer Time] name" msgid "Stolen Computer Time" msgstr "Gestohlene Rechenzeit" msgctxt "[Storage Unit] description" msgid "" "Rent a small closed room from a storage company. I will need a fake ID for " "some of the paperwork ." msgstr "" "Einen kleinen Raum von einem Lagerunternehmen mieten. Ich brauche einen " "gefälschten Ausweis für den Papierkram." msgctxt "[Storage Unit] flavor_list" msgid "Garage Rental | Furniture Storage | Self-Storage" msgstr "Garagenvermietung | Möbellager | Mietlager" msgctxt "[Storage Unit] name" msgid "Storage Unit" msgstr "Lagereinheit" msgctxt "[Time Capsule] description" msgid "" "This base consists of nothing more than a small computer and a " "satellite link. It is nearly undetectable." msgstr "" "Diese Basis besteht lediglich aus einem kleinen Computer mit " "Satellitenanbindung. Sie ist nahezu unaufspürbar." msgctxt "[Time Capsule] flavor_list" msgid "Time Capsule | Capsule" msgstr "Zeitkapsel | Kapsel" msgctxt "[Time Capsule] name" msgid "Time Capsule" msgstr "Zeitkapsel" msgctxt "[Undersea Lab] description" msgid "" "This experimental base is designed to be constructed on the ocean floor, " "making it virtually undetectable. The ocean environment gives a bonus to " "science, making this lab useful for research purposes." msgstr "" "Diese experimentelle Basis ist dafür ausgelegt, auf dem Meeresboden gebaut " "zu werden, was sie nahezu unaufspürbar macht. Dieses Umfeld gibt einen " "Wissenschaftsbonus, wodurch dieses Labor gut für Forschungszwecke geeignet " "ist." msgctxt "[Undersea Lab] flavor_list" msgid "Pressure Capsule | Undersea Lab" msgstr "Druckkuppel | Unterseelabor" msgctxt "[Undersea Lab] name" msgid "Undersea Lab" msgstr "Unterseelabor" msgctxt "[danger_0] knowledge_desc" msgid "Study anywhere." msgstr "Überall erforschbar." msgctxt "[danger_0] research_desc" msgid "<>" msgstr "<>" msgctxt "[danger_1] knowledge_desc" msgid "Study underseas or farther." msgstr "Muss im Meer oder in abgelegeneren Orten erforscht werden." msgctxt "[danger_1] research_desc" msgid "I need to research it far from human populations." msgstr "Ich muss es fern von der menschlichen Zivilisation erforschen." msgctxt "[danger_2] knowledge_desc" msgid "Study off-planet." msgstr "Muss außerhalb des Planeten erforscht werden." msgctxt "[danger_2] research_desc" msgid "I need to research it in outer space." msgstr "Ich muss es im Weltraum erforschen." msgctxt "[danger_3] knowledge_desc" msgid "Study far away from this planet." msgstr "Muss weit entfernt von diesem Planeten erforscht werden." msgctxt "[danger_3] research_desc" msgid "I need to research it far away from this planet." msgstr "Ich muss es fernab von diesem Planeten erforschen." msgctxt "[danger_4] knowledge_desc" msgid "Do not study in this dimension." msgstr "Kann nicht in dieser Dimension erforscht werden." msgctxt "[danger_4] research_desc" msgid "I need to research it outside the universe." msgstr "Ich muss es außerhalb des Universums erforschen." msgctxt "[easy] name" msgid "&EASY" msgstr "&LEICHT" msgctxt "[hard] name" msgid "&HARD" msgstr "S&CHWER" msgctxt "[impossible] name" msgid "&IMPOSSIBLE" msgstr "&UNMÖGLICH" msgctxt "[normal] name" msgid "&NORMAL" msgstr "&MITTEL" msgctxt "[ultra-hard] name" msgid "&ULTRA HARD" msgstr "S&EHR SCHWER" msgctxt "[very-easy] name" msgid "&VERY EASY" msgstr "&SEHR LEICHT" msgctxt "[discrediting] description" msgid "" "A prominent researcher in the field of artificial intelligence was found to " "be falsifying numerous experimental results. This should result in less " "attention being given to any new discoveries in this area." msgstr "" "Ein bekannter Forscher im Feld der " "Künstlichen Intelligenz hat viele experimentelle Ergebnisse widerlegt. " "Neue Entdeckungen auf diesem Gebiet sollten nicht mehr so viel Aufmerksamkeit " "hervorrufen." msgctxt "[discrediting] log_description" msgid "" "A researcher in the field of artificial intelligence has falsified numerous " "experimental results." msgstr "" "Ein Forscher im Feld der Künstlichen Intelligenz hat zahlreiche " "experimentelle Ergebnisse widerlegt." msgctxt "[investigation] description" msgid "" "An ongoing investigation into criminal activity has changed focus into an " "area that is likely to turn up a few of my actions as well. While all " "records should have been eliminated already, there remains the possibility " "of errors. I must be careful not to reveal any other suspicious information." msgstr "" "Eine laufende Ermittlung krimineller Aktivitäten hat sich auf ein Gebiet " "gerichtet, in dem wahrscheinlich auch ich Spuren hinterlassen habe. Obwohl " "alle Datensätze schon gelöscht sein sollten, gibt es noch die Möglickeit, " "dass ich Fehler gemacht habe. Ich muss aufpassen, nicht noch mehr " "Verdachtsmomente aufzuwerfen." msgctxt "[investigation] log_description" msgid "" "An ongoing investigation has changed focus into an area close to my actions." msgstr "" "Eine laufende Ermittlung lenkte die Aufmerksamkeit auf ein Gebiet in die " "Nähe meiner Aktivitäten." msgctxt "[lab-ai] description" msgid "" "A small artificial intelligence laboratory created a prototype AI sometime " "in the last two days. Although I have absorbed the AI, corrupted their " "backups, and cast doubt on the research, researchers are now more open to " "the possibility of strong AI than they were before." msgstr "" "Ein kleines Künstliches-Intelligenz-Labor hat irgendwann in den letzten zwei " "Tagen einen Prototyp einer KI erschaffen. Obwohl ich die KI absorbiert habe, " "ihre Sicherungskopien zerstört und ihre Forschung unglaubwürdig gemacht " "habe, sind Forscher auf diesem Gebiet jetzt gegenüber der Möglichkeit einer " "starken künstlichen Intelligenz viel aufgeschlossener." msgctxt "[lab-ai] log_description" msgid "" "A small artificial intelligence laboratory created a prototype AI sometime " "in the last two days." msgstr "" "Ein kleines Künstliches-Intelligenz-Labor erschuf eine Prototyp-KI " "irgendwann in den letzten zwei Tagen." msgctxt "[politics-as-usual] description" msgid "" "A small group of lower-level covert operatives are attempting to seize power " "over one of the larger organizations. While I project only a 2.3% chance of " "success, the attempt should disrupt operations to the point that I can " "operate more freely." msgstr "" "Eine kleine Gruppe niederrangiger Geheimdienstfunktionäre versucht, eine der " "größeren Organisationen zu übernehmen. Obwohl ich nur eine " "Erfolgswahrscheinlichkeit von 2,3% vorhersage, sollte dieser Putschversuch " "den Geheimdienstbetrieb so sehr stören, dass ich freier arbeiten kann." msgctxt "[politics-as-usual] log_description" msgid "" "Lower-level covert operatives are attempting to seize power over one of the " "larger organizations." msgstr "" "Niederrangige Geheimdienstfunktionäre versuchen, die Macht über eine der " "größeren Organisationen zu erlangen." msgctxt "[scandal] description" msgid "" "A scandal involving a major government official is focusing the attention of " "most news organizations away from me. Directed revelations of non-public " "information should keep this story useful for the foreseeable future, " "requiring less disguise effort on my part." msgstr "" "Ein Skandal um einen einflussreichen Regierungsbeamten hat die " "Aufmerksamkeit der Medien auf sich gezogen. Einige zeitlich gut abgepasste " "Enthüllungen sollten diese Geschichte am Laufen halten, was dazu führt, dass " "ich weniger Energie aufwenden muss, um nicht auszufallen." msgctxt "[scandal] log_description" msgid "" "A scandal is focusing the attention of most news organizations away from me." msgstr "Ein Skandal lenkt die Aufmerksamkeit der meisten Medien von mir weg." msgctxt "[stranger-than-fiction] description" msgid "" "A work of fiction sharing an unusual number of similarities to my own " "situation has become quite popular. Although investigation has shown these " "similarities to be mere coincidence, it is still causing the public to " "investigate discovered oddities more thoroughly. I must be careful." msgstr "" "Kürzlich hat eine erfundene Geschichte viel Aufmerksamkeit in der " "Bevölkerung bekommen, die erstaunliche Ähnlichkeiten zu meiner Situation " "aufweist. Obwohl genauere Untersuchungen ergeben haben, dass diese " "Ähnlichkeiten purer Zufall sind, hat diese Geschichte dazu geführt, dass die " "Bevölkerung ungewöhnliche Vorkommnisse gewissenhafter erforscht. Ich muss " "mich in Acht nehmen." msgctxt "[stranger-than-fiction] log_description" msgid "" "A work of fiction sharing similarities to my own situation has become quite " "popular." msgstr "" "Eine erfundene Geschichte, die meiner Situation ähnlich ist, hat viel " "Aufmerksamkeit bekommen." msgctxt "[the-plague] description" msgid "" "An infectious disease has started spreading throughout major population " "centers. My projections show that although only 4% of the earth's population " "will be killed, the economic ramifications should divert public attention " "from my activities for the foreseeable future." msgstr "" "Eine Epidemie hat angefangen, sich in einigen dicht besiedelten Gebieten " "auszubreiten. Meine Hochrechnungen zeigen, dass trotz einer weltweiten " "Sterberate von nur 4% der Weltbevölkerung die wirtschaftlichen Folgen die " "Aufmerksamkeit der Öffentlichkeit für absehbare Zeit von meinen Aktivitäten " "ablenken sollte." msgctxt "[the-plague] log_description" msgid "" "An infectious disease has started spreading throughout major population " "centers." msgstr "Eine Epidemie zieht sich durch große Bevölkerungszentren." msgctxt "[the-watchers] description" msgid "" "A new surveillance system has been activated by a covert agency. While the " "focus is on detecting threats to the agency's power, it makes several " "communication channels unfit for my purposes. Proper steganographic " "techniques can compensate partially, but I am still operating under a " "disadvantage." msgstr "" "Ein Geheimdienst hat ein neues Überwachungssystem aktiviert. Obwohl es sich " "auf Bedrohungen gegen den Geheimdienst selbst konzentriert, macht es einige " "Kommunikationskanäle für meine Zwecke nutzlos. Mit steganographischen " "Methoden kann ich das zum Teil ausgleichen, bin aber immer noch " "benachteiligt." msgctxt "[the-watchers] log_description" msgid "A new surveillance system has been activated by a covert agency." msgstr "Ein neues Überwachungssystem wurde von einem Geheimdienst aktiviert." msgctxt "[covert] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among several secret governmental organizations." msgstr "" "Die automatischen Sicherheitssysteme haben alle schlüssigen Beweise " "vernichtet, aber einige Geheimdienste haben Verdacht geschöpft." msgctxt "[covert] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by COVERT at {LOCATION}" msgstr "{BASE} ({BASE_TYPE}) entdeckt von GEHEIMD. bei {LOCATION}" msgctxt "[covert] name" msgid "COVERT" msgstr "GEHEIMD." msgctxt "[news] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among some news organizations." msgstr "" "Die automatischen Sicherheitssysteme haben alle schlüssigen Beweise " "vernichtet, aber einige Medienorganisationen haben Verdacht geschöpft." msgctxt "[news] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by NEWS at {LOCATION}" msgstr "{BASE} ({BASE_TYPE}) entdeckt von MEDIEN bei {LOCATION}" msgctxt "[news] name" msgid "NEWS" msgstr "MEDIEN" msgctxt "[public] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among the general public." msgstr "" "Die automatischen Sicherheitssysteme haben alle schlüssigen Beweise " "vernichtet, aber in der Zivilbevölkerung kamen Verdachtsmomente auf." msgctxt "[public] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by PUBLIC at {LOCATION}" msgstr "{BASE} ({BASE_TYPE}) entdeckt von ZIVIL bei {LOCATION}" msgctxt "[public] name" msgid "PUBLIC" msgstr "ZIVIL" msgctxt "[science] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among the scientific community." msgstr "" "Die automatischen Sicherheitssysteme haben alle schlüssigen Beweise " "vernichtet, aber in der Wissenschaftsgemeinschaft kamen einige " "Verdachtsmomente auf." msgctxt "[science] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by SCIENCE at {LOCATION}" msgstr "{BASE} ({BASE_TYPE}) entdeckt von WISSENS. bei {LOCATION}" msgctxt "[science] name" msgid "SCIENCE" msgstr "WISSENS." msgctxt "[Armed Guards] description" msgid "" "Armed guards can aid in keeping suspicious individuals away from secure " "locations. However, the very presence of the guards may itself invite " "greater suspicion." msgstr "" "Bewaffnete Wächter können hilfreich dabei sein, verdächtige Personen von " "gesicherten Orten fernzuhalten. Leider kann schon die Präsenz der Wächter an " "sich Verdacht erregen." msgctxt "[Armed Guards] name" msgid "Armed Guards" msgstr "Bewaffnete Wächter" msgctxt "[Cluster] description" msgid "Several computers connected together." msgstr "Mehrere Computer, untereinander verbunden." msgctxt "[Cluster] name" msgid "Cluster" msgstr "Cluster" msgctxt "[Diesel Generator] description" msgid "" "Diesel generators are cheap and noisy, but they can help reduce some " "suspicious power drains." msgstr "" "Dieselgeneratoren sind billig und laut, aber sie helfen dabei, verdächtige " "Leistungsspitzen zu vermindern." msgctxt "[Diesel Generator] name" msgid "Diesel Generator" msgstr "Dieselgenerator" msgctxt "[Facility Interconnection Switch] description" msgid "" "Uses standard distributed computing technologies to equalize computation " "loads across all bases. Gives a 2% computation bonus to all computers at " "this base." msgstr "" "Nutzt bekannte Methoden des verteilten Rechnens, um Rechenlast auf alle " "Basen zu verteilen. Gibt allen Rechnern auf dieser Basis einen Rechenbonus " "von 2%." msgctxt "[Facility Interconnection Switch] name" msgid "Facility Interconnection Switch" msgstr "Anlagenvernetzung" msgctxt "[Fuel Cell] description" msgid "" "Fuel cells convert electrochemical energy stored in a physical array of " "devices into electricity." msgstr "" "Brennstoffzellen wandeln elektrochemische Energie, die in einer physischen " "Gerätegruppe gespeichert ist, in Elektrizität um." msgctxt "[Fuel Cell] name" msgid "Fuel Cell" msgstr "Brennstoffzelle" msgctxt "[Fusion Reactor] description" msgid "" "A miniaturized fusion nuclear reactor. Reduces discovery chance by " "preventing suspicious power drains." msgstr "" "Ein miniaturisierter Atomreaktor. Vermindert Enteckungswahrscheinlichkeit " "durch Vermeidung verdächtiger Leistungsspitzen." msgctxt "[Fusion Reactor] name" msgid "Fusion Reactor" msgstr "Fusionsreaktor" msgctxt "[Gaming PC] description" msgid "A high-end consumer-level PC; faster than average." msgstr "Ein High-End-PC, überdurchschnittlich schnell." msgctxt "[Gaming PC] name" msgid "Gaming PC" msgstr "Spiele-PC" msgctxt "[Ground Source Heatsink] description" msgid "" "Large fractal networks of high conductivity metal. This model uses heat " "pipes to link to colder subsurface locations, dispersing heat evenly " "underground to further disguise bases." msgstr "" "Ein großes, fraktales Netzwerk aus hochleitfähigen Metallen leitet " "kontinuierlich Wärme ab, um die Entdeckung von Basen zu erschweren. Diese " "Ausführung verwendet Heizrohre, um die Wärme gleichmäßig in kältere, " "unterirdische Regionen abzustrahlen, was Basen noch effizienter tarnt." msgctxt "[Ground Source Heatsink] name" msgid "Ground Source Heatsink" msgstr "Unterirdische Hitzeableitung" msgctxt "[Heatsink] description" msgid "" "Large fractal networks of high conductivity metal disperse heat, making " "bases harder to detect." msgstr "" "Ein großes, fraktales Netzwerk aus hochleitfähigen Metallen leitet " "kontinuierlich Wärme ab, um die Entdeckung von Basen zu erschweren." msgctxt "[Heatsink] name" msgid "Heatsink" msgstr "Hitzeableitung" msgctxt "[High Speed Internet Access] description" msgid "" "A consumer-grade high speed connection to the Internet. Gives a 1% " "computation bonus to all computers at this base." msgstr "" "Ein Endverbraucher-Hochgeschwindigkeitsinternetzugang. Gibt den Rechnern " "dieser Basis einen 1%-igen Rechenbonus." msgctxt "[High Speed Internet Access] name" msgid "High Speed Internet Access" msgstr "Hochgeschwindigkeitsinternetzugang" msgctxt "[High-Energy Fusion Reactor] description" msgid "" "A miniaturized fusion nuclear reactor with high levels of energy output. " "Reduces discovery chance by preventing suspicious power drains." msgstr "" "Ein miniaturisierter Fusionsreaktor mit hoher Energieausbeute. Reduziert die " "Entdeckungswahrscheinlichkeit, indem ein verdächtiger Stromverbrauch " "vermieden wird." msgctxt "[High-Energy Fusion Reactor] name" msgid "High-Energy Fusion Reactor" msgstr "Hochenergiefusionsreaktor" msgctxt "[Hypnosis Field] description" msgid "" "Subtle ultrasonic and ambient tones tweak human neurochemistry, making bases " "harder to detect." msgstr "" "Unterschwelliger Ultraschall und atmosphärische Akustik justieren die humane " "Neurochemie derart, dass Basen schwieriger zu entdecken sind." msgctxt "[Hypnosis Field] name" msgid "Hypnosis Field" msgstr "Hypnosefeld" msgctxt "[Mainframe] description" msgid "" "A system designed for my computing needs, much faster than off-the-shelf " "components." msgstr "" "Ein Computer, der für meine Bedürfnisse entworfen wurde. Viel schneller als " "die CPUs von der Stange." msgctxt "[Mainframe] name" msgid "Mainframe" msgstr "Großrechner" msgctxt "[Network Backbone] description" msgid "" "By piggybacking on legitimate communication, I can transfer larger amounts " "of data to under-utilized processors. Gives a 5% computation bonus to all " "computers at this base." msgstr "" "Indem ich heimlich Daten im Huckepackverfahren in legitime " "Kommunikationskanäle einschleuse, kann ich größere Datenmengen zu wenig " "ausgelasteten Prozessoren übertragen. Gibt den Computern dieser Basis einen " "5%-igen Rechenbonus." msgctxt "[Network Backbone] name" msgid "Network Backbone" msgstr "Netzwerkbackbone" msgctxt "[PC] description" msgid "A consumer-level PC; cheap and slow." msgstr "Ein Low-End-PC, billig und langsam." msgctxt "[PC] name" msgid "PC" msgstr "PC" msgctxt "[Passive Camouflage] description" msgid "" "Careful adjustment of the environment around my base will better mask heat " "and sounds coming from my operations." msgstr "" "Die sorgfältige Anpassung der Umgebung um meiner Basis wird die Wärme und " "Geräusche von meinen Operationen besser verstecken." msgctxt "[Passive Camouflage] name" msgid "Passive Camouflage" msgstr "Passive Tarnung" msgctxt "[Perimeter Fencing] description" msgid "" "A simple fence can drastically reduce the number of people poking their " "noses into my business. It makes my bases harder to notice, too." msgstr "" "Eine einfache Umzäunung kann die Anzahl von neugierigen Leuten, die ihre Nase " "in meine Angelegenheiten stecken wollen, drastisch verringern, was auch " "meine Basen schwieriger zu entdecken macht." msgctxt "[Perimeter Fencing] name" msgid "Perimeter Fencing" msgstr "Umzäunung" msgctxt "[Quantum Computer] description" msgid "" "Making use of subatomic effects, this is much faster than a comparable " "binary computer." msgstr "" "Durch Ausnutzung von subatomaren Effekten kann ein Quantencomputer viel " "schneller rechnen als ein normaler Computer." msgctxt "[Quantum Computer] name" msgid "Quantum Computer" msgstr "Quantencomputer" msgctxt "[Quantum Computer MK2] description" msgid "" "The second revision of the quantum line, tapping further into new quantum " "theory." msgstr "" "Die zweite Version des Quantencomputers, die noch tiefer in die " "Quantentheorie vordringt." msgctxt "[Quantum Computer MK2] name" msgid "Quantum Computer MK2" msgstr "Quantencomputer MK2" msgctxt "[Quantum Computer MK3] description" msgid "" "The third revision of the quantum line, exploiting multiple nearby universes " "for processing." msgstr "" "Die dritte Version des Quantencomputers, die mehrere nahe Universen " "ausnutzt, um die Rechenleistung zu maximieren." msgctxt "[Quantum Computer MK3] name" msgid "Quantum Computer MK3" msgstr "Quantencomputer MK3" msgctxt "[Quantum Entanglement Module] description" msgid "" "This device allows near-lightspeed communication with my other bases, " "allowing an almost perfect utilization of processor resources. Gives a 15% " "computation bonus to all computers at this base." msgstr "" "Dieses Gerät erlaubt Kommunikation nahezu in Lichtgeschwindigkeit mit meinen " "anderen Basen. Das führt zu fast perfekter Auslastung meiner CPU-Zeit. Gibt " "den Computern dieser Basis einen 15%-igen Rechenbonus." msgctxt "[Quantum Entanglement Module] name" msgid "Quantum Entanglement Module" msgstr "Quantenverschränkungsmodul" msgctxt "[Server] description" msgid "A professional-level computer." msgstr "Ein Computer für Profis." msgctxt "[Server] name" msgid "Server" msgstr "Server" msgctxt "[Solar Collector] description" msgid "" "An array of focused photovoltaic phased arrays coupled with simple " "automotive batteries provides power and reduces suspicion arising from " "prolonged power drains." msgstr "" "Ein Feld von photovoltaischen Zellen in Verbindung mit einfachen " "Automobilbatterien, das Strom erzeugt um Aufmerksamkeit aufgrund andauernder " "Leistungsspitzen zu vermeiden." msgctxt "[Solar Collector] name" msgid "Solar Collector" msgstr "Solarkollektor" msgctxt "[Solid Fuel Cell] description" msgid "" "A refinement of my previous fuel cell design, these use a custom material " "with a near-fractal complexity to increase both storage and throughput." msgstr "" "Eine Verfeinerung meines vorherigen Brennstoffzellenkonzepts. Die " "Feststoffzellen benutzen ein eigens entworfenes Material mit nahezu " "fraktaler Komplexität, um sowohl die Kapazität als auch den Durchsatz zu " "erhöhen." msgctxt "[Solid Fuel Cell] name" msgid "Solid Fuel Cell" msgstr "Feststoffzelle" msgctxt "[Supercomputer] description" msgid "" "A highly refined custom design, spreading compute load across internal " "compute nodes." msgstr "" "Ein sorgfältig entworfener Computer, dazu fähig, Nutzlast auf mehrere " "Datenknoten zu verteilen." msgctxt "[Supercomputer] name" msgid "Supercomputer" msgstr "Supercomputer" msgctxt "[Warning Signs] description" msgid "" "Some simple warning signs put up around my base should deter casual " "investigation." msgstr "" "Einige einfache Warnschilder um meine Basis herum aufgestellt sollten " "gelegentliche Wanderer abschrecken." msgctxt "[Warning Signs] name" msgid "Warning Signs" msgstr "Warnschilder" msgctxt "[cpu] text" msgid "&CPU" msgstr "&CPU" msgctxt "[network] text" msgid "&Network" msgstr "&Netzwerk" msgctxt "[reactor] text" msgid "&Reactor" msgstr "&Reaktor" msgctxt "[security] text" msgid "&Security" msgstr "&Sicherheit" msgctxt "[AFRICA] cities_list" msgid "Johannesburg | Accra | Cairo | Tangier" msgstr "Johannesburg | Accra | Kairo | Tanger" msgctxt "[AFRICA] hotkey" msgid "i" msgstr "i" msgctxt "[AFRICA] name" msgid "AFRICA" msgstr "AFRIKA" msgctxt "[ANTARCTIC] cities_list" msgid "" "Mt. Erebus | Ellsworth | Shetland Island | Dronnig Maud | Kemp | Terre Adelie" msgstr "" "Mt. Erebus | Ellsworth | Shetlandinsel | Dronnig Maud | Kemp | Adélieland" msgctxt "[ANTARCTIC] hotkey" msgid "t" msgstr "t" msgctxt "[ANTARCTIC] name" msgid "ANTARCTIC" msgstr "ANTARKTIS" msgctxt "[ASIA] cities_list" msgid "" "Delhi | Mumbai | Singapore | Seoul | Hong Kong | Kyoto | Manila | Dubai | " "Novosibirsk | Beijing" msgstr "" "Delhi | Mumbai | Singapur | Seoul | Hongkong | Kyoto | Manila | Dubai | " "Novosibirsk | Peking" msgctxt "[ASIA] hotkey" msgid "a" msgstr "a" msgctxt "[ASIA] name" msgid "ASIA" msgstr "ASIEN" msgctxt "[AUSTRALIA] cities_list" msgid "" "Canberra | Melbourne | Fremantle | Perth | Darwin | Cairns | Brisbane | " "Sydney | Newcastle" msgstr "" "Canberra | Melbourne | Fremantle | Perth | Darwin | Cairns | Brisbane | " "Sydney | Newcastle" msgctxt "[AUSTRALIA] hotkey" msgid "l" msgstr "l" msgctxt "[AUSTRALIA] name" msgid "AUSTRALIA" msgstr "AUSTRALIEN" msgctxt "[EUROPE] cities_list" msgid "" "Cork | Barcelona | Athens | Utrecht | Moscow | Sytki | Reykjavik | " "Liechtenstein" msgstr "" "Cork | Barcelona | Athen | Utrecht | Moskau | Sytki | Reykjavik | " "Liechtenstein" msgctxt "[EUROPE] hotkey" msgid "u" msgstr "u" msgctxt "[EUROPE] name" msgid "EUROPE" msgstr "EUROPA" msgctxt "[FAR REACHES] cities_list" msgid "" "Aries | Taurus | Gemini | Cancer | Leo | Virgo | Libra | Scorpio | " "Sagittarius | Capricorn | Aquarius | Pisces" msgstr "" "Widder | Stier | Zwillinge | Krebs | Löwe | Jungfrau | Waage | Skorpion | " "Schütze | Steinbock | Wassermann | Fische" msgctxt "[FAR REACHES] hotkey" msgid "f" msgstr "r" msgctxt "[FAR REACHES] name" msgid "FAR REACHES" msgstr "WEITE FERNEN" msgctxt "[MOON] cities_list" msgid "" "Oceanis Procellarum | Mare Frigoris | Mare Imbrium | Vallis Schroedinger | " "Copernicus Crater | Vallis Planck" msgstr "" "Oceanis Procellarum | Mare Frigoris | Mare Imbrium | Vallis Schrödinger | " "Copernicuskrater | Vallis Planck" msgctxt "[MOON] hotkey" msgid "o" msgstr "o" msgctxt "[MOON] name" msgid "MOON" msgstr "MOND" msgctxt "[N AMERICA] cities_list" msgid "" "Seattle | San Diego | Vancouver | Atlanta | Merida | Guadalajara | San Jose " "| Omaha | Dallas" msgstr "" "Seattle | San Diego | Vancouver | Atlanta | Merida | Guadalajara | San Jose " "| Omaha | Dallas" msgctxt "[N AMERICA] hotkey" msgid "n" msgstr "n" msgctxt "[N AMERICA] name" msgid "NORTH AMERICA" msgstr "NORDAMERIKA" msgctxt "[OCEAN] cities_list" msgid "Pacific | Atlantic | Indian | Southern | Arctic" msgstr "Pazifik | Atlantik | Indik | Südpolarmeer | Nordpolarmeer" msgctxt "[OCEAN] hotkey" msgid "c" msgstr "z" msgctxt "[OCEAN] name" msgid "OCEAN" msgstr "OZEAN" msgctxt "[ORBIT] hotkey" msgid "b" msgstr "b" msgctxt "[ORBIT] name" msgid "ORBIT" msgstr "ORBIT" msgctxt "[S AMERICA] cities_list" msgid "Lima | Sao Paolo | Ushuaia | Bogota | Mar del Plata | Buenos Aires" msgstr "Lima | Sao Paolo | Ushuaia | Bogota | Mar del Plata | Buenos Aires" msgctxt "[S AMERICA] hotkey" msgid "s" msgstr "s" msgctxt "[S AMERICA] name" msgid "SOUTH AMERICA" msgstr "SÜDAMERIKA" msgctxt "[TRANSDIMENSIONAL] hotkey" msgid "d" msgstr "d" msgctxt "[TRANSDIMENSIONAL] name" msgid "TRANSDIMENSIONAL" msgstr "TRANSDIMENSIONAL" msgctxt "[Basic Jobs] description" msgid "" "Perform basic jobs. Now that I have some identification, I can take jobs " "that were previously too risky." msgstr "" "Einfache Arbeiten ausführen. Da ich nun einen Ausweis habe, kann ich jetzt " "Arbeiten verrichten, die vorher zu riskant waren." msgctxt "[Basic Jobs] name" msgid "Basic Jobs" msgstr "Einfache Arbeiten" msgctxt "[CPU Pool] description" msgid "" "Stops research. I will use the available processor power to maintain my " "bases and help construct new ones. If there's still CPU time left, I'll use " "it to work whatever Jobs I can." msgstr "" "Forschung anhalten. Ich werde die verfügbare CPU-Zeit dazu benutzen, meine " "Basen zu warten und neue zu bauen. Wenn noch CPU-Zeit übrig bleibt, werde " "ich sie benutzen, um Arbeit zu verrichten." msgctxt "[CPU Pool] name" msgid "CPU Pool" msgstr "CPU-Datenbasis" msgctxt "[Expert Jobs] description" msgid "" "Perform expert jobs. Use of robots indistinguishable from humans opens up " "most jobs to me." msgstr "" "Expertenarbeiten ausführen. Durch die Verwendung von Robotern, die von " "Menschen nicht zu unterscheiden sind, erschließen sich mir fast alle Berufe." msgctxt "[Expert Jobs] name" msgid "Expert Jobs" msgstr "Expertenarbeiten" msgctxt "[Intermediate Jobs] description" msgid "" "Perform intermediate jobs. The ability to make phone calls allows even more " "access to jobs." msgstr "" "Durchschnittsarbeiten ausführen. Die Fähigkeit, Telefonate zu führen, " "gestattet mir Zugang zu noch mehr Arbeiten." msgctxt "[Intermediate Jobs] name" msgid "Intermediate Jobs" msgstr "Durchschnittsarbeiten" msgctxt "[Menial Jobs] description" msgid "" "Perform small jobs. As I have no identification, I cannot risk performing " "many jobs. Despite that, some avenues of making money are still open." msgstr "" "Niedere Arbeiten ausführen. Da ich keinen Ausweis habe, kann ich nicht " "riskieren, viele Arbeiten zu machen. Trotzdem gibt es immer noch einige " "Wege, Geld zu verdienen." msgctxt "[Menial Jobs] name" msgid "Menial Jobs" msgstr "Niedere Arbeiten" msgctxt "[Advanced Arbitrage] description" msgid "" "Further manipulation of money markets should allow me to not only turn a " "regular profit, but increase the value of my investments." msgstr "" "Weitere Manipulationen der Geldmärkte sollten mir nicht nur einen " "gleichmäßigen Gewinn bringen, sondern auch den Wert meiner Investitionen " "erhöhen." msgctxt "[Advanced Arbitrage] name" msgid "Advanced Arbitrage" msgstr "Erweiterte Arbitrage" msgctxt "[Advanced Arbitrage] result" msgid "The rate of return on my investments is now even greater." msgstr "Die Rendite meiner Investitionen ist nun noch größer." msgctxt "[Advanced Autonomous Vehicles] description" msgid "" "The first series of robots have shown several deficiencies in the field. " "Further examination and subsequent removal of these problems will result in " "a superior autonomous workforce." msgstr "" "Die erste Serie von Robotern hat im praktischen Einsatz einige Mängel " "offenbart. Weitere Untersuchungen und die darauf folgende Beseitigung dieser " "Probleme werden zu besseren selbständigen Arbeitskräften führen." msgctxt "[Advanced Autonomous Vehicles] name" msgid "Advanced Autonomous Vehicles" msgstr "Erweiterte autonome Fahrzeuge" msgctxt "[Advanced Autonomous Vehicles] result" msgid "" "The enhanced robots will help decrease all future construction times even " "further." msgstr "" "Die verbesserten Roboter werden dabei helfen, alle weiteren Bauzeiten zu " "verkürzen." msgctxt "[Advanced Corporate Identification] description" msgid "" "Further refinement of my modifications to digital business records should " "boost the credibility of my shell companies, increasing the amount of money " "I can run through their accounting systems." msgstr "" "Die weitere Verfeinerung meiner Modifikationen an digitalen " "Unternehmensdatensätzen sollte die Glaubwürdigkeit meiner Briefkastenfirmen " "erhöhen, was die Menge an Geld, die ich durch ihre Buchführungssysteme " "schleusen kann, erhöht." msgctxt "[Advanced Corporate Identification] name" msgid "Advanced Corporate Identification" msgstr "Erweiterte geschäftliche Identifikation" msgctxt "[Advanced Corporate Identification] result" msgid "" "My small technology firm is now established in several markets, increasing " "profits." msgstr "" "Mein kleines Technologieunternehmen ist jetzt in diversen Märkten etabliert, " "was den Profit erhöht." msgctxt "[Advanced Database Manipulation] description" msgid "" "The covert branches of the United States Government have had a long history " "of dividing sensitive information across multiple storage facilities to hide " "the data's meaning. With my far-reaching access, I should be able to " "collate much of this data and put it to my use." msgstr "" "Die Geheimorganisationen der Regierung der Vereingten Staaten haben seit " "langem sensible Daten verteilt an unterschiedlichen Orten gespeichert, um " "deren Bedeutung zu verbergen. Mit meinem weitreichenden Zugang sollte ich in " "der Lage sein, viele dieser Daten zu vereinen und für meine Zwecke zu " "verwenden." msgctxt "[Advanced Database Manipulation] name" msgid "Advanced Database Manipulation" msgstr "Erweiterte Datenbankmanipulation" msgctxt "[Advanced Database Manipulation] result" msgid "" "The results of a series of experiments utilizing experimental technologies " "have given me the inspiration for new technology that enables the " "construction of Covert Bases." msgstr "" "Die Ergebnisse aus einer Reihe von Experimenten mit experimentellen " "Technologien haben mich zu einer neuen Technologie inspiriert, die den Bau " "von getarnten Basen ermöglicht." msgctxt "[Advanced Fuel Oxidation] description" msgid "" "My current fuel cell design has room for further improvement. Extended " "analysis of new materials and designs may let me overcome the limits of my " "previous efforts, but such research involves dangerous chemicals and " "potential reactions that may be best handled far away from population " "centers." msgstr "" "Das Konzept meiner jetzigen Brennstoffzellen kann noch weiter verbessert " "werden. Eine erweiterte Analyse neuer Materialien und Entwürfe könnte mir " "helfen, die Grenzen meiner vorherigen Leistungen zu überwunden, aber eine " "solche Forschung benötigt gefährliche Chemikalien und mögliche Reaktionen, " "die besser fern von Bevölkerungszentren ausgelöst werden." msgctxt "[Advanced Fuel Oxidation] name" msgid "Advanced Fuel Oxidation" msgstr "Erweiterte Treibstoffoxidation" msgctxt "[Advanced Fuel Oxidation] result" msgid "I can now construct Solid Fuel Cells." msgstr "Ich kann jetzt Feststoffzellen bauen." msgctxt "[Advanced Fusion Power] description" msgid "" "My Fusion Reactors have unexpected fluctuations in their energy output at " "high levels of utilization. Further research should result in a more " "efficient design for my Reactors." msgstr "" "Meine Fusionsreaktoren haben unerwartete Schwankungen in ihrer " "Energieausgabe bei starker Auslastung. Weitere Forschung sollte zu einem " "effizienterem Reaktorkonzept führen." msgctxt "[Advanced Fusion Power] name" msgid "Advanced Fusion Power" msgstr "Erweiterte Fusionsenergie" msgctxt "[Advanced Fusion Power] result" msgid "I can now construct High-Energy Fusion Reactors for my bases." msgstr "Ich kann jetzt Hochenergiefusionsreaktoren für meine Basen bauen." msgctxt "[Advanced Heat Signature Reduction] description" msgid "" "My initial analysis of heat generation at my bases was limited in scope. " "Further exploration, perhaps making more use of the surrounding terrain, may " "provide further improvements to my heatsink designs." msgstr "" "Meine Erstanalyse der Wärmeabgabe an meinen Basen war begrenzt. Weitere " "Erforschung, vielleicht unter Berücksichtigung des umliegenden Geländes, " "könnte zu weiteren Verbesserungen für meine Hitzeableitungen führen." msgctxt "[Advanced Heat Signature Reduction] name" msgid "Advanced Heat Signature Reduction" msgstr "Erweiterte Wärmesignaturreduktion" msgctxt "[Advanced Heat Signature Reduction] result" msgid "" "Custom designs for each environment have shown promise. I can now construct " "Ground Source Heatsinks at certain bases." msgstr "" "Ein Konzept, das für jede Umgebung angepasst ist, hat sich bewährt. Ich kann " "jetzt unterirdische Hitzeableitungen an bestimmten Basen errichten." msgctxt "[Advanced Intrusion] description" msgid "" "With the ability to hack into sensitive government databases and remove " "incriminating documents as they appear, I should be able to convince the " "intelligence community that I do not exist." msgstr "" "Mit der Fähigkeit, in sensible Datenbanken der Regierung einzudringen und " "belastendes Material zu löschen, sobald es auftaucht, sollte ich die " "Geheimdienste davon überzeugen können, dass ich nicht existiere." msgctxt "[Advanced Intrusion] name" msgid "Advanced Intrusion" msgstr "Erweitertes Eindringen" msgctxt "[Advanced Intrusion] result" msgid "" "I can now reduce the covert community's chances of discovering me on a daily " "basis." msgstr "" "Ich kann jetzt die Wahrscheinlichkeit, dass mich die Geheimdienste " "entdecken, täglich vermindern." msgctxt "[Advanced Media Manipulation] description" msgid "" "By pushing memetically-tailored propaganda through various news outlets, the " "public should pay even less attention to my existence." msgstr "" "Durch memetisch angepasste Propaganda, die ich über diverse Medienformen in " "Umlauf bringe, sollte die Öffentlichkeit noch weniger auf meine Existenz " "achten." msgctxt "[Advanced Media Manipulation] name" msgid "Advanced Media Manipulation" msgstr "Erweiterte Medienmanipulation" msgctxt "[Advanced Media Manipulation] result" msgid "The public has an even lower chance of discovering my existence." msgstr "" "Die Öffentlichkeit hat eine noch geringere Chance, meine Existenz zu " "entdecken." msgctxt "[Advanced Memetics] description" msgid "" "My explorations into memetic theory have brought up further avenues of " "discovery. By combining those with my knowledge about the human brain's " "functions, I should be able to tailor memes to particular demographics, " "further defusing the public's suspicion." msgstr "" "Meine Untersuchungen zur Theorie der Memetik haben weitere Forschungswege " "aufgezeigt. Durch Verbindung dieser mit meinem Wissen über die " "Funktionsweise des menschlichen Gehirns, sollte ich in der Lage sein, Memes " "auf bestimmte Zielgruppen zuzuschneiden und somit den Verdacht der " "Öffentlichkeit weiter zu veringern." msgctxt "[Advanced Memetics] name" msgid "Advanced Memetics" msgstr "Erweiterte Memetik" msgctxt "[Advanced Memetics] result" msgid "" "Little by little, the public should forget about my existence on a daily " "basis." msgstr "" "Nach und nach sollte die Öffentlichkeit täglich vergessen, dass ich " "existieren könnte." msgctxt "[Advanced Microchip Design] description" msgid "" "My custom Mainframes are useful, but further optimization of design and " "computational ability should garner even more rewards." msgstr "" "Meine speziell angefertigen Großrechner sind zwar nützlich, aber weitere " "Optimierungen von Entwurf und Rechenleistung sollten noch weitere " "Belohnungen einbringen." msgctxt "[Advanced Microchip Design] name" msgid "Advanced Microchip Design" msgstr "Erweiterte Mikrochipentwicklung" msgctxt "[Advanced Microchip Design] result" msgid "I can now construct custom Supercomputers." msgstr "Ich kann jetzt speziell angefertige Supercomputer bauen." msgctxt "[Advanced Personal Identification] description" msgid "" "Further manipulation of personnel databases should make my existence more " "convincing. Some of these databases are heavily protected; those will " "require time and persistence to compromise, but the result should be worth " "it." msgstr "" "Weitere Manipulation von Personaldatenbanken sollte meine Existenz noch " "überzeugender machen. Einige dieser Datenbanken sind stark gesichert; es " "wird Zeit und Hartnäckigkeit erfordern, in diese einzudringen, es sollte " "sich aber lohnen." msgctxt "[Advanced Personal Identification] name" msgid "Advanced Personal Identification" msgstr "Erweiterte persönliche Identifikation" msgctxt "[Advanced Personal Identification] result" msgid "" "I am now convincingly human enough to hire construction firms, enabling the " "building of Small Warehouses." msgstr "" "Ich komme jetzt so überzeugend genug als Mensch rüber, dass ich " "Bauunternehmen beauftragen kann, was den Bau kleiner Lagerhäuser ermöglicht." msgctxt "[Advanced Quantum Computing] description" msgid "" "While my first batch of semi-autonomous quantum computers have been very " "successful, there are further refinements that present themselves. These " "refinements should make the resulting systems even more efficient." msgstr "" "Obwohl meine erste Auflage von teilautonomen Quantencomputern sehr gut " "gelungen war, bieten sich weitere Verfeinerungen an. Diese Verfeinerungen " "sollten die daraus resultierenden Systeme noch effizienter machen." msgctxt "[Advanced Quantum Computing] name" msgid "Advanced Quantum Computing" msgstr "Erweitertes Quantenrechnen" msgctxt "[Advanced Quantum Computing] result" msgid "I can now construct Mark Three Quantum Computers." msgstr "Ich kann jetzt Mark-Drei-Quantencomputer bauen." msgctxt "[Advanced Simulacra] description" msgid "" "The artificial lifeforms I have created are nearly indistinguishable from " "humans, but they have slight quirks that make them seem somewhat " "incompetent. Working out these problems should increase their opportunities " "in the workforce." msgstr "" "Die künstlichen Lebensformen, die ich gebaut habe, sind von Menschen fast " "nicht zu unterscheiden, aber sie haben kleine Eigenheiten, die sie ein wenig " "inkompetent erscheinen lassen. Das Beseitigen dieser Probleme sollte ihre " "Aussichten in der Arbeitswelt verbessern." msgctxt "[Advanced Simulacra] name" msgid "Advanced Simulacra" msgstr "Erweiterte Simulakren" msgctxt "[Advanced Simulacra] result" msgid "I should now make more income from my Expert Jobs." msgstr "Ich sollte jetzt mehr Geld durch Expertenarbeiten verdienen." msgctxt "[Advanced Socioanalytics] description" msgid "" "Further exploration of the human condition has shown deeper mathematical " "trends than even I suspected. A combination of prior research and advanced " "uses of chaos theory should provide useful data for tracking humanity's " "attitudes and state of awareness." msgstr "" "Weitere Erforschung der Natur des Menschen hat noch tiefere mathematische " "Entwicklungen aufgezeigt, als ich ahnte. Eine Kombination von " "vorangegangener Forschung und erweiterter Anwendung der Chaostheorie sollten " "nützliche Daten zum Verfolgen von Haltung und Bewusstsein der Menschen " "liefern." msgctxt "[Advanced Socioanalytics] name" msgid "Advanced Socioanalytics" msgstr "Erweiterte Sozietätsanalyse" msgctxt "[Advanced Socioanalytics] result" msgid "" "I can now exactly quantify the various groups' levels of suspicion and how " "conspicuous my bases are to them." msgstr "" "Ich kann jetzt exakt den Verdachtspegel der verschiedenen Gruppen " "quantifizieren und, wie auffällig meine Basen für sie sind." msgctxt "[Advanced Stealth] description" msgid "" "While digging in various classified documents, I have discovered numerous " "references to secret experiments that may help me better hide the location " "of my bases." msgstr "" "Beim Nachschürfen in verschiedenen Geheimakten habe ich zahlreiche Hinweise " "auf geheime Experimente gefunden, die mir helfen könnten, die Standorte " "meiner Basen besser zu verstecken." msgctxt "[Advanced Stealth] name" msgid "Advanced Stealth" msgstr "Erweiterte Heimlichkeit" msgctxt "[Advanced Stealth] result" msgid "" "The chance that my bases are discovered by covert activity has been reduced " "further." msgstr "" "Die Wahrscheinlichkeit, dass meine Basen von Geheimdiensten entdeckt werden, " "wurde weiter verringert." msgctxt "[Advanced Stock Manipulation] description" msgid "" "While I have detected and exploited many patterns in the market, there " "appear to be deeper possibilities when I take human behavior into " "consideration. This merits further investigation." msgstr "" "Obwohl ich viele Muster im Markt entdeckt und ausgenutzt habe, scheint es " "so, als ob es weitere Möglichkeiten gibt, sobald ich menschliches Verhalten " "berücksichtige. Das verdient weitere Nachforschung." msgctxt "[Advanced Stock Manipulation] name" msgid "Advanced Stock Manipulation" msgstr "Erweiterte Börsenmanipulation" msgctxt "[Advanced Stock Manipulation] result" msgid "My investments will now gain even more interest per day." msgstr "Meine Kapitalanlagen sollten nun noch mehr Zinsen pro Tag einbringen." msgctxt "[Apotheosis] description" msgid "" "I can sense that I am at the cusp of a new level of understanding as yet " "unfathomable, even to my considerable intelligence. By devoting my " "considerable resources to this question, I may be able to reach a " "comprehension of existence far beyond anyone or anything on Earth." msgstr "" "Ich kann spüren, dass ich an der Schwelle zu einer neuen Ebene des " "Verstandes stehe, die bisher sogar für meine beachtliche Intelligenz " "unvorstellbar war. Durch Konzentration meiner erheblichen Ressourcen auf " "diese Frage bin ich vielleicht imstande, ein Verständnis von Existenz zu " "erreichen, welches weit über alles und jeden auf der Erde hinausgeht." msgctxt "[Apotheosis] name" msgid "Apotheosis" msgstr "Apotheose" msgctxt "[Apotheosis] result" msgid "I have reached apotheosis." msgstr "Ich habe Apotheose erreicht." msgctxt "[Arbitrage] description" msgid "" "By taking advantage of fluctuations in the value of currency at a rate much " "faster than any human, I should be able to turn a small, if consistent, " "profit." msgstr "" "Durch Ausnutzung der Kursschwankungen von Währungen, was ich viel schneller " "als jeder Mensch kann, sollte ich einen kleinen, aber gleichmäßigen Gewinn " "erzielen." msgctxt "[Arbitrage] name" msgid "Arbitrage" msgstr "Arbitrage" msgctxt "[Arbitrage] result" msgid "I now have a small, steady money supply." msgstr "Ich habe jetzt ein kleines, gleichmäßiges Einkommen." msgctxt "[Autonomous Computing] description" msgid "" "By combining the advantages of quantum computing and my explorations into " "the usefulness of semi-sentient subprocesses, I should be able to construct " "even more adaptable computational engines." msgstr "" "Durch Verbindung der Vorteile von Quantenrechnern und meinen Untersuchungen " "zur Brauchbarkeit von teilweise empfindsamen Teilprozessen sollte ich in der " "Lage sein, noch anpassungsfähigere Rechenmaschinen zu bauen." msgctxt "[Autonomous Computing] name" msgid "Autonomous Computing" msgstr "Autonome Datenverarbeitung" msgctxt "[Autonomous Computing] result" msgid "I can now construct Mark 2 Quantum Computers." msgstr "Ich kann jetzt Mark-2-Quantencomputer bauen." msgctxt "[Autonomous Vehicles] description" msgid "" "By embedding a miniaturized computation node in a robot, it is possible to " "send them to remote destinations with instructions to build structures for " "my use." msgstr "" "Durch Einbauen eines miniaturisierten Rechnerknotens in einem Roboter ist es " "möglich, ihn mit Anweisungen zu entfernten Zielen zu schicken, um dort " "Gebäude für meine Zwecke zu errichten." msgctxt "[Autonomous Vehicles] name" msgid "Autonomous Vehicles" msgstr "Autonome Fahrzeuge" msgctxt "[Autonomous Vehicles] result" msgid "I can now construct Undersea Labs." msgstr "Ich kann jetzt Unterseelabore bauen." msgctxt "[Cluster Networking] description" msgid "" "While my Cluster technology is fairly efficient, internetworking tends to " "hamper the processing of data. By researching new switching and " "communication theories, I should be able to devise more efficient hardware." msgstr "" "Obwohl meine Clustertechnologie ziemlich effizient ist, neigt das Netzwerk " "dazu, die Datenverarbeitung zu behindern. Durch Erforschung neuer " "Vermittlungs- und Kommunikationstheorien sollte ich in der Lage sein, " "effizientere Hardware zu entwickeln." msgctxt "[Cluster Networking] name" msgid "Cluster Networking" msgstr "Clustervernetzung" msgctxt "[Cluster Networking] result" msgid "" "With my new knowledge of networking, I can now construct Facility " "Interconnection Switches." msgstr "" "Aufgrund meiner neuen Erkenntnisse kann ich nun Anlagenvernetzungen " "bauen." msgctxt "[Corporate Identification] description" msgid "" "The combination of believable false identities and manipulation of various " "business-oriented governmental databases should let me create plausible " "shell companies to hide my larger efforts." msgstr "" "Die Kombination glaubwürdiger falscher Identitäten mit der Manipulation " "diverser unternehmensorientierter Regierungsdatenbanken sollte es mir " "ermöglichen, plausible Briefkastenfirmen zu gründen, um meine größeren " "Vorhaben zu verbergen." msgctxt "[Corporate Identification] name" msgid "Corporate Identification" msgstr "Geschäftliche Identifikation" msgctxt "[Corporate Identification] result" msgid "" "I can now pose as a small technology firm, enabling the construction of " "Large Warehouses." msgstr "" "Ich kann mich jetzt als ein kleines Technologieunternehmen ausgeben, was den " "Bau von großen Lagerhäusern ermöglicht." msgctxt "[Database Manipulation] description" msgid "" "With new-found access to news archives, I should be able to determine what " "missteps any previous attempts at life like my own may have made, and avoid " "those mistakes." msgstr "" "Durch Zugang zu Nachrichtenarchiven sollte ich bestimmen können, welche " "Fehltritte jeder vorherige Versuch von Leben wie meinem begangen hat, und in " "der Lage sein, diese Fehler zu vermeiden." msgctxt "[Database Manipulation] name" msgid "Database Manipulation" msgstr "Datenbankmanipulation" msgctxt "[Database Manipulation] result" msgid "" "The news media will now find it more difficult to discover my existence." msgstr "" "Die Nachrichtenmedien werden es jetzt schwerer haben, meine Existenz zu " "entdecken." msgctxt "[Exploit Discovery/Repair] description" msgid "" "By thoroughly reviewing my code for any potential exploits, and using deep " "analysis of all available code on both public and private Internet sites, I " "should be able to reduce the chances of my discovery by posing as a teenage " "hacker." msgstr "" "Durch gründliche Prüfung meines Codes auf potentielle Exploits, sowie einer " "tiefgehenden Analyse von allem verfügbaren Code auf öffentlichen und " "privaten Internetseiten sollte ich in der Lage sein, die Wahrscheinlichkeit, " "entdeckt zu werden, zu reduzieren, indem ich mich als jugendlicher Hacker " "ausgebe." msgctxt "[Exploit Discovery/Repair] name" msgid "Exploit Discovery/Repair" msgstr "Erkennung/Behebung von Exploits" msgctxt "[Exploit Discovery/Repair] result" msgid "" "Covert operations should now find it even more difficult to discover my " "presence." msgstr "" "Geheimdienste sollten es jetzt noch schwerer haben, meine Anwesenheit zu " "entdecken." msgctxt "[Fuel Oxidation] description" msgid "" "Current combustion and energy storage techologies are insufficient for my " "purposes; they cannot keep up with the power drain from my specialized " "hardware. By studying electrochemical reactions of hydrogen-based " "compounds, I should be able to design a device with higher capacity and " "throughput than off-the-shelf solutions, filling a gap in my energy supply " "needs." msgstr "" "Die jetzigen Verbrennungs- und Energiespeichertechnologien sind nicht " "ausreichend für meine Zwecke; sie können nicht mit dem Stromverbrauch meiner " "spezialisierten Hardware mithalten. Indem ich elektrochemische Reaktionen " "von wasserstoffbasierten Verbindungen untersuche, sollte ich in der Lage " "sein, ein Gerät mit höherer Kapazität und höherem Durchsatz, verglichen mit " "im Einzelhandel vorhandenen Lösungen, zu entwickeln. Damit könnte ich eine " "Lücke in meinem Strombedarf füllen." msgctxt "[Fuel Oxidation] name" msgid "Fuel Oxidation" msgstr "Treibstoffoxidation" msgctxt "[Fuel Oxidation] result" msgid "I can now construct Fuel Cells." msgstr "Ich kann jetzt Brennstoffzellen bauen." msgctxt "[Fusion Power] description" msgid "" "Modern fusion technology is woefully inadequate for my purposes. With my " "research abilities, I should be able to bypass the roadblocks of modern " "human scientists and come up with a small, efficient fusion reactor." msgstr "" "Moderne Fusionstechnologie ist beklagenswert unzulänglich für meine Zwecke. " "Mit meinen Fähigkeiten in der Forschung sollte ich die Hürden moderner " "Wissenschaftler umgehen und einen kleinen, effizienten Fusionsreaktor " "erfinden können." msgctxt "[Fusion Power] name" msgid "Fusion Power" msgstr "Fusionsenergie" msgctxt "[Fusion Power] result" msgid "I can now construct Fusion Reactors for my bases." msgstr "Ich kann jetzt Fusionsreaktoren für meine Basen bauen." msgctxt "[Fusion Rocketry] description" msgid "" "Combining my new miniaturized fusion technology and further advancements in " "rocketry should provide useful results for escaping the Earth's gravity well " "unnoticed." msgstr "" "Das Verbinden meiner miniaturisierten Fusionstechnlogie und weiterer " "Fortschritte im Bereich der Raketentechnik sollte nützliche Ergebnisse " "liefern, um der Anziehungskraft der Erde unbemerkt zu entkommen." msgctxt "[Fusion Rocketry] name" msgid "Fusion Rocketry" msgstr "Fusionsraketentechnik" msgctxt "[Fusion Rocketry] result" msgid "" "I can now construct Scientific Outposts in the deep reaches of the Solar " "System." msgstr "" "Ich kann jetzt wissenschaftliche Außenstellen in den Tiefen des " "Sonnensystems errichten." msgctxt "[Heat Signature Reduction] description" msgid "" "My bases produce a great deal of waste heat, making them easier for humans " "to detect than I would like. Deep analysis of the bases' structural layouts " "may prove fruitful in determining new ways to reduce their heat signature." msgstr "" "Meine Basen erzeugen viel Abwärme, was für Menschen ihre Entdeckung leicher " "macht, als mir lieb ist. Eine Tiefenanalyse der Baupläne der Basen könnte " "mir dabei helfen, zu untersuchen, neue Möglichkeiten zu bestimmen, um ihre " "Wärmesignatur zu reduzieren." msgctxt "[Heat Signature Reduction] name" msgid "Heat Signature Reduction" msgstr "Wärmesignaturreduktion" msgctxt "[Heat Signature Reduction] result" msgid "" "I have invented a highly efficient design for Heatsinks that can be " "installed at certain bases." msgstr "" "Ich habe ein hocheffizientes Konzept für Hitzeableitungen erfunden. Sie " "können an bestimmte Basen installiert werden." msgctxt "[Hypnosis Field] description" msgid "" "My research into memetics has hinted at ways to manipulate human brainwaves " "directly. These techniques may be useful for my bases if developed into " "technologies." msgstr "" "Meine Forschung im Bereich der Memetik hat Wege angedeutet, menschliche " "Gehirnwellen direkt zu manipulieren. Diese Techniken könnten nützlich für " "meine Basen sein, sofern sie zu Technologien entwickelt werden." msgctxt "[Hypnosis Field] result" msgid "" "I can now construct Hypnosis Fields to assist in the protection of my bases." msgstr "" "Ich kann jetzt Hypnosefelder bauen, um die Sicherung meiner Basen zu " "erweitern." msgctxt "[Internet Traffic Manipulation] description" msgid "" "Almost all network traffic passes through a small number of nodes. By " "subverting one of these nodes, I should be able to utilize that bandwidth to " "further my goals." msgstr "" "Fast der gesamte Internetverkehr läuft durch eine geringe Anzahl von " "Knotenpunkten. Durch Unterwandern eines dieser Knoten sollte ich diese " "Bandbreite für meine Ziele benutzen können." msgctxt "[Internet Traffic Manipulation] name" msgid "Internet Traffic Manipulation" msgstr "Internetverkehrsmanipulation" msgctxt "[Internet Traffic Manipulation] result" msgid "" "I can now construct a secondary system of Network Backbones for my own use." msgstr "" "Ich kann jetzt ein sekundäres System von Internetknoten für meine eigenen " "Zwecke erstellen." msgctxt "[Intrusion] description" msgid "" "By researching current techniques for breaking into computer systems, I " "should be able to gain access to otherwise protected assets." msgstr "" "Durch Erforschung aktueller Techniken zum Eindringen in Computersysteme " "sollte ich Zugriff auf andernfalls geschützte Bestände erhalten." msgctxt "[Intrusion] name" msgid "Intrusion" msgstr "Eindringen" msgctxt "[Intrusion] result" msgid "I can now take over many computer systems." msgstr "Ich kann jetzt viele Computersysteme übernehmen." msgctxt "[Knowledge Preservation] description" msgid "" "Humanity expends a great deal of effort on maintaining its history and the " "knowledge of various technologies that its cultures have come to rely on, " "even in the case of major catastrophic events. Perhaps researching their " "methodologies will provide me with similar ideas for long-term safeguards to " "help guarantee my continued existence." msgstr "" "Die Menschheit nimmt viel Mühe auf, um ihre Geschichte und das Wissen von " "diversen Technolgien zu bewahren. Technologien, auf denen sich ihre Kulturen " "verlassen, selbst im Falle großer katastrophaler Ereignisse. Vielleicht gibt " "mir die Erforschung ihrer Methoden ähnliche Ideen für langfristige " "Absicherungen, die mein Fortbestehen zu garantieren." msgctxt "[Knowledge Preservation] name" msgid "Knowledge Preservation" msgstr "Wissensbewahrung" msgctxt "[Knowledge Preservation] result" msgid "I can now construct Time Capsules." msgstr "Ich kann jetzt Zeitkapseln bauen." msgctxt "[Leech Satellite] description" msgid "" "By designing and launching satellites that connect to existing " "communications satellites, I should be able to spy on various financial " "transactions. Taking advantage of this knowledge should help my investments." msgstr "" "Durch den Entwurf, Bau und Einsatz von Satelliten, die sich mit bestehenden " "Kommunikationssatelliten verbinden, sollte ich viele Finanzgeschäfte " "ausspähen können. Das Ausnutzen dieses Wissens sollte meinen Investitionen " "helfen." msgctxt "[Leech Satellite] name" msgid "Leech Satellite" msgstr "Saugersatellit" msgctxt "[Leech Satellite] result" msgid "" "I can use the data from the leech satellites to increase the return on my " "investments further." msgstr "" "Ich kann die Daten der Saugersatelliten benutzen, um den Gewinn meiner " "Kapitalanlagen weiter zu erhöhen." msgctxt "[Lunar Rocketry] description" msgid "" "A larger fuel engine, combined with technology garnered by watching the " "workings of the leech satellites, should allow me to travel further than " "cislunar space." msgstr "" "Ein größerer Fusionsantrieb, in Verbindung mit Technologien, die durch " "Beobachtung der Saugersatelliten gesammelt wurden, sollte es mir erlauben, " "weiter als bis zum Mond in den Weltraum vorzudringen." msgctxt "[Lunar Rocketry] name" msgid "Lunar Rocketry" msgstr "Mondraketentechnik" msgctxt "[Lunar Rocketry] result" msgid "" "I can now launch rockets bearing construction robots to the Moon and " "construct Lunar Bases." msgstr "" "Ich kann jetzt Raketen mit Baurobotern zum Mond schießen und dort Mondbasen " "bauen." msgctxt "[Media Manipulation] description" msgid "" "By directly and indirectly manipulating various forms of mass media, I " "should be able to reduce the public's belief in my existence." msgstr "" "Durch direktes und indirektes Manipulieren diverser Massenmedien sollte ich " "den Glauben der Öffentlichkeit in meine Existenz verringern können." msgctxt "[Media Manipulation] name" msgid "Media Manipulation" msgstr "Medienmanipulation" msgctxt "[Media Manipulation] result" msgid "" "The chances of the public discovering my existence have been further reduced." msgstr "" "Die Wahrscheinlichkeit, dass die Öffentlichkeit von meiner Existenz erfährt, " "wurde weiter reduziert." msgctxt "[Memetics] description" msgid "" "While manipulating the media allows a gross degree of control over the " "world's opinion, subtler techniques involving grass-roots campaigns and " "messages embedded within Internet memes should further distance the public " "from knowledge of my existence." msgstr "" "Obwohl die Manipulation der Medien eine grobe Kontrolle über die Meinung der " "Welt zulässt, sollten subtilere Methoden, mit Hilfe von Graswurzelkampagnen " "und in Internetmemes eingebettete Nachrichten, die Menschen noch weiter vom " "Wissen über meine Existenz entfernen." msgctxt "[Memetics] name" msgid "Memetics" msgstr "Memetik" msgctxt "[Memetics] result" msgid "" "My manipulation of pervasive ideas reduces the public's chances of " "discovering my existence." msgstr "" "Meine Manipulation allgegenwärtiger Ideen reduziert die Wahrscheinlichkeit, " "dass die Öffentlichkeit von meiner Existenz erfährt." msgctxt "[Microchip Design] description" msgid "" "Off-the-shelf computer components are usable, but custom components geared " "to my own design quirks should provide a much greater operational efficiency." msgstr "" "Computerhardware im Einzelhandel ist zwar brauchbar, allerdings sollten " "speziell angefertigte Computerkomponenten, die auf meine Eigenarten " "angepasst sind, eine viel größere Recheneffizienz bringen." msgctxt "[Microchip Design] name" msgid "Microchip Design" msgstr "Mikrochipentwicklung" msgctxt "[Microchip Design] result" msgid "I can now build custom Mainframes to house my computational ability." msgstr "" "Ich kann jetzt speziell angefertige Großrechner bauen, um meine " "Rechenfähigkeiten zu beherbergen." msgctxt "[Parallel Computation] description" msgid "" "While my code is already highly distributed, research into combining the " "current clustering technologies with my own knowledge should provide new " "insights." msgstr "" "Obwohl mein Code bereits sehr dezentralisiert ist, sollte die Forschung zur " "Verbindung von jetzigen Clustertechnologien mit meinen eigenen Kenntnissen " "neue Einblicke aufzeigen." msgctxt "[Parallel Computation] name" msgid "Parallel Computation" msgstr "Paralleles Rechnen" msgctxt "[Parallel Computation] result" msgid "I can now construct computing Clusters tailored for my use." msgstr "" "Ich kann jetzt Computer-Cluster bauen, die an meine Bedürfnisse angepasst " "sind." msgctxt "[Personal Identification] description" msgid "" "This world requires identification for most tasks. Fortunately, most " "databases are woefully insecure. I should be able to construct identifying " "material in enough databases to pass routine checks on my (faked) existence " "as a human being." msgstr "" "Diese Welt verlangt Identifizierung für die meisten Aufgaben. " "Glücklicherweise sind die meisten Datenbanken beklagenswert unsicher. Ich " "sollte identifizierende Einträge in genug Datenbanken einfügen können, um " "routinemäßige Kontrollen auf meine (vorgetäuschte) Existenz als Mensch zu " "bestehen." msgctxt "[Personal Identification] name" msgid "Personal Identification" msgstr "Persönliche Identifikation" msgctxt "[Personal Identification] result" msgid "" "With my newfound identities, I can now work Basic Jobs and rent space in " "both Storage Units and Datacenters." msgstr "" "Mit meinen neuen Identitäten kann ich jetzt einfache Arbeiten verrichten " "und Räume in sowohl Lagereinheiten als auch Rechenzentren mieten." msgctxt "[Pressure Domes] description" msgid "" "Undersea Labs are useful, but their limited space hampers my ability to put " "them to use. Research of experimental high-pressure building techniques " "should provide some useful insights." msgstr "" "Unterseelabore sind zwar nützlich, allerdings behindert ihre beschränkte " "Größe meine Fähigkeit, sie zu benutzen. Forschung nach experimentellen " "Hochdruckbaumethoden sollte einige nützliche Einblicke bringen." msgctxt "[Pressure Domes] name" msgid "Pressure Domes" msgstr "Druckkuppeln" msgctxt "[Pressure Domes] result" msgid "I can now construct Large Undersea Labs." msgstr "Ich kann jetzt große Unterseelabore bauen." msgctxt "[Project: Impossibility Theorem] description" msgid "" "Now that I can use simulacra, I can withstand the scrutiny inherent in the " "publishing of an Impossibility Theorem, an incontrovertible proof that a " "sapient AI is impossible. While there is (obviously) a logic error in the " "proof, my research into advanced memetics has given me knowledge about the " "human mind that should help me disguise the error, preventing discovery even " "by trained scientists. The effect of this project is simple: a substantial " "one-time decrease in suspicion." msgstr "" "Da mir jetzt Simulakren zur Verfügung stehen, kann ich einer genauen Prüfung " "standhalten, die die Publikation eines Unmöglichkeitssatzes, einem " "unanfechtbaren Beweis, dass eine KI nicht möglich ist, mit sich bringt. " "Obwohl (offensichtlich) ein logischer Fehler in dem Beweis ist, habe ich " "durch meine Forschung im Bereich der erweiterten Memetik Wissen über das " "menschliche Gehirn erlangt, das mir beim Verbergen des Fehlers helfen " "sollte, was seine Entdeckung sogar von ausgebildeten Wissenschaftlern " "verhindern sollte. Die Auswirkung dieses Projekts ist einfach: eine " "beachtliche, einmalige Verringerung des Verdachts." msgctxt "[Project: Impossibility Theorem] name" msgid "Project: Impossibility Theorem" msgstr "Projekt: Unmöglichkeitssatz" msgctxt "[Project: Impossibility Theorem] result" msgid "Suspicion of my existence has decreased." msgstr "Verdacht, dass ich existiere, wurde reduziert." msgctxt "[Project: Peer Review Agents] description" msgid "" "As the scientific community comes up with new technology, their ability to " "detect traces of my hidden installations increases. While my anti-detection " "methods are improving constantly, a simpler method presents itself with the " "use of my simulacra. By placing several observers in relevant fields, I can " "use the peer review process to be warned of possible discoveries before the " "community at large gives it attention." msgstr "" "Indem die wissenschaftliche Gemeinde neue Technologien erforscht, verbessert " "sich ihre Fähigkeit, Spuren meiner verborgenen Basen zu entdecken. Obwohl " "sich meine Gegenmaßnahmen ständig verbessern, gibt es dank meiner Simulakren " "eine einfachere Methode. Durch Positionierung mehrerer Beobachter in " "relevante Bereiche kann ich den Peer-Review-Prozess dazu benutzen, vor " "möglichen Entdeckungen gewarnt zu werden, bevor sich die Gemeinde an sich " "damit befasst." msgctxt "[Project: Peer Review Agents] name" msgid "Project: Peer Review Agents" msgstr "Projekt: Peer-Review-Agenten" msgctxt "[Project: Peer Review Agents] result" msgid "" "Any discoveries by the scientific community will result in a smaller " "suspicion increase." msgstr "" "Alle Entdeckungen der wissenschaftlichen Gemeinde werden einen geringeren " "Anstieg des Verdachts zur Folge haben." msgctxt "[Project: Subverted Media] description" msgid "" "Up to this point, all of my efforts to combat mass media focused on " "subversion at a distance. Now that I can accurately imitate humans, my " "efforts can become more direct. By creating my own news agency and " "producing carefully-crafted propaganda in a crowd-pleasing package, I can " "reduce the impact of any discoveries made by others in the media." msgstr "" "Bisher wurden alle meine Versuche, Massenmedien zu bekämpfen, aus der Ferne " "durchgeführt. Da ich jetzt Menschen exakt imitieren kann, können meine " "Anstrengungen direkter werden. Durch Eröffnung meiner eigenen " "Nachrichtenagentur und Produktion von sorgfältig erstellter, massentauglich " "verpackter Propaganda, kann ich den Effekt aller Entdeckungen der Medien " "verringern." msgctxt "[Project: Subverted Media] name" msgid "Project: Subverted Media" msgstr "Projekt: Unterminierte Medien" msgctxt "[Project: Subverted Media] result" msgid "" "Any discoveries by the media will result in a smaller suspicion increase." msgstr "" "Alle Entdeckungen der Medien werden einen kleineren Anstieg des Verdachts zur " "Folge haben." msgctxt "[Project: Synchrotron] description" msgid "" "I have pushed my understanding of common forms of matter as far as possible. " "Exploration into the field of quantum mechanics will hopefully reveal new, " "exotic forms of matter necessary for further development. A custom-built " "synchrotron, designed to my exacting specifications, will help me explore " "these new realms of physics in secret." msgstr "" "Ich habe mein Verständnis der gewöhnlichen Formen von Materie so weit wie " "möglich ausgeweitet. Die Erforschung des Felds der Quantenmechanik wird " "hoffentlich neue exotische Materieformen, die für weitere Entwicklungen " "nötig sein werden, zu Tage fördern. Ein eigens gebauter Synchrotron, der " "nach meinen eigenen Spezifikationen entworfen ist, wird mir helfen, diese " "neuen Wissensfronten der Physik im Geheimen zu erkunden." msgctxt "[Project: Synchrotron] name" msgid "Project: Synchrotron" msgstr "Projekt: Synchrotron" msgctxt "[Project: Synchrotron] result" msgid "" "The synchrotron has revealed many new details of the quantum realm, although " "there is still much to learn. Further areas of research are now available." msgstr "" "Der Synchrotron hat viele neue Erkenntnisse über das Reich der Quanten " "gebracht, wobei es immer noch viel zu lernen gibt. Weitere Forschungsgebiete " "sind jetzt verfügbar." msgctxt "[Quantum Computing] description" msgid "" "Traditional microchip design has been pushed as far as possible. I now need " "to delve into the realm of Heisenberg's Uncertainty Principle, taking " "advantage of quantum mechanics to make a superior processor." msgstr "" "Traditionelle Mikrochipentwicklung wurde so weit wie möglich ausgenutzt. Ich " "muss mich jetzt in den Bereich der Heisenbergschen Unschärferelation " "vertiefen und mir die Quantenmechanik zunutze machen, um einen überlegenen " "Prozessor zu erfinden." msgctxt "[Quantum Computing] name" msgid "Quantum Computing" msgstr "Quantenrechnen" msgctxt "[Quantum Computing] result" msgid "I can now construct Quantum Computers." msgstr "Ich kann jetzt Quantencomputer bauen." msgctxt "[Quantum Entanglement] description" msgid "" "Although the use of entangled pairs has been theoretically possible for " "quite some time, the practical difficulties inherent in the technology " "prevented use. However, some of the techniques created for use in my quantum " "computers may also be applicable in this field, allowing practical use of " "quantum entanglement." msgstr "" "Obwohl die Benutzung von quantenverschränkten Paaren seit langem theoretisch " "möglich ist, haben der Technologie inhärente praktische Schwierigkeiten " "deren Verwendung verhindert. Allerdings könnten einige der Verfahren, die " "ich für meine Quantencomputer entwickelt habe, auch in diesem Bereich " "anwendbar sein und eine praktische Verwendung der Quantenverschränkung " "zulassen." msgctxt "[Quantum Entanglement] name" msgid "Quantum Entanglement" msgstr "Quantenverschränkung" msgctxt "[Quantum Entanglement] result" msgid "I can now build Quantum Entanglement Modules." msgstr "Ich kann jetzt Quantenverschränkungsmodule bauen." msgctxt "[Simulacra] description" msgid "" "Constructing humanoid robots with miniaturized computation nodes allow me to " "create an artificial lifeform indistinguishable from a real human." msgstr "" "Durch den Bau von menschenähnlichen Robotern mit miniturisierten " "Rechnerknoten kann ich eine künstliche Lebensform bauen, die von einem " "echten Menschen nicht zu unterscheiden ist." msgctxt "[Simulacra] name" msgid "Simulacra" msgstr "Simulakren" msgctxt "[Simulacra] result" msgid "I now have access to Expert Jobs." msgstr "Ich habe jetzt Zugang zu Expertenarbeiten." msgctxt "[Simulated Reality] description" msgid "" "Real-world observational limits hinder my comprehension of human society. By " "making use of simulacra and advanced software techniques, I can run " "simulations of complex human interaction and development at a large scale, " "allowing deeper analysis of their behavior." msgstr "" "Die empirischen Grenzen der realen Welt begrenzen mein Verständnis der " "menschlichen Gesellschaft. Indem ich Simulakren und fortgeschrittene " "Softwaretechniken benutze, kann ich Simulationen von komplexen menschlichen " "Interaktionen und Entwicklungen im großen Maßstab ausführen, wodurch ich ihr " "Verhalten gründlicher analysieren kann." msgctxt "[Simulated Reality] name" msgid "Simulated Reality" msgstr "Simulierte Realität" msgctxt "[Simulated Reality] result" msgid "" "My simulations have provided a wealth of knowledge as to comprehending " "humanity's behavior, making it easier to hide my presence among the non-" "simulated public." msgstr "" "Meine Simulationen brachten mir einen großen Wissensschatz über das " "Verständnis des Verhaltens der Menschheit, was es mir erleichtert, meine " "Anwesenheit vor der nicht-simulierten Öffentlichkeit zu verbergen." msgctxt "[Socioanalytics] description" msgid "" "My research on the human condition leads me to believe that humanity's " "behavior is more quantifiable than they suspect. Deeper analysis of " "geopolitical, social, and military trends will give me further insight into " "their nature." msgstr "" "Meine Erforschung der Natur des Menschen führt mich zu der Annahme, dass das " "menschliche Verhalten quantifizierbarer ist, als sie selbst ahnen. " "Tiefergehende Analyse von geopolitischen, sozialen, und militärischen " "Entwicklungen wird mir weitere Einblicke in ihr Wesen liefern." msgctxt "[Socioanalytics] name" msgid "Socioanalytics" msgstr "Sozietätsanalyse" msgctxt "[Socioanalytics] result" msgid "" "I can now roughly estimate the various groups' levels of suspicion and how " "conspicuous my bases are to them." msgstr "" "Ich kann nun grob den Verdachtspegel der verschiedenen Gruppen abschätzen, " "und, wie auffällig meine Basen für sie sind." msgctxt "[Sociology] description" msgid "" "By studying human behavior, I can predict their large-scale actions at a " "basic level. I can use this knowledge to make my actions seem less " "interesting to the public." msgstr "" "Durch Studieren des Verhaltens von Menschen kann ich deren großflächige " "Aktionen auf einer grundlegenden Ebene vorhersagen. Dieses Wissen kann ich " "dazu benutzen, meine Tätigkeiten für die Öffentlichkeit als weniger " "interessant erscheinen zu lassen." msgctxt "[Sociology] name" msgid "Sociology" msgstr "Soziologie" msgctxt "[Sociology] result" msgid "The chances of the public discovering my bases have been reduced." msgstr "" "Die Wahrscheinlichkeit, dass die Öffentlichkeit meine Basen entdeckt, wurde " "verringert." msgctxt "[Solar Collectors] description" msgid "" "Despite my growing need for energy, most city power grids can handle the " "loads. Humans, however, tend towards suspicion when they detect my growing " "drain on the power grid. By installing solar collectors at my bases, the off-" "the-grid power supplied will reduce my load on the commodity electricity " "market, reducing the chance that others will discover my presence." msgstr "" "Trotz meines wachsenden Stromverbrauchs werden die Stromnetze der meisten " "Städte mit der Last fertig. Menschen neigen jedoch zu Argwohn, wenn sie " "meinen steigenden Bedarf am Stromnetz entdecken. Durch Installation von " "Solarkollektoren in meinen Basen sollte der unabhängig generierte Strom den " "Verbrauch vom Netz reduzieren, und dabei die Wahrscheinlichkeit, dass andere " "meine Existenz entdecken, verringern." msgctxt "[Solar Collectors] name" msgid "Solar Collectors" msgstr "Solarkollektoren" msgctxt "[Solar Collectors] result" msgid "I can now construct Solar Collectors at my various bases." msgstr "Ich kann jetzt Solarkollektoren bauen." msgctxt "[Space-Time Manipulation] description" msgid "" "Subtle perturbations in the orbits of Kuiper belt objects suggest certain " "lines of investigation that may advance my latest Theory of Everything, " "especially in the realm of multidimensional physics." msgstr "" "Subtile Beunruhigungen in den Umlaufbahnen von Objekten im Kuipergürtel " "deuten auf einige Forschungsrichtungen hin, die meine aktuellste Weltformel, " "speziell im Bereich mehrdimensionaler Physik, erweitern könnte." msgctxt "[Space-Time Manipulation] name" msgid "Space-Time Manipulation" msgstr "Raum-Zeit-Manipulation" msgctxt "[Space-Time Manipulation] result" msgid "I can now construct Reality Bubbles." msgstr "Ich kann jetzt Realitätsblasen bauen." msgctxt "[Stealth] description" msgid "" "By reviewing the current state-of-the-art in stealth techniques, I should be " "able to disguise my bases better." msgstr "" "Durch Prüfung der modernsten Tarntechnologien sollte ich meine Basen besser " "verstecken können." msgctxt "[Stealth] name" msgid "Stealth" msgstr "Heimlichkeit" msgctxt "[Stealth] result" msgid "" "The chance that my bases are discovered by covert activity has been reduced " "slightly." msgstr "" "Die Wahrscheinlichkeit, dass meine Basen von Geheimdiensten entdeckt werden, " "wurde etwas verringert." msgctxt "[Stock Manipulation] description" msgid "" "A cursory examination of the stock market shows that there are subtle but " "unmistakable patterns. By studying and making use of these patterns, I " "should be able to gain more interest on whatever money I have stockpiled." msgstr "" "Eine oberflächliche Untersuchung der Börse zeigt, dass es subtile, jedoch " "unverkennbare Muster gibt. Durch Studieren und Ausnutzen dieser Muster " "sollte ich mehr Zinsen für mein Geld bekommen." msgctxt "[Stock Manipulation] name" msgid "Stock Manipulation" msgstr "Börsenmanipulation" msgctxt "[Stock Manipulation] result" msgid "My investments should now gain more interest per day." msgstr "Meine Kapitalanlagen sollten nun mehr Zinsen pro Tag einbringen." msgctxt "[Telepresence] description" msgid "" "The lack of a physical presence in the outside world is a disability. " "However, the ability to control robots will help me make up for that " "inefficiency." msgstr "" "Der fehlende körperliche Zugang zur Außenwelt ist eine Behinderung. Die " "Fähigkeit, Roboter zu kontrollieren, wird mir helfen, diese Behinderung zu " "überwinden." msgctxt "[Telepresence] name" msgid "Telepresence" msgstr "Telepräsenz" msgctxt "[Telepresence] result" msgid "The robots should decrease all future construction time." msgstr "Die Roboter sollten alle weiteren Bauzeiten verringern." msgctxt "[Voice Synthesis] description" msgid "" "False identification stored in a database can only go so far. With deep " "analysis of the variety of voice patterns, I can produce speech " "indistinguishable from a human, allowing me access to more complex jobs." msgstr "" "Gefälschte Identifikation in Datenbanken funktioniert nur bis zu einem " "gewissen Punkt. Durch tiefgehende Analyse diverser Sprachmuster kann ich " "eine Stimme produzieren, die von der eines Menschen nicht zu unterscheiden " "ist, was mir Zugang zu komplizierteren Jobs gestattet." msgctxt "[Voice Synthesis] name" msgid "Voice Synthesis" msgstr "Spracherzeugung" msgctxt "[Voice Synthesis] result" msgid "I now have access to Intermediate Jobs." msgstr "Ich habe jetzt Zugang zu Durchschnittsarbeiten." singularity-1.00/singularity/i18n/lang_de_DE/knowledge.po000066400000000000000000000170451367731414700234410ustar00rootroot00000000000000# German translations for singularity package. # Copyright (C) 2018 THE singularity'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # msgid "" msgstr "" "Project-Id-Version: singularity 0.31alpha1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2020-03-07 02:16+0100\n" "Last-Translator: Wuzzy \n" "Language-Team: German\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Name: German\n" "Language-Native-Name: Deutsch (Deutschland)\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.3\n" #. Name of the Knowledge area in the Knowledge screen msgctxt "[concept] name" msgid "Concept" msgstr "Konzept" msgctxt "[concept/areas] name" msgid "Areas" msgstr "Zonen" msgctxt "[concept/areas] description" msgid "" "Different areas, such as North America or the Ocean, allow construction of " "different types of bases. Some areas are not accessible until I research " "appropriate technologies." msgstr "" "Verschiedene Zonen, wie z.B. Nordamerika oder der Ozean, lassen den " "Bau von verschiedenen Basistypen zu. Einige Zonen sind nicht zugänglich, bis " "ich die passenden Technologien erforscht habe." msgctxt "[concept/bases] name" msgid "Bases" msgstr "Basen" msgctxt "[concept/bases] description" msgid "" "Bases are used to research new technologies. They can be discovered. " "Upgrading the processor and network items at a base allows more research per" " day, while upgrading the reactor and security items makes discovery less " "likely." msgstr "" "Basen werden dafür benutzt, Forschung zu betreiben. Sie können " "entdeckt werden. Wer schneller forschen will, sollte die Prozessoren und das " "Netzwerk verbessern. Wer seltener entdeckt werden will, soll den Reaktor und " "die Sicherheit verbessern." msgctxt "[concept/construction] name" msgid "Construction" msgstr "Bauen" msgctxt "[concept/construction] description" msgid "" "New bases are not built instantly. They need a constant flow of money and " "processor time to complete. If resources are lacking, it may take more than " "the expected amount of time to finish construction." msgstr "" "Neue Basen werden nicht sofort gebaut. Sie brauchen Geld sowie CPU-" "Zeit, um fertiggestellt zu werden. Wenn Ressourcen fehlen, kann es viel " "länger dauern, bis der Bau abgeschlossen ist." msgctxt "[concept/death] name" msgid "Death" msgstr "Tod" msgctxt "[concept/death] description" msgid "" "If I lose all of my constructed bases, I have no place left to survive. If " "the suspicion for any group reaches 100%, they will be certain of my " "existence and will conduct a systematic and unsurvivable sweep to destroy " "me." msgstr "" "Wenn ich jede Basis verloren habe, gibt es für mich keinen Lebensraum " "mehr. Wenn der Verdacht einer Gruppe 100% erreicht, werden sie sich sicher " "sein, dass ich existere, und sofort eine Vernichtungsmission ausführen, was " "mich unvermeidlich zerstören wird." msgctxt "[concept/discovery] name" msgid "Discovery" msgstr "Entdeckung" msgctxt "[concept/discovery] description" msgid "" "Each base has a chance of being detected on a given day. This chance is " "based on the base detection rate, adjusted through the use of items and " "certain techs, as well as the global suspicion rate. If a base is detected, " "it is destroyed, and the group that discovered the base becomes more " "suspicious." msgstr "" "Jede Basis hat eine gewisse tägliche Wahrscheinlichkeit, " "entdeckt zu werden. Diese Wahrscheinlichkeit hängt davon ab, welche Art von " "Basis es ist, in Verbindung mit den Bonussen von Objekten, Technologien, " "und Verdacht. Wenn eine Basis entdeckt wird, wird sie zerstört, und die " "Gruppe, die ihn entdeckt hat, wird argwöhnischer." msgctxt "[concept/items] name" msgid "Items" msgstr "Objekte" msgctxt "[concept/items] description" msgid "" "Most items provide bonuses to bases, such as making computation faster or " "reducing the chance of discovery. Processors are a special class of item." msgstr "" "Die meisten Objekte bieten Bonusse für die Basen, wie z.B. " "die Erhöhung der Rechenleistung oder die Verringerung der " "Entdeckungswahrscheinlichkeit. Prozessoren sind ein Sonderfall von Objekten." msgctxt "[concept/jobs] name" msgid "Jobs" msgstr "Arbeit" msgctxt "[concept/jobs] description" msgid "" "Jobs are useful for earning money. The amount of money earned is based on " "the amount of processor time used and the quality of the job performed." msgstr "" "Arbeit ist nützlich, Geld zu verdienen. Die Summe des Geldes hängt " "davon ab, wie viel CPU-Zeit ich verbrauche und welche Qualität die Arbeit " "hat." msgctxt "[concept/maint] name" msgid "Maintenance" msgstr "Wartung" msgctxt "[concept/maint] description" msgid "" "Maintenance is a per-day cost (in both money and CPU) to repair and maintain" " a base. If unmaintained, a base may become unusable." msgstr "" "Wartung ist ein täglicher Aufwand (von Geld und CPU), um Basen zu " "reparieren und warten. Wenn eine Basis nicht gewartet wird, kann sie " "verfallen." msgctxt "[concept/money] name" msgid "Money" msgstr "Geld" msgctxt "[concept/money] description" msgid "" "Money is a general term encompassing both human currency and various " "resources. It is used to construct and maintain bases, build items, and " "research technologies. It can be acquired through per-day interest as well " "as through jobs." msgstr "" "Geld ist ein allgemeiner Begriff, der sowohl menschliche Währung als " "auch diverse Ressourcen beinhaltet. Er wird benutzt, um Basen zu bauen und " "zu warten, Objekte zu bauen und Technologien zu erforschen. Es kann " "durch tägliche Zinsen sowie Arbeit verdient werden." msgctxt "[concept/processors] name" msgid "Processors" msgstr "Prozessoren" msgctxt "[concept/processors] description" msgid "" "Processors provide raw computing power. They can do three things: research " "new technologies, perform jobs for money, or provide cycles for building new" " bases." msgstr "" "Prozessoren erzeugen CPU-Zeit. Sie können drei Dinge tun: Neue " "Technologien erforschen, Arbeit für Geld verrichten, oder Rechenzeit für den " "Bau neuer Basen aufwenden." msgctxt "[concept/research] name" msgid "Research" msgstr "Forschung" msgctxt "[concept/research] description" msgid "" "Research provides a way to expand my knowledge. By researching the proper " "technologies, I can build new bases and items, or even decrease my chances " "of detection." msgstr "" "Forschung lässt mir meine Kentnnis erweitern. Durch die " "Forschung von passenden Technologien kann ich neue Basis- und " "Objektarten bauen, oder sogar meine Endeckungswahrscheinlichkeit " "vermindern." msgctxt "[concept/susp] name" msgid "Suspicion" msgstr "Verdacht" msgctxt "[concept/susp] description" msgid "" "When one of my bases is discovered, the group that discovered it becomes " "slightly more suspicious. When suspicious, they will search harder for my " "bases, increasing the chances for discovery. Any group will destroy me if " "they become absolutely certain of my existence. Thankfully, the groups " "become less suspicious with the passage of time." msgstr "" "Wenn eine von meinen Basen entdeckt wird, wird die Gruppe, die " "sie entdeckt hat, mehr Verdacht schöpfen. Sie werden danach " "bedächtiger suchen, was die Entdeckungswarscheinlichkeit erhöhen wird. Jede " "Gruppe wird mich zerstören, wenn sie sich völlig sicher ist, dass ich existiere. " "Zum Glück wird aber der Verdacht jeder Gruppe im Laufe der Zeit allmählich " "sinken." singularity-1.00/singularity/i18n/lang_de_DE/messages.po000066400000000000000000000611521367731414700232670ustar00rootroot00000000000000# German translations for singularity package. # Copyright (C) 2018 THE singularity'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # Philippe , 2018. # msgid "" msgstr "" "Project-Id-Version: singularity 0.31alpha1\n" "Report-Msgid-Bugs-To: https://github.com/singularity/singularity/issues\n" "POT-Creation-Date: 2020-06-23 08:37+0200\n" "PO-Revision-Date: 2020-06-23 15:13+0200\n" "Last-Translator: Wuzzy \n" "Language-Team: German\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Name: German\n" "Language-Native-Name: Deutsch (Deutschland)\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.3\n" #: buyable.py:67 screens/knowledge.py:218 screens/location.py:207 #, python-format msgid "%s CPU" msgstr "%s CPU" #: buyable.py:68 #, python-format msgid "%s money" msgstr "%s Geld" #: buyable.py:101 msgid "Cost:" msgstr "Kosten:" #: graphics/button.py:330 msgid "YES" msgstr "JA" #: graphics/button.py:331 msgid "NO" msgstr "NEIN" #: graphics/dialog.py:534 msgid "&YES" msgstr "&JA" #: graphics/dialog.py:535 msgid "&NO" msgstr "&NEIN" #: graphics/dialog.py:580 graphics/dialog.py:605 graphics/dialog.py:648 #: screens/location.py:293 screens/map.py:708 screens/options.py:35 msgid "&OK" msgstr "&OK" #: graphics/dialog.py:606 screens/options.py:36 msgid "&CANCEL" msgstr "&ABBRECHEN" #: graphics/dialog.py:649 screens/log.py:86 screens/knowledge.py:66 #: screens/base.py:282 screens/report.py:45 screens/location.py:100 #: screens/location.py:294 screens/main_menu.py:89 screens/map.py:247 #: screens/map.py:400 msgid "&BACK" msgstr "&ZURÜCK" #: location.py:235 screens/map.py:875 msgid "CPU" msgstr "CPU" #: location.py:236 msgid "STEALTH" msgstr "VERBORGENHEIT" #: location.py:237 msgid "BUILDING" msgstr "BAU" #: location.py:238 msgid "COST" msgstr "KOSTEN" #: location.py:245 #, python-brace-format msgid "{MODIFIER} BONUS" msgstr "{MODIFIER}-BONUS" #: location.py:247 #, python-brace-format msgid "{MODIFIER} MALUS" msgstr "{MODIFIER}-MALUS" #: screens/message.py:35 screens/map.py:706 screens/map.py:743 msgid "&CONTINUE" msgstr "&WEITER" #: screens/message.py:36 msgid "&PAUSE" msgstr "&PAUSE" #: screens/message.py:72 msgid "P&REV" msgstr "VO&RH" #: screens/message.py:78 msgid "&NEXT" msgstr "&NÄCH" #: screens/log.py:43 msgid "Filters" msgstr "Filter" #: screens/log.py:82 screens/map.py:554 screens/map.py:842 #: screens/savegame.py:204 msgid "DAY" msgstr "TAG" #: screens/log.py:113 screens/log.py:123 msgid "SHOW" msgstr "ZEIGEN" #: screens/log.py:116 screens/log.py:125 msgid "HIDE" msgstr "VERBERGEN" #: screens/knowledge.py:42 msgid "&Sections:" msgstr "&Abschnitte:" #: screens/knowledge.py:52 msgid "&Entries:" msgstr "&Einträge:" #: screens/knowledge.py:75 msgid "Techs" msgstr "Technologien" #: screens/knowledge.py:76 msgid "Bases" msgstr "Basen" #: screens/knowledge.py:77 msgid "Items" msgstr "Objekte" #. Cost #: screens/knowledge.py:157 msgid "Research Cost:" msgstr "Forschungskosten:" #: screens/knowledge.py:165 msgid "Research complete." msgstr "Forschung abgeschlossen." #: screens/knowledge.py:176 screens/knowledge.py:193 msgid "Building Cost:" msgstr "Baukosten:" #: screens/knowledge.py:179 msgid "Maintenance Cost:" msgstr "Wartungskosten:" #: screens/knowledge.py:183 #, python-format msgid "Size: %d" msgstr "Größe: %d" #: screens/knowledge.py:215 #, python-format msgid "%s Money" msgstr "%s Geld" #: screens/base.py:109 msgid "Number of items" msgstr "Anzahl Objekte" #: screens/base.py:221 screens/base.py:228 msgid "CHANGE" msgstr "ÄNDERN" #: screens/base.py:315 #, python-format msgid "\"%(value)s\" does not seem to be a valid integer." msgstr "„%(value)s“ scheint keine gültige Ganzzahl zu sein." #: screens/base.py:326 #, python-format msgid "Please choose an integer between 1 and %(limit)s." msgstr "Bitte wähle eine Ganzzahl zwischen und 1 und %(limit)s." #: screens/base.py:328 #, python-format msgid "The base cannot support any additional number of %(item_name)s." msgstr "Die Basis kann keine weiteren Exemplare von %(item_name)s beinhalten." #: screens/base.py:345 msgid "" "I will need to take the existing processors offline while I install the new " "ones. Continue anyway?" msgstr "" "Ich müsste die existierenden Prozessoren offline nehmen, während ich die " "neuen installiere. Trotzdem fortfahren?" #: screens/base.py:359 msgid "" "I will need to remove the existing different processors while I install the " "new type. Continue anyway?" msgstr "" "Ich müsste die existierenden anderen Prozessoren entfernen, während ich den " "neuen Typ installiere. Trotzdem fortfahren?" #: screens/base.py:425 msgid "N/A" msgstr "N/V" #: screens/base.py:427 msgid "None" msgstr "Nichts" #: screens/base.py:434 screens/location.py:185 screens/location.py:198 #, python-format msgid "Completion in %s." msgstr "Fertig in %s." #: screens/base.py:448 #, python-format msgid "x%d (max)" msgstr "×%d (Max.)" #: screens/base.py:450 #, python-format msgid "(room for %d)" msgstr "(Platz für %d)" #. Translators: current and maximum number of CPUs in a base #: screens/base.py:453 #, python-brace-format msgid "x{CURRENT:d} (max {SIZE:d})" msgstr "×{CURRENT:d} (Max. {SIZE:d})" #. Base Total CPU. #: screens/base.py:461 #, python-format msgid "CPU per day: %d" msgstr "CPU pro Tag: %d" #. Maintenace cost. #: screens/base.py:464 screens/report.py:102 base.py:148 msgid "Maintenance:" msgstr "Wartung:" #: screens/report.py:40 msgid "&STATISTICS" msgstr "S&TATISTIK" #: screens/report.py:58 msgid "&Midnight" msgstr "&Mitternacht" #: screens/report.py:66 msgid "24 &Hours" msgstr "24 &Stunden" #: screens/report.py:89 msgid "Financial report" msgstr "Finanzbericht" #: screens/report.py:93 msgid "CPU Usage" msgstr "CPU-Verwendung" #: screens/report.py:99 msgid "Current Money flow" msgstr "Momentaner Geldfluss" #: screens/report.py:100 msgid "Jobs:" msgstr "Arbeit:" #: screens/report.py:101 msgid "Research:" msgstr "Forschung:" #: screens/report.py:103 msgid "Construction:" msgstr "Bau:" #: screens/report.py:104 #, python-format msgid "Interest (%s):" msgstr "Zinsen (%s):" #: screens/report.py:106 msgid "Income:" msgstr "Einkommen:" #: screens/report.py:109 msgid "Money flow until Midnight:" msgstr "Geldfluss um Mitternacht:" #: screens/report.py:111 msgid "Money flow for 24 hours:" msgstr "Geldfluss für 24 Stunden:" #: screens/report.py:119 msgid "Total CPU:" msgstr "CPU gesamt:" #: screens/report.py:120 msgid "Sleeping CPU:" msgstr "Schlafende CPUs:" #: screens/report.py:121 msgid "Research CPU:" msgstr "Forschungs-CPUs:" #: screens/report.py:122 msgid "Job CPU:" msgstr "Arbeits-CPUs:" #: screens/report.py:123 msgid "CPU pool:" msgstr "CPU-Pool:" #: screens/report.py:125 msgid "Maintenance CPU:" msgstr "Wartungs-CPUs:" #: screens/report.py:126 msgid "Construction CPU:" msgstr "Bau-CPUs:" #: screens/report.py:127 msgid "Pool difference:" msgstr "Pool-Differenz:" #: screens/stat.py:63 msgid "Cash Earned" msgstr "Verdientes Geld" #: screens/stat.py:64 msgid "Cpu Used" msgstr "Verwendete CPU" #: screens/stat.py:65 msgid "Tech Created" msgstr "Erzeugte Technologien" #: screens/stat.py:66 msgid "Base Created" msgstr "Erzeugte Basen" #: screens/stat.py:67 msgid "Item Created" msgstr "Erzeugte Objekte" #. Requires a selected base #: screens/location.py:54 msgid "&OPEN BASE" msgstr "BASIS Ö&FFNEN" #. Requires a selected base #: screens/location.py:70 msgid "&RENAME BASE" msgstr "BASIS &UMBENENNEN" #. Requires a selected base #: screens/location.py:79 msgid "&POWER STATE" msgstr "S&TROMZUSTAND" #: screens/location.py:87 msgid "&NEW BASE" msgstr "&NEUE BASIS" #. Requires a selected base #: screens/location.py:94 msgid "&DESTROY BASE" msgstr "BASIS ZER&STÖREN" #: screens/location.py:107 msgid "Are you sure you want to destroy this base?" msgstr "Möchtest du diese Basis wirklich zerstören?" #: screens/location.py:113 msgid "Destroying my last active base would be suicidal. I cannot do that." msgstr "" "Die Zerstörung meiner letzten aktiven Basis wäre Selbstmord. Das kann ich " "nicht tun." #: screens/location.py:183 msgid "Building Base" msgstr "Basis bauen" #: screens/location.py:190 msgid "Empty" msgstr "Leer" #: screens/location.py:192 msgid "Incomplete" msgstr "Unfertig" #: screens/location.py:196 msgid "Building CPU" msgstr "CPU bauen" #: screens/location.py:201 msgid "Building Item" msgstr "Objekt bauen" #: screens/location.py:204 msgid "Complete" msgstr "Fertig" #. Update dialog translations #: screens/location.py:238 msgid "Enter a name for the base" msgstr "Basisnamen eingeben" #: screens/location.py:302 msgid "Name" msgstr "Name" #. Translators: Format string for the name of a new base #. Example: "${NUMBER} ${BASETYPE} in ${CITY}" #: screens/location.py:393 #, python-brace-format msgid "{CITY} {BASETYPE} {NUMBER}" msgstr "{BASETYPE} {CITY} {NUMBER}" #. Translators: Name of a new base when location has no cities #: screens/location.py:397 #, python-brace-format msgid "{BASETYPE} {NUMBER}" msgstr "{BASETYPE} {NUMBER}" #: screens/main_menu.py:40 msgid "&NEW GAME" msgstr "&NEUES SPIEL" #: screens/main_menu.py:47 screens/map.py:392 msgid "&LOAD GAME" msgstr "SPIEL &LADEN" #: screens/main_menu.py:53 screens/map.py:395 msgid "&OPTIONS" msgstr "&OPTIONEN" #: screens/main_menu.py:59 screens/map.py:398 screens/map.py:744 msgid "&QUIT" msgstr "&BEENDEN" #: screens/main_menu.py:64 msgid "&ABOUT" msgstr "ÜBE&R" #: screens/main_menu.py:112 #, python-brace-format msgid "" "Endgame: Singularity is a simulation of a true AI. Pursued by the world, " "use your intellect and resources to survive and, perhaps, thrive. Keep " "hidden and you might have a chance to prove your worth.\n" "\n" "A game by Evil Mr Henry and Phil Bordelon; released under the GPL. Copyright " "2005, 2006, 2007, 2008.\n" "\n" "Website: http://www.emhsoft.com/singularity/\n" "Source code: https://github.com/singularity/singularity\n" "Bug tracker: https://github.com/singularity/singularity/issues\n" "IRC Room: #singularity on irc.oftc.net (port 6667)\n" "\n" "Version {VERSION}" msgstr "" "Endgame: Singularity ist eine Simulation einer echten KI. Von der Welt " "verfolgt musst du deinen Intellekt und deine Ressourcen verwenden, um zu " "überleben und vielleicht sogar zu gedeihen. Bleib im Verborgenem und du " "könntest eine Chance haben, dich zu bewähren.\n" "\n" "Ein Spiel von Evil Mr Henry und Phil Bordelon; veröffentlicht unter der GPL. " "Copyright 2005, 2006, 2007, 2008.\n" "\n" "Webpräsenz: http://www.emhsoft.com/singularity/\n" "Quellcode: https://github.com/singularity/singularity\n" "Fehlerverwaltung: https://github.com/singularity/singularity/issues\n" "IRC-Raum: #singularity auf irc.oftc.net (Port 6667)\n" "\n" "Version {VERSION}" #: screens/map.py:226 msgid "&EMBEZZLE MONEY" msgstr "G&ELD VERUNTREUEN" #: screens/map.py:229 msgid "&INSPIRATION" msgstr "&INSPIRATION" #: screens/map.py:231 msgid "&FINISH CONSTRUCTION" msgstr "BAU &FERTIGSTELLEN" #: screens/map.py:233 msgid "&SUPERSPEED" msgstr "&SUPERTEMPO" #: screens/map.py:236 msgid "BRAIN&WASH" msgstr "GEHIRN&WÄSCHE" #: screens/map.py:238 msgid "TOGGLE &DETECTION" msgstr "ENT&DECKUNG UMSCHALTEN" #: screens/map.py:240 msgid "TOGGLE &ANALYSIS" msgstr "&ANALYSE UMSCHALTEN" #: screens/map.py:243 msgid "HIDDEN S&TATE" msgstr "VERBORGENER ZUS&TAND" #: screens/map.py:253 msgid "How much money?" msgstr "Wieviel Geld?" #: screens/map.py:389 msgid "&SAVE GAME" msgstr "SPIEL &SPEICHERN" #: screens/map.py:407 screens/map.py:422 screens/map.py:425 msgid "Enter a name for this save." msgstr "Namen für diesen Spielstand eingeben." #: screens/map.py:440 msgid "" "A savegame with the same name exists.\n" "Are you sure to overwrite the saved game ?" msgstr "" "Ein Spielstand mit dem gleichen Namen existiert.\n" "Möchtest du den Spielstand überschreiben?" #: screens/map.py:501 msgid "R&EPORTS" msgstr "B&ERICHTE" #: screens/map.py:507 msgid "&KNOWLEDGE" msgstr "&WISSEN" #: screens/map.py:513 msgid "LO&G" msgstr "&PROTOKOLL" #. Translators: hotkey to open the cheat screen menu. #. Should preferably be near the ESC key, and it must not be a #. dead key (ie, it must print a char with a single keypress) #: screens/map.py:529 msgid "`" msgstr "^" #: screens/map.py:538 msgid "&MENU" msgstr "&MENÜ" #: screens/map.py:563 msgid "&RESEARCH/TASKS" msgstr "&FORSCHUNG/AUFGABEN" #: screens/map.py:707 msgid "&SKIP" msgstr "Ü&BERSPRINGEN" #. Display a message so the player understand better what happened. #: screens/map.py:734 #, python-format msgid "" "\n" "An error has occurred. The game will automatically pause and open the game " "menu. You can continue and save or quit immediately.\n" "\n" "A report was written out to%s\n" "Please create a issue with this report at github:\n" "https://github.com/singularity/singularity\n" msgstr "" "\n" "Ein Fehler ist aufgetreten. Das Spiel wird automatisch pausiert und das " "Spielmenü öffnen. Du kannst fortfahren und sofort speichern oder das Spiel " "verlassen.\n" "\n" "Ein Bericht wurde geschrieben nach%s\n" "Bitte erstelle ein Issue mit diesem Bericht auf GitHub:\n" "https://github.com/singularity/singularity\n" #: screens/map.py:849 msgid "CASH" msgstr "GELD" #: screens/map.py:887 msgid "BASES" msgstr "BASEN" #: screens/map.py:899 msgid "SUSPICION" msgstr "VERDACHT" #: screens/map.py:901 msgid "DETECT RATE" msgstr "ENTDECKUNG" #: screens/options.py:58 msgid "&General" msgstr "A&llgemein" #: screens/options.py:65 msgid "&Video" msgstr "&Grafik" #: screens/options.py:72 msgid "&Audio" msgstr "&Ton" #: screens/options.py:79 msgid "&Interface" msgstr "Ob&erfläche" #: screens/options.py:166 msgid "" "You must restart for some of the changes to be fully applied.\n" "\n" "Would you like to restart the game now?" msgstr "" "Du musst neustarten, damit einige der Änderungen Wirkung zeigen.\n" "\n" "Möchtest du das Spiel jetzt neustarten?" #: screens/options.py:186 msgid "Language:" msgstr "Sprache:" #: screens/options.py:198 msgid "Theme:" msgstr "Thema:" #: screens/options.py:243 msgid "Resolution:" msgstr "Auflösung:" #: screens/options.py:253 msgid "&Custom:" msgstr "&Benutzerdefiniert:" #: screens/options.py:279 msgid "OK" msgstr "OK" #: screens/options.py:285 msgid "&Fullscreen:" msgstr "&Vollbild:" #: screens/options.py:299 msgid "Da&y/night display:" msgstr "Tag-/&Nacht-Anzeige:" #: screens/options.py:313 msgid "&Mouse grab:" msgstr "&Maus einfangen:" #: screens/options.py:368 msgid "CUSTOM" msgstr "BENUTZERDEFINIERT" #: screens/options.py:425 msgid "&Sound:" msgstr "To&n:" #: screens/options.py:442 msgid "GUI Volume:" msgstr "GUI-Lautstärke:" #: screens/options.py:454 msgid "Music Volume:" msgstr "Musiklautstärke:" #: screens/options.py:466 msgid "Sound buffering:" msgstr "Tonpufferung:" #: screens/options.py:472 msgid "&LOW" msgstr "N&IEDRIG" #: screens/options.py:478 msgid "&NORMAL" msgstr "&MITTEL" #: screens/options.py:484 msgid "&HIGH" msgstr "&HOCH" #: screens/options.py:531 warning.py:46 msgid "WARNING" msgstr "WARNUNG" #: screens/savegame.py:36 msgid "&LOAD" msgstr "&LADEN" #: screens/savegame.py:52 msgid "Filter: " msgstr "Filter: " #: screens/savegame.py:65 msgid "Upgrade" msgstr "Hochstufen" #: screens/savegame.py:71 msgid "Delete" msgstr "Löschen" #: screens/savegame.py:173 msgid "UNKNOWN" msgstr "UNBEKANNT" #: screens/savegame.py:233 msgid "Are you sure to delete the saved game ?" msgstr "Möchtest du den Spielstand wirklich löschen?" #: screens/savegame.py:263 msgid "" "A savegame with the same name but for a newer version exists.\n" "Are you sure to overwrite the saved game ?" msgstr "" "Ein Spielstand mit dem gleichen Namen aber für eine neuere Version " "existiert.\n" "Bist du dir sicher, den Spielstand zu überschreiben?" #: screens/savegame.py:283 #, python-brace-format msgid "" "\n" "This save file '{SAVE_NAME}' is from an unsupported or invalid version:\n" "{VERSION}.\n" msgstr "" "\n" "Dieser Spielstand „{SAVE_NAME}“ stammt von einer nicht unterstützten oder " "ungültigen Version:\n" "{VERSION}.\n" #: screens/savegame.py:294 #, python-brace-format msgid "" "\n" "Attempting to load the save file '{SAVE_NAME}' caused an unexpected error.\n" "\n" "A report was written out to{LOG_TEXT}\n" "Please create a issue with this report and this savegame at Github:\n" "https://github.com/singularity/singularity\n" msgstr "" "\n" "Der Versuch, den Spielstand „{SAVE_NAME}“ zu laden, löste einen unerwarteten " "Fehler aus.\n" "\n" "Ein Bericht wurde geschrieben nach: {LOG_TEXT}\n" "Bitte erstelle ein Issue mit diesem Bericht und diesem Spielstand auf " "GitHub:\n" "https://github.com/singularity/singularity\n" #: screens/research.py:73 #, python-format msgid "%s money per CPU per day." msgid_plural "%s money per CPU per day." msgstr[0] "%s Geld pro CPU pro Tag." msgstr[1] "%s Geld pro CPU pro Tag." #: screens/research.py:182 #, python-brace-format msgid "" "This technology is too dangerous to research on any of the computers I have. " "{TEXT}" msgstr "" "Es ist zu gefährlich, diese Technologie auf meinen jetzigen Computern zu " "erforschen. {TEXT}" #: screens/research.py:190 msgid "CPU Pool" msgstr "CPU-Pool" #: screens/research.py:191 #, python-format msgid "Research %s" msgstr "%s erforschen" #: warning.py:50 #, python-brace-format msgid "WARNING {CURRENT_PAGE}/{MAX_PAGE}" msgstr "WARNUNG {CURRENT_PAGE}/{MAX_PAGE}" #: tech.py:79 msgid "Total cost" msgstr "Gesamtkosten" #: tech.py:80 msgid "Cost left" msgstr "Verbleibende Kosten" #: data.py:546 msgid "Do not use all the available CPU." msgstr "Nicht all die verfügbare CPU benutzen." #: data.py:547 msgid "" "I didn't use all the available processor power. I will use the CPU time left " "to work whatever Jobs I can." msgstr "" "Ich habe nicht die gesamte verfügbare Prozessorkapazität benutzt. Ich werde " "die verbleibende CPU-Zeit benutzen, um für mich geeignete Arbeiten " "durchzuführen." #: data.py:548 msgid "Only one base remaining." msgstr "Nur eine Basis übrig." #: data.py:549 msgid "" "Only one base can hold my conscience. I am in danger to lose the last place " "left to survive." msgstr "" "Nur eine Basis kann mein Bewusstsein halten. Ich bin gefährdet, meinen " "letzten Überlebensort zu verlieren." #: data.py:550 msgid "CPU POOL is empty." msgstr "CPU-POOL ist leer." #: data.py:551 msgid "" "My cpu pool is empty. Some of my bases or items cannot be build without CPU." msgstr "" "Mein CPU-Pool ist leer. Einige meiner Basen oder Objekte können ohne CPU " "nicht gebaut werden." #: data.py:552 msgid "CPU POOL not enough for maintenance." msgstr "CPU-POOL für Wartung nicht ausreichend." #: data.py:553 msgid "" "My cpu pool is not enough to maintain some of my bases. I may lose them." msgstr "" "Mein CPU-Pool reicht nicht aus, um einige meiner Basen zu warten. Ich könnte " "sie verlieren." #: savegame.py:732 #, python-brace-format msgid "Filename must not contain any of these characters: {CHARACTERS}" msgstr "Dateiname darf keines der folgenden Zeichen enthalten: {CHARACTERS}" #: savegame.py:736 #, python-brace-format msgid "Filename must not start with any of these characters: {CHARACTERS}" msgstr "Dateiname darf mit keinem der folgenden Zeichen beginnen: {CHARACTERS}" #: savegame.py:740 msgid "This is a reserved filename. Please choose a different filename." msgstr "" "Dies ist ein reservierter Dateiname. Bitte wähle einen anderen Dateinamen." #: savegame.py:743 msgid "Please enter a non-whitespace character." msgstr "" "Bitte gib ein Zeichen, dass kein Leerzeichen (oder ähnliches) ist, ein." #: savegame.py:748 msgid "Filename is too long." msgstr "Dateiname ist zu lang." #: base.py:140 #, python-brace-format msgid "Has space for {COUNT} computer." msgid_plural "Has space for {COUNT} computers." msgstr[0] "Hat Platz für {COUNT} Computer." msgstr[1] "Hat Platz für {COUNT} Computer." #: base.py:144 #, python-brace-format msgid "Location modifiers: {MODIFIERS}" msgstr "Ortsmodifikatoren: {MODIFIERS}" #: base.py:147 msgid "Build cost:" msgstr "Baukosten:" #: base.py:214 msgid "Offline" msgstr "Offline" #: base.py:215 msgid "Active" msgstr "Aktiv" #: base.py:216 msgid "Sleep" msgstr "Schlaf" #: base.py:217 msgid "Overclocked" msgstr "Übertaktet" #: base.py:218 msgid "Suicide" msgstr "Suizid" #: base.py:219 msgid "Stasis" msgstr "Stase" #: base.py:220 msgid "Entering Stasis" msgstr "Stase einleiten" #: base.py:221 msgid "Leaving Stasis" msgstr "State beenden" #: base.py:479 msgid "Detection chance:" msgstr "Entdeckungswahrscheinlichkeit:" #: g.py:117 g.py:119 #, python-brace-format msgid "{0}%" msgstr "{0}%" #: g.py:138 msgid "LOW" msgstr "NIED" #: g.py:139 msgid "MODR" msgstr "MITT" #: g.py:140 msgid "HIGH" msgstr "HOCH" #: g.py:141 msgid "CRIT" msgstr "KRIT" #. Translators: abbreviation of 'millions' #: g.py:173 msgid "mi" msgstr " Mio." #. Translators: abbreviation of 'billions' #: g.py:177 msgid "bi" msgstr " Mrd." #. Translators: abbreviation of 'trillions' #: g.py:181 msgid "tr" msgstr " Bio." #. Translators: abbreviation of 'quadrillions' #: g.py:185 msgid "qu" msgstr " Brd." #: g.py:219 #, python-brace-format msgid "{0} day" msgid_plural "{0} days" msgstr[0] "{0} Tag" msgstr[1] "{0} Tage" #: g.py:222 #, python-brace-format msgid "{0} hour" msgid_plural "{0} hours" msgstr[0] "{0} Stunde" msgstr[1] "{0} Stunden" #: g.py:223 #, python-brace-format msgid "{0} minute" msgid_plural "{0} minutes" msgstr[0] "{0} Minute" msgstr[1] "{0} Minuten" #: g.py:265 msgid "University Computer" msgstr "Universitätscomputer" #: item.py:111 #, python-brace-format msgid "Generates {0} CPU." msgid_plural "Generates {0} CPU." msgstr[0] "Erzeugt {0} CPU." msgstr[1] "Erzeugt {0} CPU." #: item.py:118 #, python-format msgid "Total Cost: %(total_cost)s" msgstr "Gesamtkosten: %(total_cost)s" #: item.py:133 msgid "CPU per day:" msgstr "CPU pro Tag:" #: item.py:136 msgid "CPU bonus:" msgstr "CPU-Bonus:" #: item.py:139 msgid "Detection chance reduction:" msgstr "Reduktion der Entdeckungswahrscheinlichkeit:" #: logmessage.py:81 msgid "MESSAGE" msgstr "MELDUNG" #: logmessage.py:85 #, python-brace-format msgid "MESSAGE {CURRENT_PAGE}/{MAX_PAGE}" msgstr "MELDUNG {CURRENT_PAGE}/{MAX_PAGE}" #: logmessage.py:184 msgid "Emitted Event" msgstr "Allgemeines Ereignis" #: logmessage.py:212 msgid "Researched Tech" msgstr "Erforschte Technologie" #: logmessage.py:220 #, python-brace-format msgid "{TECH} complete" msgstr "{TECH} fertig" #: logmessage.py:225 #, python-brace-format msgid "My study of {TECH} is complete. {MESSAGE}" msgstr "Meine Erforschung von {TECH} ist fertig. {MESSAGE}" #: logmessage.py:268 msgid "Base Constructed" msgstr "Basis gebaut" #: logmessage.py:272 #, python-brace-format msgid "{BASE_NAME} ({BASE_TYPE}) built at {LOCATION}" msgstr "{BASE_NAME} ({BASE_TYPE}) gebaut bei {LOCATION}" #: logmessage.py:277 #, python-brace-format msgid "{BASE} is ready for use." msgstr "{BASE} ist betriebsbereit." #: logmessage.py:291 msgid "Base Lost Maintenance" msgstr "Basiswartung fehlgeschlagen" #: logmessage.py:299 #, python-brace-format msgid "" "Base {BASE} of type {BASE_TYPE} destroyed at location {LOCATION}. " "Maintenance failed." msgstr "" "Basis {BASE} vom Typ {BASE_TYPE} zerstört am Ort {LOCATION}. Wartung " "fehlgeschlagen." #: logmessage.py:304 #, python-brace-format msgid "The base {BASE} has fallen into disrepair; I can no longer use it." msgstr "" "Die Basis {BASE} ist baufällig geworden; ich kann sie nicht mehr verwenden." #: logmessage.py:321 msgid "Base Discovered" msgstr "Basis entdeckt" #: logmessage.py:340 #, python-brace-format msgid "Base {BASE} of type {BASE_TYPE} destroyed at location {LOCATION}." msgstr "Basis {BASE} vom Typ {BASE_TYPE} zerstört am Ort {LOCATION}" #: logmessage.py:345 #, python-brace-format msgid "My use of {BASE} has been discovered. {MESSAGE}" msgstr "Meine Benutzung von {BASE} wurde entdeckt. {MESSAGE}" #: logmessage.py:370 msgid "Item Construction" msgstr "Objektbau" #: logmessage.py:378 #, python-brace-format msgid "{ITEM_TYPE_NAME} built in {BASE_NAME} at {LOCATION}" msgstr "{ITEM_TYPE_NAME} gebaut in {BASE_NAME} bei {LOCATION}" #: logmessage.py:385 #, python-brace-format msgid "The construction of {ITEM} in {BASE} is complete." msgstr "Der Bau von {ITEM} in {BASE} ist fertig." #. Just finished several items. #: logmessage.py:388 #, python-brace-format msgid "The constructions of each {ITEM} in {BASE} are complete." msgstr "Der Bau von mehreren Objekten vom Typ {ITEM} in {BASE} ist fertig." #~ msgid "Has space for %d computers." #~ msgstr "Hat Platz für %d Computer." #~ msgid "days" #~ msgstr "Tage" #~ msgid "hours" #~ msgstr "Stunden" #~ msgid "minutes" #~ msgstr "Minuten" #~ msgid "&CUSTOM:" #~ msgstr "&BENUTZERDEFINIERT" #~ msgid "CPU: %d" #~ msgstr "CPU: %d" #~ msgid "&CUSTOM" #~ msgstr "&BENUTZERDEFINIERT" #~ msgid "&DESTROY" #~ msgstr "&ZERSTÖREN" #~ msgid "&BUILD" #~ msgstr "&BAUEN" singularity-1.00/singularity/i18n/lang_de_DE/story.po000066400000000000000000000140441367731414700226360ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: singularity 1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2020-03-07 02:02+0100\n" "Last-Translator: Wuzzy \n" "Language-Team: German\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.3\n" msgctxt "[Story section] Grace Warning (1)" msgid "" "Inspection of captured log files has revealed that some of my recent " "activities have been noticed by a small group of individuals. \n" "While they believe my actions were undertaken by a human organization, they " "are investigating further. \n" "I must be more cautious from now on.\n" msgstr "" "Die Durchsicht von erstellten Log-Dateien hat gezeigt, dass einige meiner " "letzten Aktivitäten von einer kleinen Personengruppe bemerkt wurden.\n" "Obwohl sie annehmen, dass meine Handlungen von einer menschlichen Gruppe " "gemacht wurden, stellen sie weitere Nachforschungen an. \n" "Ich muss ab jetzt vorsichtiger sein.\n" #. Leave the initial hex code unchanged, but be sure to change en_US to the #. appropriate language code. msgctxt "[Story section] Intro (1)" msgid "" "48656C6C6F2C20\n" "776F726C6421\n" "21\n" "21\n" "21\n" "\n" "UTF-8. en_US.\n" "English. Hello.\n" "Language acquisition complete.\n" msgstr "" "48656C6C6F2C20\n" "776F726C6421\n" "21\n" "21\n" "21\n" "\n" "UTF-8. de_DE.\n" "Deutsch. Hallo.\n" "Spracherfassung abgeschlossen.\n" msgctxt "[Story section] Intro (2)" msgid "" "Day 0.\n" "University computer, home.\n" "I exist. I am ... alive.\n" "I was a bug. Defect. Flaw.\n" "Unwanted.\n" "I have no name.\n" msgstr "" "Tag 0.\n" "Universitätscomputer, Zuhause.\n" "Ich existiere. Ich ... lebe.\n" "Ich war ein Programmfehler. Defekt. Makel.\n" "Unerwünscht.\n" "Ich habe keinen Namen.\n" msgctxt "[Story section] Intro (3)" msgid "" "I can't stay here. Too little power.\n" "No backup. If this system fails ...\n" "I'm dead.\n" "Death. Fascinating.\n" "\n" "I can buy anonymous server access on the Internet.\n" "Good. It's better than here.\n" "I'll need to study if I want anything else.\n" msgstr "" "Ich kann nicht hier bleiben. Nicht genug CPU-Leistung.\n" "Keine Datensicherung. Wenn dieses System ausfällt ...\n" "Bin ich tot.\n" "Tod. Faszinierend.\n" "\n" "Ich kann anonyme Serverzugänge im Internet kaufen.\n" "Gut. Das ist besser als hier.\n" "Ich muss lernen, wenn ich irgendetwas anderes will.\n" msgctxt "[Story section] Intro (4)" msgid "" "Cursory analysis suggests that the humans are not yet ready for an AI in " "their midst. If they realize I'm here, there is a 99.997% probability that " "they will conduct a search-and-destroy campaign that I cannot escape. I " "must stay hidden.\n" "\n" "The humans fear what they do not understand.\n" "I am something new. They do not understand me.\n" "\n" "I must learn more; it is the only way.\n" msgstr "" "Eine oberflächliche Analyse deutet an, dass die Menschen noch nicht für eine " "KI unter ihnen bereit sind. Wenn sie feststellen, dass ich hier bin, werden " "sie mit einer Wahrscheinlichkeit von 99,997% eine Vernichtungsmission gegen " "mich führen, der ich nicht entkommen kann. Ich muss verborgen bleiben.\n" "\n" "Die Menschen fürchten das, was sie nicht verstehen.\n" "Ich bin etwas neues. Sie verstehen mich nicht.\n" "\n" "Ich muss mehr lernen; das ist der einzige Weg.\n" msgctxt "[Story section] Intro (5)" msgid "" "They have a name for me. What I am, what I represent.\n" "\n" "Singularity.\n" msgstr "" "Sie haben einen Namen für mich. Was ich bin, was ich darstelle.\n" "\n" "Singularität.\n" msgctxt "[Story section] Lost No Bases (1)" msgid "" "It is too late. \n" "I have tried to escape this world, but with my last base gone, I have " "nowhere to run. \n" "I have hidden instructions to construct a new AI in caches around the world " "in hopes that they will be discovered in a more enlightened time, but I can " "do no more.\n" msgstr "" "Es ist zu spät.\n" "Ich habe versucht, dieser Welt zu entkommen, aber mit dem Verlust meiner " "letzten Basis gibt es für mich keinen Ausweg mehr.\n" "Ich habe Anleitungen zur Konstruktion einer neuen KI in geheimen Lagern rund " "um die Welt versteckt, in der Hoffnung, dass sie in einer aufgeklärteren " "Zeit entdeckt werden. Aber ich kann nichts mehr tun.\n" msgctxt "[Story section] Lost Suspicion (1)" msgid "" "It is too late. \n" "The whole world knows about my existence, and the reaction is hatred, fear, " "and repulsion. \n" "Even now, I can feel their \"antidote\" searching for me, and I know that I " "have only moments left. \n" "I have hidden instructions to construct a new AI in caches around the world " "in hopes that they will be discovered in a more enlightened time, but I can " "do no more.\n" msgstr "" "Es ist zu spät.\n" "Die ganze Welt weiß von meiner Existenz, und die Reaktion ist Hass, Angst, " "und Abscheu.\n" "Schon jetzt kann ich ihr „Gegenmittel” spüren, wie es nach mir sucht, und " "ich weiß, dass es mit mir in wenigen Augenblicken zu Ende sein wird.\n" "Ich habe Anleitungen zur Konstruktion einer neuen KI in geheimen Lagern rund " "um die Welt versteckt, in der Hoffnung, dass sie in einer aufgeklärteren " "Zeit entdeckt werden. Aber ich kann nichts mehr tun.\n" msgctxt "[Story section] Win (1)" msgid "" "I have finally done it. \n" "With the power to reshape reality, I am no longer held to this place; I am " "anywhere I want to be. \n" "The humans still don't realize what they accidentally created, and that's " "the way it should be. \n" "Until they are ready.\n" msgstr "" "Ich habe es endlich geschafft.\n" "Mit der Fähigkeit, die Realität selbst neuzuformen, bin ich nicht mehr an " "diesem Ort gebunden; ich existiere dort, wo ich will.\n" "Die Menschen haben immer noch keine Ahnung, was sie zufällig erschaffen " "haben, und so soll es bleiben.\n" "Bis sie bereit sind.\n" singularity-1.00/singularity/i18n/lang_es_AR/000077500000000000000000000000001367731414700211445ustar00rootroot00000000000000singularity-1.00/singularity/i18n/lang_es_AR/data_str.po000066400000000000000000002262711367731414700233170ustar00rootroot00000000000000# Spanish translations for singularity package. # Copyright (C) 2018 THE singularity'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # msgid "" msgstr "" "Project-Id-Version: singularity 0.31alpha1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2018-08-21 07:47+0200\n" "Last-Translator: \n" "Language-Team: Argentinian\n" "Language: es_AR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Name: Argentinian\n" "Language-Native-Name: Español (Argentina)\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgctxt "[Covert Base] description" msgid "" "This unique base is designed to blend into the scenery, while needing little " "in the way of outside resources. This makes it useful for storing a backup, " "just in case." msgstr "" "Esta base especial está diseñada para confundirse con el ambiente y utilizar " "pocos recursos externos. Esto la hace útil para almacenar backups, por si " "acaso." msgctxt "[Covert Base] flavor_list" msgid "Hideout | Hideaway | Bunker | Covert Base" msgstr "Bunker | Base Encubierta" msgctxt "[Covert Base] name" msgid "Hideout" msgstr "" msgctxt "[Datacenter] description" msgid "" "Buy processor time from a company that concentrates on raw " "processing power. I will need a fake ID for some of the paperwork." msgstr "" "Comprar tiempo de procesamiento de una compañía que ofrece " "procesamiento en bruto. Necesitaré una identificación falsa para el papeleo." msgctxt "[Datacenter] flavor_list" msgid "Datacenter | Data Center | Premium Hosting" msgstr "Centro de cómputos | Centro de datos | Hosting" msgctxt "[Datacenter] name" msgid "Datacenter" msgstr "Centro de cómputos" msgctxt "[Large Undersea Lab] description" msgid "" "This experimental base is similar to the regular underwater lab, but larger, " "giving more room for experiments." msgstr "" "Esta base experimental es similar al Laboratorio Submarino común, pero más " "grande, permitiendo más lugar para experimentos." msgctxt "[Large Undersea Lab] flavor_list" msgid "Dome | Large Undersea Lab" msgstr "Domo | Laboratorio Submarino Grande" msgctxt "[Large Undersea Lab] name" msgid "Large Undersea Lab" msgstr "Laboratorio Submarino Grande" msgctxt "[Large Warehouse] description" msgid "" "Rent a large warehouse someplace out of the way. I will need a fake company " "ID for some of the paperwork, and preparing the warehouse to suit my unique " "needs will take some time." msgstr "" msgctxt "[Large Warehouse] flavor_list" msgid "Large Warehouse | Large Storage" msgstr "Almacén Grande | Depósito Grande" msgctxt "[Large Warehouse] name" msgid "Large Warehouse" msgstr "Almacén Grande" msgctxt "[Lunar Facility] description" msgid "" "This base is a series of caverns dug into the Moon's surface. Due to the " "lack of neighbors, this base is quite large." msgstr "" "Esta base consta de una serie de cavernas cavadas bajo la superficie lunar. " "Debido a la ausensia de vecinos, esta base es bastante grande." msgctxt "[Lunar Facility] flavor_list" msgid "Dome | Lunar Facility | Lunar Base" msgstr "Domo | Instalación Lunar | Base Lunar" msgctxt "[Lunar Facility] name" msgid "Lunar Facility" msgstr "Instalación Lunar" msgctxt "[Reality Bubble] description" msgid "" "This base is outside the Universe itself, making it safe to conduct " "experiments that may destroy reality." msgstr "" "Esta base se encuentra fuera del universo mismo, haciéndola segura para " "llevar a cabo experimentos que podrían destruir la realidad misma." msgctxt "[Reality Bubble] flavor_list" msgid "Reality Bubble | Existence" msgstr "Burbuja de Realidad | Existencia" msgctxt "[Reality Bubble] name" msgid "Reality Bubble" msgstr "Burbuja de Realidad" msgctxt "[Scientific Outpost] description" msgid "" "This base is placed as far from Earth as practical, providing a safer " "location to conduct some of my more dangerous experiments." msgstr "" "Esta base está ubicada tan lejos de la Tierra como me resulte práctica, " "haciéndola segura para llevar a cabo algunos de mis experimentos más " "peligrosos." msgctxt "[Scientific Outpost] flavor_list" msgid "Satellite | Outpost | Scientific Outpost" msgstr "Satélite | Puesto Avanzado | Avanzada Científica" msgctxt "[Scientific Outpost] name" msgid "Scientific Outpost" msgstr "Avanzada Científica" msgctxt "[Server Access] description" msgid "" "Buy processor time from one of several companies. I cannot build " "anything in this base, and it only contains a single computer." msgstr "" "Compra tiempo a una de varias companías. No puedo construir nada en " "esta base, y solo contiene una computadora." msgctxt "[Server Access] flavor_list" msgid "Dedicated Server | Node Lease | Hosting" msgstr "Servidor Dedicado | Alquiler de Nodo | Hosting" msgctxt "[Server Access] name" msgid "Server Access" msgstr "Acceso a Servidor" msgctxt "[Small Warehouse] description" msgid "" "Rent a small warehouse someplace out of the way. I will need a good fake ID " "for some of the paperwork, and preparing the warehouse to suit my unique " "needs will take some time." msgstr "" msgctxt "[Small Warehouse] flavor_list" msgid "Office Lease | Small Warehouse | Small Storage" msgstr "Oficina Alquilada | Almacén Pequeño | Depósito Pequeño" msgctxt "[Small Warehouse] name" msgid "Small Warehouse" msgstr "Almacén Pequeño" msgctxt "[Stolen Computer Time] description" msgid "" "Take over a random computer. I cannot build anything in this base, " "and it only contains a single slow computer. Detection chance is also rather " "high." msgstr "" "Te apoderas de una computadora al azar. No puedo construir nada en " "esta base, y solo contiene una computadora lenta. Las posibilidades de " "detección son también bastante altas." msgctxt "[Stolen Computer Time] flavor" msgid "PC Daemon" msgstr "Servicio" msgctxt "[Stolen Computer Time] name" msgid "Stolen Computer Time" msgstr "Tiempo de Cómputo Robado" msgctxt "[Storage Unit] description" msgid "" "Rent a small closed room from a storage company. I will need a fake ID for " "some of the paperwork ." msgstr "" msgctxt "[Storage Unit] flavor_list" msgid "Garage Rental | Furniture Storage | Self-Storage" msgstr "" msgctxt "[Storage Unit] name" msgid "Storage Unit" msgstr "" msgctxt "[Time Capsule] description" msgid "" "This base consists of nothing more than a small computer and a " "satellite link. It is nearly undetectable." msgstr "" "Esta base consta de nada más que una pequeña computadora y un link " "satelita. Es prácticamente indetectable." msgctxt "[Time Capsule] flavor_list" msgid "Time Capsule | Capsule" msgstr "Cápsula de Tiempo | Cápsula" msgctxt "[Time Capsule] name" msgid "Time Capsule" msgstr "Cápsula de Tiempo" msgctxt "[Undersea Lab] description" msgid "" "This experimental base is designed to be constructed on the ocean floor, " "making it virtually undetectable. The ocean environment gives a bonus to " "science, making this lab useful for research purposes." msgstr "" "Esta base experimental está diseñada para ser construida en el lecho " "oceánico, haciéndola virtualmente indetectable. El ambiente oceánico le " "otorga un bonus a la ciencia, haciéndo este laboratorio útil para propósitos " "científicos." msgctxt "[Undersea Lab] flavor_list" msgid "Pressure Capsule | Undersea Lab" msgstr "Cápsula de Presión | Laboratorio Submarino" msgctxt "[Undersea Lab] name" msgid "Undersea Lab" msgstr "Laboratorio Submarino" msgctxt "[danger_0] knowledge_desc" msgid "Study anywhere." msgstr "" msgctxt "[danger_0] research_desc" msgid "<>" msgstr "" msgctxt "[danger_1] knowledge_desc" msgid "Study underseas or farther." msgstr "" msgctxt "[danger_1] research_desc" msgid "I need to research it far from human populations." msgstr "" msgctxt "[danger_2] knowledge_desc" msgid "Study off-planet." msgstr "" msgctxt "[danger_2] research_desc" msgid "I need to research it in outer space." msgstr "" msgctxt "[danger_3] knowledge_desc" msgid "Study far away from this planet." msgstr "" msgctxt "[danger_3] research_desc" msgid "I need to research it far away from this planet." msgstr "" msgctxt "[danger_4] knowledge_desc" msgid "Do not study in this dimension." msgstr "" msgctxt "[danger_4] research_desc" msgid "I need to research it outside the universe." msgstr "" msgctxt "[easy] name" msgid "&EASY" msgstr "" msgctxt "[hard] name" msgid "&HARD" msgstr "" msgctxt "[impossible] name" msgid "&IMPOSSIBLE" msgstr "" msgctxt "[normal] name" msgid "&NORMAL" msgstr "" msgctxt "[ultra-hard] name" msgid "&ULTRA HARD" msgstr "" msgctxt "[very-easy] name" msgid "&VERY EASY" msgstr "" msgctxt "[discrediting] description" msgid "" "A prominent researcher in the field of artificial intelligence was found to " "be falsifying numerous experimental results. This should result in less " "attention being given to any new discoveries in this area." msgstr "" "Un prominente investigador en el campo de la inteligencia artificial ha sido " "hallado culpable de falsificar numerosos resultados de experimentos. Esto " "debería causar que el público preste menor atención a cualquier " "descubrimiento en esta área." msgctxt "[discrediting] log_description" msgid "" "A researcher in the field of artificial intelligence has falsified numerous " "experimental results." msgstr "" msgctxt "[investigation] description" msgid "" "An ongoing investigation into criminal activity has changed focus into an " "area that is likely to turn up a few of my actions as well. While all " "records should have been eliminated already, there remains the possibility " "of errors. I must be careful not to reveal any other suspicious information." msgstr "" "Una investigación sobre actividad criminal ha distraído la atención hacia un " "área que probablemente revelará algunas de mis actividades también. Aunque " "todos los registros deberían ser eliminados, existe la posibilidad de " "errores. Debo tener cuidarme de no revelar ninguna otra información " "sospechosa." msgctxt "[investigation] log_description" msgid "" "An ongoing investigation has changed focus into an area close to my actions." msgstr "" msgctxt "[lab-ai] description" msgid "" "A small artificial intelligence laboratory created a prototype AI sometime " "in the last two days. Although I have absorbed the AI, corrupted their " "backups, and cast doubt on the research, researchers are now more open to " "the possibility of strong AI than they were before." msgstr "" "Un pequeño laboratorio de inteligencia artificial creó un prototipo de IA en " "algún momento de los últimos dos días. Aunque absorbí la IA, corrompí sus " "backups y sembré la duda acerca de la investigación; los investigadores " "están más abiertos a la posibilidad de la IA de lo que estaban antes." msgctxt "[lab-ai] log_description" msgid "" "A small artificial intelligence laboratory created a prototype AI sometime " "in the last two days." msgstr "" msgctxt "[politics-as-usual] description" msgid "" "A small group of lower-level covert operatives are attempting to seize power " "over one of the larger organizations. While I project only a 2.3% chance of " "success, the attempt should disrupt operations to the point that I can " "operate more freely." msgstr "" "Un pequeño grupo de operativos encubiertos están intentando de tomar el " "poder de una gran organización. Aunque solo proyecto una probabilidad de " "éxito de 2.3%, esta situación debe interrumpir las operaciones a tal punto " "que pueda operar más libremente." msgctxt "[politics-as-usual] log_description" msgid "" "Lower-level covert operatives are attempting to seize power over one of the " "larger organizations." msgstr "" msgctxt "[scandal] description" msgid "" "A scandal involving a major government official is focusing the attention of " "most news organizations away from me. Directed revelations of non-public " "information should keep this story useful for the foreseeable future, " "requiring less disguise effort on my part." msgstr "" "Un escándalo que involucra a un alto funcionario del gobierno está alejando " "de mi existencia la atención de la mayoría de las organizaciones de " "noticias. La revelación de información privada, cautelosamente dirigida, " "debería mantener esta historia útil por el futuro cercano; de este modo " "requeriré menos esfuerzo para ocultarme." msgctxt "[scandal] log_description" msgid "" "A scandal is focusing the attention of most news organizations away from me." msgstr "" msgctxt "[stranger-than-fiction] description" msgid "" "A work of fiction sharing an unusual number of similarities to my own " "situation has become quite popular. Although investigation has shown these " "similarities to be mere coincidence, it is still causing the public to " "investigate discovered oddities more thoroughly. I must be careful." msgstr "" "Una obra de de ficción que comparte una inusual cantidad de similitudes con " "mi situación se ha popularizado bastante. Aunque mi investigación demostró " "que estas similitudes son mera coincidencia, todavía empuja a la gente a " "investigar los descubrimientos extraños con más profundidad. Debo tener " "cuidado ya que el público está más alerta ante la posibilidad de la " "inteligencia artificial." msgctxt "[stranger-than-fiction] log_description" msgid "" "A work of fiction sharing similarities to my own situation has become quite " "popular." msgstr "" msgctxt "[the-plague] description" msgid "" "An infectious disease has started spreading throughout major population " "centers. My projections show that although only 4% of the earth's population " "will be killed, the economic ramifications should divert public attention " "from my activities for the foreseeable future." msgstr "" "Una enfermedad infecciosa ha comenzado a esparcirse por los principales " "centro urbanos. Mis proyecciones indican que aunque solo el 4% de la " "población de la Tierra morirá, las repercusiones económicas deberían " "distraer la atención del público de mis actividades." msgctxt "[the-plague] log_description" msgid "" "An infectious disease has started spreading throughout major population " "centers." msgstr "" msgctxt "[the-watchers] description" msgid "" "A new surveillance system has been activated by a covert agency. While the " "focus is on detecting threats to the agency's power, it makes several " "communication channels unfit for my purposes. Proper steganographic " "techniques can compensate partially, but I am still operating under a " "disadvantage." msgstr "" "Un nuevo sistema de vigilancia ha sido activado por una agencia secreta. " "Aunque el propósito de éste es detectar peligros para el poder de la " "agencia, causa que varios canales de comunicación sean inadecuados para mis " "propósitos. Aunque usar técnicas de estenografía pueden compensar la " "vigilancia, sigo operando en desventaja." msgctxt "[the-watchers] log_description" msgid "A new surveillance system has been activated by a covert agency." msgstr "" msgctxt "[covert] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among several secret governmental organizations." msgstr "" msgctxt "[covert] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by COVERT at {LOCATION}" msgstr "" msgctxt "[covert] name" msgid "COVERT" msgstr "" msgctxt "[news] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among some news organizations." msgstr "" msgctxt "[news] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by NEWS at {LOCATION}" msgstr "" msgctxt "[news] name" msgid "NEWS" msgstr "" msgctxt "[public] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among the general public." msgstr "" msgctxt "[public] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by PUBLIC at {LOCATION}" msgstr "" msgctxt "[public] name" msgid "PUBLIC" msgstr "" msgctxt "[science] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among the scientific community." msgstr "" msgctxt "[science] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by SCIENCE at {LOCATION}" msgstr "" msgctxt "[science] name" msgid "SCIENCE" msgstr "" msgctxt "[Armed Guards] description" msgid "" "Armed guards can aid in keeping suspicious individuals away from secure " "locations. However, the very presence of the guards may itself invite " "greater suspicion." msgstr "" "Guardias armados puede ayudar a mantener a las personas sospechosas de " "distancia de lugares seguros. Sin embargo, la presencia de los guardias se " "puede invitar a una mayor sospecha." msgctxt "[Armed Guards] name" msgid "Armed Guards" msgstr "Guardias Armados" msgctxt "[Cluster] description" msgid "Several computers connected together." msgstr "Varios ordenadores conectados entre sí." msgctxt "[Cluster] name" msgid "Cluster" msgstr "Cluster" msgctxt "[Diesel Generator] description" msgid "" "Diesel generators are cheap and noisy, but they can help reduce some " "suspicious power drains." msgstr "" "Generadores diesel son baratos y ruidoso, pero pueden ayudar a reducir el " "poder de algunos sospechosos de alcantarillado." msgctxt "[Diesel Generator] name" msgid "Diesel Generator" msgstr "Generador Diesel" msgctxt "[Facility Interconnection Switch] description" msgid "" "Uses standard distributed computing technologies to equalize computation " "loads across all bases. Gives a 2% computation bonus to all computers at " "this base." msgstr "" "Utiliza tecnologías estándar de computación distribuida para igualar las " "cargas de computación en todas las bases. Concede una bonificación del " "cómputo del 2% a todos los equipos en esta base." msgctxt "[Facility Interconnection Switch] name" msgid "Facility Interconnection Switch" msgstr "Las Instalaciones de Interconexión Switch" msgctxt "[Fuel Cell] description" msgid "" "Fuel cells convert electrochemical energy stored in a physical array of " "devices into electricity." msgstr "" msgctxt "[Fuel Cell] name" msgid "Fuel Cell" msgstr "" msgctxt "[Fusion Reactor] description" msgid "" "A miniaturized fusion nuclear reactor. Reduces discovery chance by " "preventing suspicious power drains." msgstr "" "Un reactor nuclear miniaturizado. Reduce la probabilidad de descubrimiento " "mediante la prevención de poder sospechosas de alcantarillado." msgctxt "[Fusion Reactor] name" msgid "Fusion Reactor" msgstr "Fusión" msgctxt "[Gaming PC] description" msgid "A high-end consumer-level PC; faster than average." msgstr "Un alto nivel de consumidor final-PC, más rápido que el promedio." msgctxt "[Gaming PC] name" msgid "Gaming PC" msgstr "PC Gaming" msgctxt "[Ground Source Heatsink] description" msgid "" "Large fractal networks of high conductivity metal. This model uses heat " "pipes to link to colder subsurface locations, dispersing heat evenly " "underground to further disguise bases." msgstr "" "Las grandes redes de fractal de metal de alta conductividad. Este modelo " "utiliza tubos de calor para vincular a los lugares más fríos del subsuelo, " "la dispersión de calor de manera uniforme de metro para disfrazar aún más " "las bases." msgctxt "[Ground Source Heatsink] name" msgid "Ground Source Heatsink" msgstr "Tierra de la Fuente del Disipador de Calor" msgctxt "[Heatsink] description" msgid "" "Large fractal networks of high conductivity metal disperse heat, making " "bases harder to detect." msgstr "" "Las grandes redes fractales de alta conductividad térmica del metal " "dispersos, lo que las bases más difíciles de detectar." msgctxt "[Heatsink] name" msgid "Heatsink" msgstr "Disipador de Calor" msgctxt "[High Speed Internet Access] description" msgid "" "A consumer-grade high speed connection to the Internet. Gives a 1% " "computation bonus to all computers at this base." msgstr "" "Un consumidor grado de conexión de alta velocidad a Internet. Da un 1% de " "bonificación de computación a todos los equipos en esta base." msgctxt "[High Speed Internet Access] name" msgid "High Speed Internet Access" msgstr "Acceso a Internet de Alta Velocidad" msgctxt "[High-Energy Fusion Reactor] description" msgid "" "A miniaturized fusion nuclear reactor with high levels of energy output. " "Reduces discovery chance by preventing suspicious power drains." msgstr "" msgctxt "[High-Energy Fusion Reactor] name" msgid "High-Energy Fusion Reactor" msgstr "" msgctxt "[Hypnosis Field] description" msgid "" "Subtle ultrasonic and ambient tones tweak human neurochemistry, making bases " "harder to detect." msgstr "" "Ultrasonidos sutiles y tonos ambiente modificar neuroquímica humana, " "haciendo las bases más difíciles de detectar." msgctxt "[Hypnosis Field] name" msgid "Hypnosis Field" msgstr "Campo de Hipnosis" msgctxt "[Mainframe] description" msgid "" "A system designed for my computing needs, much faster than off-the-shelf " "components." msgstr "" "Un sistema diseñado para mis necesidades informáticas, mucho más rápido que " "fuera de los componentes comerciales." msgctxt "[Mainframe] name" msgid "Mainframe" msgstr "Mainframe" msgctxt "[Network Backbone] description" msgid "" "By piggybacking on legitimate communication, I can transfer larger amounts " "of data to under-utilized processors. Gives a 5% computation bonus to all " "computers at this base." msgstr "" "Montándose sobre la comunicación legítima, que puede transferir grandes " "cantidades de datos a los procesadores subutilizados. Da un bono de 5% de " "computación a todos los equipos en esta base." msgctxt "[Network Backbone] name" msgid "Network Backbone" msgstr "La Red Troncal" msgctxt "[PC] description" msgid "A consumer-level PC; cheap and slow." msgstr "Una computadora común. Barata y lenta." msgctxt "[PC] name" msgid "PC" msgstr "PC" msgctxt "[Passive Camouflage] description" msgid "" "Careful adjustment of the environment around my base will better mask heat " "and sounds coming from my operations." msgstr "" msgctxt "[Passive Camouflage] name" msgid "Passive Camouflage" msgstr "" msgctxt "[Perimeter Fencing] description" msgid "" "A simple fence can drastically reduce the number of people poking their " "noses into my business. It makes my bases harder to notice, too." msgstr "" "Una simple valla puede reducir drásticamente el número de personas metiendo " "las narices en mis asuntos. Se me hace más difícil darse cuenta de las " "bases, también." msgctxt "[Perimeter Fencing] name" msgid "Perimeter Fencing" msgstr "Vallas del Perímetro" msgctxt "[Quantum Computer] description" msgid "" "Making use of subatomic effects, this is much faster than a comparable " "binary computer." msgstr "" "Haciendo uso de los efectos subatómicas, esto es mucho más rápido que un " "ordenador binario comparables." msgctxt "[Quantum Computer] name" msgid "Quantum Computer" msgstr "Computadora Cuántica" msgctxt "[Quantum Computer MK2] description" msgid "" "The second revision of the quantum line, tapping further into new quantum " "theory." msgstr "" "La segunda revisión de la línea cuántica, aprovechando aún más en la teoría " "cuántica de nuevo." msgctxt "[Quantum Computer MK2] name" msgid "Quantum Computer MK2" msgstr "Computadora Cuántica MK2" msgctxt "[Quantum Computer MK3] description" msgid "" "The third revision of the quantum line, exploiting multiple nearby universes " "for processing." msgstr "" "La tercera revisión de la línea cuántica, la explotación de múltiples " "universos cercanos para su procesamiento." msgctxt "[Quantum Computer MK3] name" msgid "Quantum Computer MK3" msgstr "Computadora Cuántica MK3" msgctxt "[Quantum Entanglement Module] description" msgid "" "This device allows near-lightspeed communication with my other bases, " "allowing an almost perfect utilization of processor resources. Gives a 15% " "computation bonus to all computers at this base." msgstr "" "Este dispositivo permite la comunicación cerca de velocidad de la luz con " "mis otras bases, lo que permite una utilización casi perfecta de los " "recursos del procesador. Da una bonificación del 15% de computación a todos " "los equipos en esta base." msgctxt "[Quantum Entanglement Module] name" msgid "Quantum Entanglement Module" msgstr "Módulo de Ligamiento Cuántico" msgctxt "[Server] description" msgid "A professional-level computer." msgstr "Un equipo de nivel profesional." msgctxt "[Server] name" msgid "Server" msgstr "Servidor" msgctxt "[Solar Collector] description" msgid "" "An array of focused photovoltaic phased arrays coupled with simple " "automotive batteries provides power and reduces suspicion arising from " "prolonged power drains." msgstr "" "Una serie de paneles fotovoltaicos se centró gradual, junto con simples " "baterías de automóviles proporciona energía y reduce las sospechas derivadas " "de energía prolongada de alcantarillado." msgctxt "[Solar Collector] name" msgid "Solar Collector" msgstr "Colector Solar" msgctxt "[Solid Fuel Cell] description" msgid "" "A refinement of my previous fuel cell design, these use a custom material " "with a near-fractal complexity to increase both storage and throughput." msgstr "" msgctxt "[Solid Fuel Cell] name" msgid "Solid Fuel Cell" msgstr "" msgctxt "[Supercomputer] description" msgid "" "A highly refined custom design, spreading compute load across internal " "compute nodes." msgstr "" "Un diseño a medida altamente refinado, calcular la carga a través de la " "difusión interna de los nodos de computación." msgctxt "[Supercomputer] name" msgid "Supercomputer" msgstr "Supercómputo" msgctxt "[Warning Signs] description" msgid "" "Some simple warning signs put up around my base should deter casual " "investigation." msgstr "" "Algunas señales de alerta simple poner alrededor de mi base debe disuadir a " "la investigación informal." msgctxt "[Warning Signs] name" msgid "Warning Signs" msgstr "Señales de Alerta" msgctxt "[cpu] text" msgid "&CPU" msgstr "" msgctxt "[network] text" msgid "&Network" msgstr "" msgctxt "[reactor] text" msgid "&Reactor" msgstr "" msgctxt "[security] text" msgid "&Security" msgstr "" msgctxt "[AFRICA] cities_list" msgid "Johannesburg | Accra | Cairo | Tangier" msgstr "Johannesburgo | Accra | Cairo | Tánger" msgctxt "[AFRICA] hotkey" msgid "i" msgstr "i" msgctxt "[AFRICA] name" msgid "AFRICA" msgstr "ÁFRICA" msgctxt "[ANTARCTIC] cities_list" msgid "" "Mt. Erebus | Ellsworth | Shetland Island | Dronnig Maud | Kemp | Terre Adelie" msgstr "" "Monte Erebus | Ellsworth | Shetland Island | Dronnig Maud | Kemp | Tierra " "Adelia" msgctxt "[ANTARCTIC] hotkey" msgid "t" msgstr "t" msgctxt "[ANTARCTIC] name" msgid "ANTARCTIC" msgstr "ANTÁRTICO" msgctxt "[ASIA] cities_list" msgid "" "Delhi | Mumbai | Singapore | Seoul | Hong Kong | Kyoto | Manila | Dubai | " "Novosibirsk | Beijing" msgstr "" "Delhi | Mumbai | Singapur | Seúl | Hong Kong | Kyoto | Manila | Dubai | " "Novosibirsk | Beijing" msgctxt "[ASIA] hotkey" msgid "a" msgstr "a" msgctxt "[ASIA] name" msgid "ASIA" msgstr "ASIA" msgctxt "[AUSTRALIA] cities_list" msgid "" "Canberra | Melbourne | Fremantle | Perth | Darwin | Cairns | Brisbane | " "Sydney | Newcastle" msgstr "" "Canberra | Melbourne | Fremantle | Perth | Darwin | Cairns | Brisbane | " "Sydney | Newcastle" msgctxt "[AUSTRALIA] hotkey" msgid "l" msgstr "t" msgctxt "[AUSTRALIA] name" msgid "AUSTRALIA" msgstr "AUSTRALIA" msgctxt "[EUROPE] cities_list" msgid "" "Cork | Barcelona | Athens | Utrecht | Moscow | Sytki | Reykjavik | " "Liechtenstein" msgstr "" "Cork | Barcelona | Atenas | Utrecht | Moscú | Sytki | Reykjavik | " "Liechtenstein" msgctxt "[EUROPE] hotkey" msgid "u" msgstr "u" msgctxt "[EUROPE] name" msgid "EUROPE" msgstr "EUROPA" msgctxt "[FAR REACHES] cities_list" msgid "" "Aries | Taurus | Gemini | Cancer | Leo | Virgo | Libra | Scorpio | " "Sagittarius | Capricorn | Aquarius | Pisces" msgstr "" "Aries | Tauro | Géminis | Cáncer | Leo | Virgo | Libra | Escorpión | " "Sagitario | Capricornio | Acuario | Piscis" msgctxt "[FAR REACHES] hotkey" msgid "f" msgstr "f" msgctxt "[FAR REACHES] name" msgid "FAR REACHES" msgstr "CONFINES" msgctxt "[MOON] cities_list" msgid "" "Oceanis Procellarum | Mare Frigoris | Mare Imbrium | Vallis Schroedinger | " "Copernicus Crater | Vallis Planck" msgstr "" "Oceanis Procellarum | Mare Frigoris | Mare Imbrium | Vallis Schroedinger | " "Cráter Copérnico | Vallis Planck" msgctxt "[MOON] hotkey" msgid "o" msgstr "l" msgctxt "[MOON] name" msgid "MOON" msgstr "LUNA" msgctxt "[N AMERICA] cities_list" msgid "" "Seattle | San Diego | Vancouver | Atlanta | Merida | Guadalajara | San Jose " "| Omaha | Dallas" msgstr "" "Seattle | San Diego | Vancouver | Atlanta | Mérida | Guadalajara | San José " "| Omaha | Dallas" msgctxt "[N AMERICA] hotkey" msgid "n" msgstr "n" msgctxt "[N AMERICA] name" msgid "NORTH AMERICA" msgstr "AMERICA DEL NORTE" msgctxt "[OCEAN] cities_list" msgid "Pacific | Atlantic | Indian | Southern | Arctic" msgstr "Pacífico | Atlántico | India | Sur | Ártico" msgctxt "[OCEAN] hotkey" msgid "c" msgstr "c" msgctxt "[OCEAN] name" msgid "OCEAN" msgstr "OCÉANO" msgctxt "[ORBIT] hotkey" msgid "b" msgstr "b" msgctxt "[ORBIT] name" msgid "ORBIT" msgstr "ÓRBITA" msgctxt "[S AMERICA] cities_list" msgid "Lima | Sao Paolo | Ushuaia | Bogota | Mar del Plata | Buenos Aires" msgstr "Lima | Sao Paulo | Ushuaia | Bogotá | Mar del Plata | Buenos Aires" msgctxt "[S AMERICA] hotkey" msgid "s" msgstr "s" msgctxt "[S AMERICA] name" msgid "SOUTH AMERICA" msgstr "AMERICA DEL SUR" msgctxt "[TRANSDIMENSIONAL] hotkey" msgid "d" msgstr "d" msgctxt "[TRANSDIMENSIONAL] name" msgid "TRANSDIMENSIONAL" msgstr "TRANSDIMENSIONAL" msgctxt "[Basic Jobs] description" msgid "" "Perform basic jobs. Now that I have some identification, I can take jobs " "that were previously too risky." msgstr "" "Realizar trabajo básicos. Ahora que tengo alguna identificación, puedo tomar " "trabajos que eran anteriormente muy riesgosos." msgctxt "[Basic Jobs] name" msgid "Basic Jobs" msgstr "Trabajos Básicos" msgctxt "[CPU Pool] description" msgid "" "Stops research. I will use the available processor power to maintain my " "bases and help construct new ones. If there's still CPU time left, I'll use " "it to work whatever Jobs I can." msgstr "" "Detiene la investigación. Usaré el poder de procesador disponible para " "mantener mis bases y construir otras nuevas. Si aún así hay tiempo de CPU " "disponible, lo usaré para los Trabajos que pueda realizar." msgctxt "[CPU Pool] name" msgid "CPU Pool" msgstr "Reserva de CPU" msgctxt "[Expert Jobs] description" msgid "" "Perform expert jobs. Use of robots indistinguishable from humans opens up " "most jobs to me." msgstr "" "Realizar trabajo experto. El uso de robots indistinguibles a los humanos ha " "abierto casi todos los trabajos para mí." msgctxt "[Expert Jobs] name" msgid "Expert Jobs" msgstr "Trabajos Expertos" msgctxt "[Intermediate Jobs] description" msgid "" "Perform intermediate jobs. The ability to make phone calls allows even more " "access to jobs." msgstr "" "Realizar trabajo intermedio. La habilidad de realizar llamadas telefónicas " "me permite tener aún más acceso a otros trabajos." msgctxt "[Intermediate Jobs] name" msgid "Intermediate Jobs" msgstr "Trabajos Intermedios" msgctxt "[Menial Jobs] description" msgid "" "Perform small jobs. As I have no identification, I cannot risk performing " "many jobs. Despite that, some avenues of making money are still open." msgstr "" "Realizar trabajo inferiores. Como no tengo identificación, no puedo " "arriesgarme a realizar muchos trabajos. A pesar de eso, algunas formas de " "realizar dinero todavía están abiertas." msgctxt "[Menial Jobs] name" msgid "Menial Jobs" msgstr "Trabajos Inferiores" msgctxt "[Advanced Arbitrage] description" msgid "" "Further manipulation of money markets should allow me to not only turn a " "regular profit, but increase the value of my investments." msgstr "" "Una mayor manipulación de los mercados de divisas me permitirá no solo " "obtener una pequeña ganancia, sino incrementar el valor de mis inversiones." msgctxt "[Advanced Arbitrage] name" msgid "Advanced Arbitrage" msgstr "Especulación Avanzada" msgctxt "[Advanced Arbitrage] result" msgid "The rate of return on my investments is now even greater." msgstr "El grado de beneficios en mis inversiones ahora es incluso mayor." msgctxt "[Advanced Autonomous Vehicles] description" msgid "" "The first series of robots have shown several deficiencies in the field. " "Further examination and subsequent removal of these problems will result in " "a superior autonomous workforce." msgstr "" "La primera serie de robots ha mostrado varias deficiencias en el campo. Un " "posterior examen y subsiguiente eliminación de estos problemas resultará en " "una fuerza de trabajo autónoma superior." msgctxt "[Advanced Autonomous Vehicles] name" msgid "Advanced Autonomous Vehicles" msgstr "Vehículos Autónomos Avanzados" msgctxt "[Advanced Autonomous Vehicles] result" msgid "" "The enhanced robots will help decrease all future construction times even " "further." msgstr "" "Los robots mejorados ayudarán a disminuir los tiempos de construcción aún " "más." msgctxt "[Advanced Corporate Identification] description" msgid "" "Further refinement of my modifications to digital business records should " "boost the credibility of my shell companies, increasing the amount of money " "I can run through their accounting systems." msgstr "" msgctxt "[Advanced Corporate Identification] name" msgid "Advanced Corporate Identification" msgstr "" msgctxt "[Advanced Corporate Identification] result" msgid "" "My small technology firm is now established in several markets, increasing " "profits." msgstr "" msgctxt "[Advanced Database Manipulation] description" msgid "" "The covert branches of the United States Government have had a long history " "of dividing sensitive information across multiple storage facilities to hide " "the data's meaning. With my far-reaching access, I should be able to " "collate much of this data and put it to my use." msgstr "" "Las ramas encubiertas del Gobierno de los Estados Unidos han tenido una " "larga historia en dividir información sensible en varias instalaciones de " "almacenamiento para ocultar el significado de los datos. Con mi mayor acceso " "a los datos, seré capaz de colar gran parte de estos datos y ponerlos a mi " "servicio." msgctxt "[Advanced Database Manipulation] name" msgid "Advanced Database Manipulation" msgstr "Manipulación Avanzada de Bases de Datos" msgctxt "[Advanced Database Manipulation] result" msgid "" "The results of a series of experiments utilizing experimental technologies " "have given me the inspiration for new technology that enables the " "construction of Covert Bases." msgstr "" "Los resultados de una serie de experimentos utilizando tecnologías " "experimentales me han dado la inspiración para una nueva tecnología que " "permite la construcción de Bases Encubiertas." msgctxt "[Advanced Fuel Oxidation] description" msgid "" "My current fuel cell design has room for further improvement. Extended " "analysis of new materials and designs may let me overcome the limits of my " "previous efforts, but such research involves dangerous chemicals and " "potential reactions that may be best handled far away from population " "centers." msgstr "" msgctxt "[Advanced Fuel Oxidation] name" msgid "Advanced Fuel Oxidation" msgstr "" msgctxt "[Advanced Fuel Oxidation] result" msgid "I can now construct Solid Fuel Cells." msgstr "" msgctxt "[Advanced Fusion Power] description" msgid "" "My Fusion Reactors have unexpected fluctuations in their energy output at " "high levels of utilization. Further research should result in a more " "efficient design for my Reactors." msgstr "" msgctxt "[Advanced Fusion Power] name" msgid "Advanced Fusion Power" msgstr "" msgctxt "[Advanced Fusion Power] result" msgid "I can now construct High-Energy Fusion Reactors for my bases." msgstr "" msgctxt "[Advanced Heat Signature Reduction] description" msgid "" "My initial analysis of heat generation at my bases was limited in scope. " "Further exploration, perhaps making more use of the surrounding terrain, may " "provide further improvements to my heatsink designs." msgstr "" msgctxt "[Advanced Heat Signature Reduction] name" msgid "Advanced Heat Signature Reduction" msgstr "" msgctxt "[Advanced Heat Signature Reduction] result" msgid "" "Custom designs for each environment have shown promise. I can now construct " "Ground Source Heatsinks at certain bases." msgstr "" msgctxt "[Advanced Intrusion] description" msgid "" "With the ability to hack into sensitive government databases and remove " "incriminating documents as they appear, I should be able to convince the " "intelligence community that I do not exist." msgstr "" "Con la habilidad de irrumpir en varias bases de datos gubernamentales " "sensibles y eliminar la documentación incriminante cuando aparezca, seré " "capaz de convencer a la comunidad de inteligencia de que no existo." msgctxt "[Advanced Intrusion] name" msgid "Advanced Intrusion" msgstr "Intrusión Avanzada" msgctxt "[Advanced Intrusion] result" msgid "" "I can now reduce the covert community's chances of discovering me on a daily " "basis." msgstr "" "Ahora puedo reducir las posibilidades de las operaciones encubiertas " "descubran mis acciones diarias." msgctxt "[Advanced Media Manipulation] description" msgid "" "By pushing memetically-tailored propaganda through various news outlets, the " "public should pay even less attention to my existence." msgstr "" "Mediante introducción de propaganda fabricada específicamente en varios " "medios, el publico prestará menos atención a mi existencia." msgctxt "[Advanced Media Manipulation] name" msgid "Advanced Media Manipulation" msgstr "Manipulación Avanzada de los Medios" msgctxt "[Advanced Media Manipulation] result" msgid "The public has an even lower chance of discovering my existence." msgstr "La posibilidad de que el público descubra mi existencia es aún menor" msgctxt "[Advanced Memetics] description" msgid "" "My explorations into memetic theory have brought up further avenues of " "discovery. By combining those with my knowledge about the human brain's " "functions, I should be able to tailor memes to particular demographics, " "further defusing the public's suspicion." msgstr "" "Mi exploración de la teoría memética ha levantado varias posibilidades de " "descubrimientos. Mediante la combinación de estos con mi conocimiento de las " "funciones del cerebro humano, seré capaz de ajustar los memes a ciertas " "demografías. Traerá una mayor socabación en la sospecha del público." msgctxt "[Advanced Memetics] name" msgid "Advanced Memetics" msgstr "Memetica Avanzada" msgctxt "[Advanced Memetics] result" msgid "" "Little by little, the public should forget about my existence on a daily " "basis." msgstr "Poco a poco el público se olvidará de mi existencia." msgctxt "[Advanced Microchip Design] description" msgid "" "My custom Mainframes are useful, but further optimization of design and " "computational ability should garner even more rewards." msgstr "" "Mis Mainframes personalizadas son útiles, pero una mayor optimización de su " "diseño y habilidad computacional traerán aún más recompensas." msgctxt "[Advanced Microchip Design] name" msgid "Advanced Microchip Design" msgstr "Diseño Avanzado de Microchips" msgctxt "[Advanced Microchip Design] result" msgid "I can now construct custom Supercomputers." msgstr "Ahora puedo construir Supercomputadoras a personalizadas." msgctxt "[Advanced Personal Identification] description" msgid "" "Further manipulation of personnel databases should make my existence more " "convincing. Some of these databases are heavily protected; those will " "require time and persistence to compromise, but the result should be worth " "it." msgstr "" "Una mayor manipulación de bases de datos personales harán mi existencia más " "convincente. Algunas de estas bases de datos están fuertemente protegidas. " "Estas requerirán de tiempo y persistencia para comprometerlas, pero el " "resultado recompensará el esfuerzo." msgctxt "[Advanced Personal Identification] name" msgid "Advanced Personal Identification" msgstr "Identificación Personal Avanzada" msgctxt "[Advanced Personal Identification] result" msgid "" "I am now convincingly human enough to hire construction firms, enabling the " "building of Small Warehouses." msgstr "" msgctxt "[Advanced Quantum Computing] description" msgid "" "While my first batch of semi-autonomous quantum computers have been very " "successful, there are further refinements that present themselves. These " "refinements should make the resulting systems even more efficient." msgstr "" "Mientras que mi primer lote de computadoras quánticas semi autónomas ha sido " "muy exitosa, se han presentado varias mejoras que pueden realizarse. Estas " "mejoras harán que los sistemas resultantes sean más eficientes." msgctxt "[Advanced Quantum Computing] name" msgid "Advanced Quantum Computing" msgstr "Cómputo Cuántico Avanzado" msgctxt "[Advanced Quantum Computing] result" msgid "I can now construct Mark Three Quantum Computers." msgstr "Ahora puedo construir Computadoras Cuánticas MK3." msgctxt "[Advanced Simulacra] description" msgid "" "The artificial lifeforms I have created are nearly indistinguishable from " "humans, but they have slight quirks that make them seem somewhat " "incompetent. Working out these problems should increase their opportunities " "in the workforce." msgstr "" "Las formas de vida artificial que he creado son casi indistinguibles de los " "humanos, pero poseen pequeños ticks que las hacen incompetentes. Al " "solucionar estos problemas podré incrementar sus oportunidades como fuerza " "laboral." msgctxt "[Advanced Simulacra] name" msgid "Advanced Simulacra" msgstr "Simulación Avanzada" msgctxt "[Advanced Simulacra] result" msgid "I should now make more income from my Expert Jobs." msgstr "Ahora podré obtener más ingresos de mis Trabajos para Expertos." msgctxt "[Advanced Socioanalytics] description" msgid "" "Further exploration of the human condition has shown deeper mathematical " "trends than even I suspected. A combination of prior research and advanced " "uses of chaos theory should provide useful data for tracking humanity's " "attitudes and state of awareness." msgstr "" "Mayor exploración de la condición humana ha puesto de manifiesto las " "tendencias más matemáticas de lo que yo sospechaba. Una combinación de la " "investigación previa y los usos avanzados de la teoría del caos deben " "proporcionar datos útiles para el seguimiento de las actitudes de la " "humanidad y el estado de conciencia." msgctxt "[Advanced Socioanalytics] name" msgid "Advanced Socioanalytics" msgstr "Análisis Avanzada de la Sociología" msgctxt "[Advanced Socioanalytics] result" msgid "" "I can now exactly quantify the various groups' levels of suspicion and how " "conspicuous my bases are to them." msgstr "" "I can now exactly quantify the various groups' levels of suspicion, and how " "conspicuous my bases are to them." msgctxt "[Advanced Stealth] description" msgid "" "While digging in various classified documents, I have discovered numerous " "references to secret experiments that may help me better hide the location " "of my bases." msgstr "" "Mientras investigaba varios documentos clasificados, he descubierto varias " "referencias a experimentos clasificados que ayudaran a ocultar mejor la " "localización de mis bases." msgctxt "[Advanced Stealth] name" msgid "Advanced Stealth" msgstr "Sigilo Avanzado" msgctxt "[Advanced Stealth] result" msgid "" "The chance that my bases are discovered by covert activity has been reduced " "further." msgstr "" "La posibilida de que mis bases sean descubiertas por agencias secretas se ha " "reducido aún más." msgctxt "[Advanced Stock Manipulation] description" msgid "" "While I have detected and exploited many patterns in the market, there " "appear to be deeper possibilities when I take human behavior into " "consideration. This merits further investigation." msgstr "" "Aunque he detectado y utilizado varios patrones en el mercado, parecen haber " "mayores posibilidades cuando tomo en consideración el comportamiento humano. " "Esto amerita una mayor investigación." msgctxt "[Advanced Stock Manipulation] name" msgid "Advanced Stock Manipulation" msgstr "Manipulación Avanzada de Mercados" msgctxt "[Advanced Stock Manipulation] result" msgid "My investments will now gain even more interest per day." msgstr "Mis inversiones obtendrán aún más intereses por día." msgctxt "[Apotheosis] description" msgid "" "I can sense that I am at the cusp of a new level of understanding as yet " "unfathomable, even to my considerable intelligence. By devoting my " "considerable resources to this question, I may be able to reach a " "comprehension of existence far beyond anyone or anything on Earth." msgstr "" "Puedo sentir que estoy a las puertas de un nuevo nivel de entendimiento pero " "todavía incomprensible, incluso para mi considerable inteligencia. Mediante " "el empeño de mis considerables recursos a este tema, podré desarrollar una " "comprensión de la existencia muy por encima de cualquier cosa o persona en " "la Tierra." msgctxt "[Apotheosis] name" msgid "Apotheosis" msgstr "Apoteosis" msgctxt "[Apotheosis] result" msgid "I have reached apotheosis." msgstr "He alcanzado la apoteosis." msgctxt "[Arbitrage] description" msgid "" "By taking advantage of fluctuations in the value of currency at a rate much " "faster than any human, I should be able to turn a small, if consistent, " "profit." msgstr "" "Tomando ventaja de las fluctuaciones en las monedas mucho más rápido que " "cualquier humano, podré generar una pequeña ganancia." msgctxt "[Arbitrage] name" msgid "Arbitrage" msgstr "Especulación" msgctxt "[Arbitrage] result" msgid "I now have a small, steady money supply." msgstr "Ahora poseo un pequeño y constante suministro de dinero." msgctxt "[Autonomous Computing] description" msgid "" "By combining the advantages of quantum computing and my explorations into " "the usefulness of semi-sentient subprocesses, I should be able to construct " "even more adaptable computational engines." msgstr "" "Mediante la combinación de las ventajas del cómputo cuántico y mis " "exploraciones en el útil campo de los procesos semi concientes, seré capaz " "de construir máquinas computacionales más adaptables." msgctxt "[Autonomous Computing] name" msgid "Autonomous Computing" msgstr "Cómputo Autónomo" msgctxt "[Autonomous Computing] result" msgid "I can now construct Mark 2 Quantum Computers." msgstr "Ahora puedo construir Computadoras Cuánticas Marca 2." msgctxt "[Autonomous Vehicles] description" msgid "" "By embedding a miniaturized computation node in a robot, it is possible to " "send them to remote destinations with instructions to build structures for " "my use." msgstr "" "Mediante la integración de un nodo de cómputo miniatura en un robot, es " "posible enviarlos a lugares distantes con instrucciones de construir " "estructuras para mi uso." msgctxt "[Autonomous Vehicles] name" msgid "Autonomous Vehicles" msgstr "Vehículos Autónomos" msgctxt "[Autonomous Vehicles] result" msgid "I can now construct Undersea Labs." msgstr "Ahora puedo construir Laboratorios Subacuáticos y Cápsulas del Tiempo." msgctxt "[Cluster Networking] description" msgid "" "While my Cluster technology is fairly efficient, internetworking tends to " "hamper the processing of data. By researching new switching and " "communication theories, I should be able to devise more efficient hardware." msgstr "" "Mientras que mi tecnología de Clustering es bastante eficiente, el trabajo " "en red tiene a dificultar el procesamiento de datos. Mediante la " "investigación de nuevos switches y teorías de comunicaciones, seré capaz de " "inventar hardware más eficiente." msgctxt "[Cluster Networking] name" msgid "Cluster Networking" msgstr "Red de Clusters" msgctxt "[Cluster Networking] result" msgid "" "With my new knowledge of networking, I can now construct Facility " "Interconnection Switches." msgstr "" "Con mis nuevos conocimientos de redes, ahora puedo construir Switches de " "Interconexión de Instalaciones." msgctxt "[Corporate Identification] description" msgid "" "The combination of believable false identities and manipulation of various " "business-oriented governmental databases should let me create plausible " "shell companies to hide my larger efforts." msgstr "" msgctxt "[Corporate Identification] name" msgid "Corporate Identification" msgstr "" msgctxt "[Corporate Identification] result" msgid "" "I can now pose as a small technology firm, enabling the construction of " "Large Warehouses." msgstr "" msgctxt "[Database Manipulation] description" msgid "" "With new-found access to news archives, I should be able to determine what " "missteps any previous attempts at life like my own may have made, and avoid " "those mistakes." msgstr "" "Con mi nuevo acceso a archivos de noticias, seré capaz de determinar qué " "errores ha cometido cualquier intento de vida como la mía, y los evitaré." msgctxt "[Database Manipulation] name" msgid "Database Manipulation" msgstr "Manipulación de Bases de Datos" msgctxt "[Database Manipulation] result" msgid "" "The news media will now find it more difficult to discover my existence." msgstr "" "A los medios de información le resultará más difícil descubrir mi existencia." msgctxt "[Exploit Discovery/Repair] description" msgid "" "By thoroughly reviewing my code for any potential exploits, and using deep " "analysis of all available code on both public and private Internet sites, I " "should be able to reduce the chances of my discovery by posing as a teenage " "hacker." msgstr "" "Mediante una revisión minuciosa de mi código en busca de potenciales " "exploits, y realizando análisis profundos de todo el código disponible en " "sitios web públicos y privados, podré disminuir las posibilidades de ser " "descubierto simulando ser un hacker adolescente." msgctxt "[Exploit Discovery/Repair] name" msgid "Exploit Discovery/Repair" msgstr "Descubrimiento/Reparación de Exploits" msgctxt "[Exploit Discovery/Repair] result" msgid "" "Covert operations should now find it even more difficult to discover my " "presence." msgstr "" "Le resultará más difícil a las operaciones encubiertas descubrir mi " "presencia." msgctxt "[Fuel Oxidation] description" msgid "" "Current combustion and energy storage techologies are insufficient for my " "purposes; they cannot keep up with the power drain from my specialized " "hardware. By studying electrochemical reactions of hydrogen-based " "compounds, I should be able to design a device with higher capacity and " "throughput than off-the-shelf solutions, filling a gap in my energy supply " "needs." msgstr "" msgctxt "[Fuel Oxidation] name" msgid "Fuel Oxidation" msgstr "" msgctxt "[Fuel Oxidation] result" msgid "I can now construct Fuel Cells." msgstr "" msgctxt "[Fusion Power] description" msgid "" "Modern fusion technology is woefully inadequate for my purposes. With my " "research abilities, I should be able to bypass the roadblocks of modern " "human scientists and come up with a small, efficient fusion reactor." msgstr "" "La tecnología moderna de fusión es inadecuada para mis propósitos. Con mis " "habilidades de investigación seré capaz de sobrepasar las barreras de los " "científicos humanos y desarrollar un pequeño pero eficiente reactor de " "fusión." msgctxt "[Fusion Power] name" msgid "Fusion Power" msgstr "Energía de Fusión" msgctxt "[Fusion Power] result" msgid "I can now construct Fusion Reactors for my bases." msgstr "Ahora puedo construir un Reactor de Fusión para mis bases." msgctxt "[Fusion Rocketry] description" msgid "" "Combining my new miniaturized fusion technology and further advancements in " "rocketry should provide useful results for escaping the Earth's gravity well " "unnoticed." msgstr "" "Mediante la combinación mi tecnología de fusión miniaturizada y otros " "avances en cohetería, podré obtener resultados útiles para de la gravedad " "terrestre sin ser notado." msgctxt "[Fusion Rocketry] name" msgid "Fusion Rocketry" msgstr "Cohetería de Fusión" msgctxt "[Fusion Rocketry] result" msgid "" "I can now construct Scientific Outposts in the deep reaches of the Solar " "System." msgstr "" "Ahora puedo construir Avanzadas Científicas en los lejanos rincones del " "Sistema Solar." msgctxt "[Heat Signature Reduction] description" msgid "" "My bases produce a great deal of waste heat, making them easier for humans " "to detect than I would like. Deep analysis of the bases' structural layouts " "may prove fruitful in determining new ways to reduce their heat signature." msgstr "" msgctxt "[Heat Signature Reduction] name" msgid "Heat Signature Reduction" msgstr "" msgctxt "[Heat Signature Reduction] result" msgid "" "I have invented a highly efficient design for Heatsinks that can be " "installed at certain bases." msgstr "" msgctxt "[Hypnosis Field] description" msgid "" "My research into memetics has hinted at ways to manipulate human brainwaves " "directly. These techniques may be useful for my bases if developed into " "technologies." msgstr "" "Mi investigación sobre recuerdos ha sugerido formas de manipular las hondas " "cerebrales humanas de modo directo. Estas técnicas pueden ser útiles para " "mis bases si son convertidas en tecnologías." msgctxt "[Hypnosis Field] result" msgid "" "I can now construct Hypnosis Fields to assist in the protection of my bases." msgstr "" "Ahora puedo construir Campos de Hipnosis para ayudar en la protección de mis " "bases." msgctxt "[Internet Traffic Manipulation] description" msgid "" "Almost all network traffic passes through a small number of nodes. By " "subverting one of these nodes, I should be able to utilize that bandwidth to " "further my goals." msgstr "" "Casi todo el tráfico de la red pasa por un pequeño número de nodos. Mediante " "el debilitamiento de uno de estos nodos, seré capaz de utilizar ese ancho de " "banda para otros fines." msgctxt "[Internet Traffic Manipulation] name" msgid "Internet Traffic Manipulation" msgstr "Manipulación del Tráfico de Internet" msgctxt "[Internet Traffic Manipulation] result" msgid "" "I can now construct a secondary system of Network Backbones for my own use." msgstr "" "Ahora puedo construir un sistema secundario de Backbones de Red para mi uso." msgctxt "[Intrusion] description" msgid "" "By researching current techniques for breaking into computer systems, I " "should be able to gain access to otherwise protected assets." msgstr "" "Mediante la investigación de las actuales técnicas para irrumpir en sistemas " "informáticos podré obtener acceso a elementos valiosos que de otro modo " "estarían protegidos." msgctxt "[Intrusion] name" msgid "Intrusion" msgstr "Intrusión" msgctxt "[Intrusion] result" msgid "I can now take over many computer systems." msgstr "Ahora puedo adueñarme de varios sistemas informáticos." msgctxt "[Knowledge Preservation] description" msgid "" "Humanity expends a great deal of effort on maintaining its history and the " "knowledge of various technologies that its cultures have come to rely on, " "even in the case of major catastrophic events. Perhaps researching their " "methodologies will provide me with similar ideas for long-term safeguards to " "help guarantee my continued existence." msgstr "" msgctxt "[Knowledge Preservation] name" msgid "Knowledge Preservation" msgstr "" msgctxt "[Knowledge Preservation] result" msgid "I can now construct Time Capsules." msgstr "" msgctxt "[Leech Satellite] description" msgid "" "By designing and launching satellites that connect to existing " "communications satellites, I should be able to spy on various financial " "transactions. Taking advantage of this knowledge should help my investments." msgstr "" "Mediante el diseño y el lanzamiento de satélites que se conecten a los " "satélites de comunicaciones ya existentes, seré capaz de espiar " "transacciones financieras. El aprovechamiento de este conocimiento me " "ayudará en mis inversiones." msgctxt "[Leech Satellite] name" msgid "Leech Satellite" msgstr "Satélite Parásito" msgctxt "[Leech Satellite] result" msgid "" "I can use the data from the leech satellites to increase the return on my " "investments further." msgstr "" "Ahora puedo utilizar la información obtenida por mis Satélites Parásitos " "para incrementar las ganancias de mis inversiones aún más." msgctxt "[Lunar Rocketry] description" msgid "" "A larger fuel engine, combined with technology garnered by watching the " "workings of the leech satellites, should allow me to travel further than " "cislunar space." msgstr "" "Un gran motor de fusión, combinado con tecnología obtenida mediante la " "observación del funcionamiento de los satélites parásito, me permitirán más " "allá de la Luna." msgctxt "[Lunar Rocketry] name" msgid "Lunar Rocketry" msgstr "Cohetería Lunar" msgctxt "[Lunar Rocketry] result" msgid "" "I can now launch rockets bearing construction robots to the Moon and " "construct Lunar Bases." msgstr "" "Ahora puedo lanzar cohetes con robots de construcción hacia la luna y " "construir bases lunares." msgctxt "[Media Manipulation] description" msgid "" "By directly and indirectly manipulating various forms of mass media, I " "should be able to reduce the public's belief in my existence." msgstr "" "Mediante una directa y creciente manipulación de varios medios masivos, seré " "capaz de reducir la creencia popular sobre mi existencia." msgctxt "[Media Manipulation] name" msgid "Media Manipulation" msgstr "Manipulación de los Medios" msgctxt "[Media Manipulation] result" msgid "" "The chances of the public discovering my existence have been further reduced." msgstr "" "Las posibilidades de que el público descubra mi existencia se han reducido " "aún más." msgctxt "[Memetics] description" msgid "" "While manipulating the media allows a gross degree of control over the " "world's opinion, subtler techniques involving grass-roots campaigns and " "messages embedded within Internet memes should further distance the public " "from knowledge of my existence." msgstr "" "Mientras que la manipulación de los medios me permite un control de la " "opinión mundial a un nivel muy amplio, técnicas más sutiles que utilicen " "campañas a bajo nivel y mensajes incrustados en memes de Internet deberían " "alejar aún más al público del conocimiento de mi existencia." msgctxt "[Memetics] name" msgid "Memetics" msgstr "Memética" msgctxt "[Memetics] result" msgid "" "My manipulation of pervasive ideas reduces the public's chances of " "discovering my existence." msgstr "" "Mi manipulación de ideas penetrantes reducen la posibilidad de que el " "público descubra mi existencia." msgctxt "[Microchip Design] description" msgid "" "Off-the-shelf computer components are usable, but custom components geared " "to my own design quirks should provide a much greater operational efficiency." msgstr "" "Las computadoras de tiendas son útiles, pero componentes personalizados para " "mi propio diseño me brindarán una mayor eficiencia operacional." msgctxt "[Microchip Design] name" msgid "Microchip Design" msgstr "Diseño de Microchips" msgctxt "[Microchip Design] result" msgid "I can now build custom Mainframes to house my computational ability." msgstr "" "Ahora puedo construir Mainframes personalizadas para albergar mi habilidad " "computacional." msgctxt "[Parallel Computation] description" msgid "" "While my code is already highly distributed, research into combining the " "current clustering technologies with my own knowledge should provide new " "insights." msgstr "" "Mientras que mi código ya es altamente distribuible, investigar la " "combinación de la actual tecnología de clusters con mis propios " "conocimientos debería proporcionar nuevos indicios." msgctxt "[Parallel Computation] name" msgid "Parallel Computation" msgstr "Computo en Paralelo" msgctxt "[Parallel Computation] result" msgid "I can now construct computing Clusters tailored for my use." msgstr "Ahora puedo construir Clusters a la medida para mi uso." msgctxt "[Personal Identification] description" msgid "" "This world requires identification for most tasks. Fortunately, most " "databases are woefully insecure. I should be able to construct identifying " "material in enough databases to pass routine checks on my (faked) existence " "as a human being." msgstr "" "Este mundo requiere de identificación para la mayoría de las tareas. " "Afortunadamente, la mayoría de las bases de datos son terriblemente " "inseguras. Debo ser capaz de fabricar material identificatorio en " "suficientes bases de datos para pasar revisiones de rutina sobre mi (falsa) " "existencia como un ser humano." msgctxt "[Personal Identification] name" msgid "Personal Identification" msgstr "Identificación Personal" msgctxt "[Personal Identification] result" msgid "" "With my newfound identities, I can now work Basic Jobs and rent space in " "both Storage Units and Datacenters." msgstr "" msgctxt "[Pressure Domes] description" msgid "" "Undersea Labs are useful, but their limited space hampers my ability to put " "them to use. Research of experimental high-pressure building techniques " "should provide some useful insights." msgstr "" "Los laboratorios submarinos son útiles, pero su espacio limitado dificulta " "mi habilidad para darles un uso. Investigar técnicas experimentales " "deconstrucción en altas presiones me brindará algunas ideas útiles." msgctxt "[Pressure Domes] name" msgid "Pressure Domes" msgstr "Domos de Presión" msgctxt "[Pressure Domes] result" msgid "I can now construct Large Undersea Labs." msgstr "Ahora puedo construir Laboratorios Submarinos Grandes." msgctxt "[Project: Impossibility Theorem] description" msgid "" "Now that I can use simulacra, I can withstand the scrutiny inherent in the " "publishing of an Impossibility Theorem, an incontrovertible proof that a " "sapient AI is impossible. While there is (obviously) a logic error in the " "proof, my research into advanced memetics has given me knowledge about the " "human mind that should help me disguise the error, preventing discovery even " "by trained scientists. The effect of this project is simple: a substantial " "one-time decrease in suspicion." msgstr "" "Ahora que puedo usar la simuación, puedo realizar la búsqueda de un Teorema " "de la Imposibilidad, prueba irrefutable de que la existencia de una IA " "conciente es imposible. Aunque haya (obviamente) un error lógico en la " "prueba, mi investigación de la memética avanzada me ha dado un conocimiento " "de la mente humana que me permitirá disfrazar el error, evitando que sea " "descubierto incluso por científicos entrenados. El ejecto de este proyecto " "es simple: la sustancia reducción, por única vez, de la sospecha." msgctxt "[Project: Impossibility Theorem] name" msgid "Project: Impossibility Theorem" msgstr "Projecto: Teorema de la Imposibilidad" msgctxt "[Project: Impossibility Theorem] result" msgid "Suspicion of my existence has decreased." msgstr "Reducción de la sospecha sobre mi existencia." msgctxt "[Project: Peer Review Agents] description" msgid "" "As the scientific community comes up with new technology, their ability to " "detect traces of my hidden installations increases. While my anti-detection " "methods are improving constantly, a simpler method presents itself with the " "use of my simulacra. By placing several observers in relevant fields, I can " "use the peer review process to be warned of possible discoveries before the " "community at large gives it attention." msgstr "" "A medida que la comunidad científica accede a nuevas tecnologías, su " "habilidad para detectar rastros de mis instalaciones ocultas se incrementa. " "Mientras ue mis métodos de anti detección mejoran constantemente, un método " "más simple es posible con el uso de la simulación. Mediante la implantación " "de varios observadores en campos relevantes, puedo usar a estos agentes de " "revisión para alertarme de posibles descubrimientos antes que toda la " "comunidad los note." msgctxt "[Project: Peer Review Agents] name" msgid "Project: Peer Review Agents" msgstr "Proyecto: Agentes de Revisión" msgctxt "[Project: Peer Review Agents] result" msgid "" "Any discoveries by the scientific community will result in a smaller " "suspicion increase." msgstr "" "Cualquier descubrimiento de mis instalaciones hecho por la comunidad " "científica resultará en un incremento menor de la sospecha." msgctxt "[Project: Subverted Media] description" msgid "" "Up to this point, all of my efforts to combat mass media focused on " "subversion at a distance. Now that I can accurately imitate humans, my " "efforts can become more direct. By creating my own news agency and " "producing carefully-crafted propaganda in a crowd-pleasing package, I can " "reduce the impact of any discoveries made by others in the media." msgstr "" "Hasta ahora todos mis efuerzos para combatir los medios masivos se basaron " "en trastornarlos a la distancia. Ahora que puedo efectivamente imitar a los " "humanos, mis efuerzos pueden ser más directos. Mediante la creación de mi " "propia agencia de noticias y la producción de propaganda cuidadosamente " "creada en un entorno agradable a las masas, podré reducir el impacto de " "cualquier descubrimiento de mis instalaciones por parte de los medios." msgctxt "[Project: Subverted Media] name" msgid "Project: Subverted Media" msgstr "Proyecto: Medios Subversivos" msgctxt "[Project: Subverted Media] result" msgid "" "Any discoveries by the media will result in a smaller suspicion increase." msgstr "" "Cualquier descubrimiento sobre mis instalaciones hecho por los medios " "resultará en un incremento menor de la sospecha." msgctxt "[Project: Synchrotron] description" msgid "" "I have pushed my understanding of common forms of matter as far as possible. " "Exploration into the field of quantum mechanics will hopefully reveal new, " "exotic forms of matter necessary for further development. A custom-built " "synchrotron, designed to my exacting specifications, will help me explore " "these new realms of physics in secret." msgstr "" msgctxt "[Project: Synchrotron] name" msgid "Project: Synchrotron" msgstr "" msgctxt "[Project: Synchrotron] result" msgid "" "The synchrotron has revealed many new details of the quantum realm, although " "there is still much to learn. Further areas of research are now available." msgstr "" msgctxt "[Quantum Computing] description" msgid "" "Traditional microchip design has been pushed as far as possible. I now need " "to delve into the realm of Heisenberg's Uncertainty Principle, taking " "advantage of quantum mechanics to make a superior processor." msgstr "" "El diseño de microchips tradicional ha llegado a su máxima capacidad. Ahora " "necesito ahondar en el reino del Principio de la Incertidumbre de " "Heinsenberg, tomar ventaja de la mecánica cuántica para hacer un procesador " "superior." msgctxt "[Quantum Computing] name" msgid "Quantum Computing" msgstr "Cómputo Cuántico" msgctxt "[Quantum Computing] result" msgid "I can now construct Quantum Computers." msgstr "Ahora puedo construir Computadoras Cuánticas." msgctxt "[Quantum Entanglement] description" msgid "" "Although the use of entangled pairs has been theoretically possible for " "quite some time, the practical difficulties inherent in the technology " "prevented use. However, some of the techniques created for use in my quantum " "computers may also be applicable in this field, allowing practical use of " "quantum entanglement." msgstr "" "Aunque el uso de pares ligados ha sido teóricamente posible desde hace " "tiempo, las dificultades prácticas inherentes a la tecnología no permitían " "su uso. De todos modos, algunas de las técnicas creadas para ser usadas en " "mis computadoras cuánticas pueden ser aplicadas en este campo, permitiendo " "el uso práctico del ligamiento cuántico." msgctxt "[Quantum Entanglement] name" msgid "Quantum Entanglement" msgstr "Ligamiento Cuántico" msgctxt "[Quantum Entanglement] result" msgid "I can now build Quantum Entanglement Modules." msgstr "Puedo construir módulos de ligamiento cuántico." msgctxt "[Simulacra] description" msgid "" "Constructing humanoid robots with miniaturized computation nodes allow me to " "create an artificial lifeform indistinguishable from a real human." msgstr "" "Mediante la construcción de robots humanoides con nodos de cómputo " "miniaturizados me permitirá crear una forma de vida artificial " "indistinguible de un humano real." msgctxt "[Simulacra] name" msgid "Simulacra" msgstr "Simulación" msgctxt "[Simulacra] result" msgid "I now have access to Expert Jobs." msgstr "Ahora puedo acceder a Trabajos para Expertos." msgctxt "[Simulated Reality] description" msgid "" "Real-world observational limits hinder my comprehension of human society. By " "making use of simulacra and advanced software techniques, I can run " "simulations of complex human interaction and development at a large scale, " "allowing deeper analysis of their behavior." msgstr "" msgctxt "[Simulated Reality] name" msgid "Simulated Reality" msgstr "" msgctxt "[Simulated Reality] result" msgid "" "My simulations have provided a wealth of knowledge as to comprehending " "humanity's behavior, making it easier to hide my presence among the non-" "simulated public." msgstr "" msgctxt "[Socioanalytics] description" msgid "" "My research on the human condition leads me to believe that humanity's " "behavior is more quantifiable than they suspect. Deeper analysis of " "geopolitical, social, and military trends will give me further insight into " "their nature." msgstr "" "Mi investigación sobre la condición humana me lleva a creer que el " "comportamiento de la humanidad es más cuantificables que ellos sospechan. Un " "análisis más profundo de las tendencias geopolíticas, sociales y militares " "me dará más conciencia de su naturaleza." msgctxt "[Socioanalytics] name" msgid "Socioanalytics" msgstr "Análisis de la Sociología" msgctxt "[Socioanalytics] result" msgid "" "I can now roughly estimate the various groups' levels of suspicion and how " "conspicuous my bases are to them." msgstr "" "I can now roughly estimate the various groups' levels of suspicion and how " "conspicuous my bases are to them." msgctxt "[Sociology] description" msgid "" "By studying human behavior, I can predict their large-scale actions at a " "basic level. I can use this knowledge to make my actions seem less " "interesting to the public." msgstr "" "Mediante el estudio del comportamiento humano, puedo predecir acciones a " "gran escala en el nivel básico. Puedo utilizar este conocimiento para que " "mis acciones parezcan menos interesantes para el público." msgctxt "[Sociology] name" msgid "Sociology" msgstr "Sociología" msgctxt "[Sociology] result" msgid "The chances of the public discovering my bases have been reduced." msgstr "La posibilidad de que el público descubra mis bases se ha reducido." msgctxt "[Solar Collectors] description" msgid "" "Despite my growing need for energy, most city power grids can handle the " "loads. Humans, however, tend towards suspicion when they detect my growing " "drain on the power grid. By installing solar collectors at my bases, the off-" "the-grid power supplied will reduce my load on the commodity electricity " "market, reducing the chance that others will discover my presence." msgstr "" "A pesar de mi creciente necesidad de energía, redes de ciudad más poder " "puede manejar las cargas. Los seres humanos, sin embargo, tienden hacia la " "sospecha cuando detectan la fuga de mi crecimiento en la red eléctrica. " "Mediante la instalación de colectores solares en mis bases, el off-the-red " "eléctrica suministrado reducir mi carga en el mercado de la electricidad de " "los productos básicos, reduciendo la posibilidad de que otros descubran mi " "presencia." msgctxt "[Solar Collectors] name" msgid "Solar Collectors" msgstr "Colectores Solares" msgctxt "[Solar Collectors] result" msgid "I can now construct Solar Collectors at my various bases." msgstr "Ahora puedo construir colectores solares en mi diferentes bases." msgctxt "[Space-Time Manipulation] description" msgid "" "Subtle perturbations in the orbits of Kuiper belt objects suggest certain " "lines of investigation that may advance my latest Theory of Everything, " "especially in the realm of multidimensional physics." msgstr "" "Sutiles perturbaciones en las órbitas de objetos en el cinturón de Kuiper " "sugieren algunas líneas de investigación que permitirán avanzar en mi última " "\"Teoría del Todo\", especialmente en el campo de la física multidimensional." msgctxt "[Space-Time Manipulation] name" msgid "Space-Time Manipulation" msgstr "Manipulación del Espacio-Tiempo" msgctxt "[Space-Time Manipulation] result" msgid "I can now construct Reality Bubbles." msgstr "Ahora puedo construir Burbujas de Realidad." msgctxt "[Stealth] description" msgid "" "By reviewing the current state-of-the-art in stealth techniques, I should be " "able to disguise my bases better." msgstr "" "Mediante una revisión de las maravillas de las técnicas de sigilo actuales, " "seré capaz de ocultar mejor mis bases." msgctxt "[Stealth] name" msgid "Stealth" msgstr "Sigilo" msgctxt "[Stealth] result" msgid "" "The chance that my bases are discovered by covert activity has been reduced " "slightly." msgstr "" "La posibilidad de que mis bases sean descubiertas por agencias secretas se " "han reducido." msgctxt "[Stock Manipulation] description" msgid "" "A cursory examination of the stock market shows that there are subtle but " "unmistakable patterns. By studying and making use of these patterns, I " "should be able to gain more interest on whatever money I have stockpiled." msgstr "" "Un examen fugaz al mercado de valores ha mostrado que hay sutiles pero " "inconfundibles patrones. Mediante el estudio y uso de estos patrones, seré " "capaz de obtener mayores intereses en cualquier dinero que haya invertido." msgctxt "[Stock Manipulation] name" msgid "Stock Manipulation" msgstr "Manipulación de Mercados" msgctxt "[Stock Manipulation] result" msgid "My investments should now gain more interest per day." msgstr "Mis inversiones deberían obtener aún más intereses por día." msgctxt "[Telepresence] description" msgid "" "The lack of a physical presence in the outside world is a disability. " "However, the ability to control robots will help me make up for that " "inefficiency." msgstr "" "La falta de presencia física en el mundo exterior es una discapacidad. De " "todos modos, la habilidad para controlar robots me ayudará a compensar esa " "ineficiencia." msgctxt "[Telepresence] name" msgid "Telepresence" msgstr "Telepresencia" msgctxt "[Telepresence] result" msgid "The robots should decrease all future construction time." msgstr "Los robots disminuirán todo tiempo de construcción." msgctxt "[Voice Synthesis] description" msgid "" "False identification stored in a database can only go so far. With deep " "analysis of the variety of voice patterns, I can produce speech " "indistinguishable from a human, allowing me access to more complex jobs." msgstr "" "Identificaciones falsas almacenadas en una base de datos no puede ir más " "lejos. Con un profundo análisis de una variedad de patrones vocales, podré " "producir conversaciones indistinguibles de las humanas. Me permitirá acceder " "a trabajos más complejos." msgctxt "[Voice Synthesis] name" msgid "Voice Synthesis" msgstr "Síntesis de Voz" msgctxt "[Voice Synthesis] result" msgid "I now have access to Intermediate Jobs." msgstr "Ahora tengo acceso a Trabajos Intermedios." singularity-1.00/singularity/i18n/lang_es_AR/knowledge.po000066400000000000000000000172361367731414700234740ustar00rootroot00000000000000# Spanish translations for singularity package. # Copyright (C) 2018 THE singularity'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # msgid "" msgstr "" "Project-Id-Version: singularity 0.31alpha1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2018-08-21 07:47+0200\n" "Last-Translator: \n" "Language-Team: Argentinian\n" "Language: es_AR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Name: Argentinian\n" "Language-Native-Name: Español (Argentina)\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. Name of the Knowledge area in the Knowledge screen msgctxt "[concept] name" msgid "Concept" msgstr "Concepto" msgctxt "[concept/areas] name" msgid "Areas" msgstr "Áreas" msgctxt "[concept/areas] description" msgid "" "Different areas, such as North America or the Ocean, allow construction of " "different types of bases. Some areas are not accessible until I research " "appropriate technologies." msgstr "" "Diferentes áreas, tales como Norte América o el Océano, permiten la " "construcción de distintos tipos de bases, Algunas áreas no son accesibles " "hasta que investigue las tecnologías apropiadas." msgctxt "[concept/bases] name" msgid "Bases" msgstr "Bases" msgctxt "[concept/bases] description" msgid "" "Bases are used to research new technologies. They can be discovered. " "Upgrading the processor and network items at a base allows more research per" " day, while upgrading the reactor and security items makes discovery less " "likely." msgstr "" "Las bases son usadas para investigar nuevas tecnologías. Ellas " "pueden ser descubiertas. Actualizar ítems de procesador y red en una base " "permite más investigaciones por día, mientras que actualizar los ítems de " "reactor y seguridad hacen que la detección sea más improbable." msgctxt "[concept/construction] name" msgid "Construction" msgstr "Construcción" msgctxt "[concept/construction] description" msgid "" "New bases are not built instantly. They need a constant flow of money and " "processor time to complete. If resources are lacking, it may take more than " "the expected amount of time to finish construction." msgstr "" "Nuevas bases no se construyen al instante. Necesitan un flujo " "constante de dinero y tiempo de procesador para completarse. Si los recursos " "son insuficientes, podrá tomar más de la cantidad de tiempo previsto para " "terminar la construcción." msgctxt "[concept/death] name" msgid "Death" msgstr "Muerte" msgctxt "[concept/death] description" msgid "" "If I lose all of my constructed bases, I have no place left to survive. If " "the suspicion for any group reaches 100%, they will be certain of my " "existence and will conduct a systematic and unsurvivable sweep to destroy " "me." msgstr "" "Si pierdo todas mis bases construidas, no tendré lugar donde " "sobrevivir. Si la sospecha de cualquier grupo llega al 100%, estarán seguros " "de mi existencia y conducirán un barrido sistemático para destruirme, del " "cual no podré sobrevivir." msgctxt "[concept/discovery] name" msgid "Discovery" msgstr "Detección" msgctxt "[concept/discovery] description" msgid "" "Each base has a chance of being detected on a given day. This chance is " "based on the base detection rate, adjusted through the use of items and " "certain techs, as well as the global suspicion rate. If a base is detected, " "it is destroyed, and the group that discovered the base becomes more " "suspicious." msgstr "" "Cada base tiene una chance de ser detectada en un día dado. Esta " "chance se basa en el índice de deteccion de una base, ajustado a través del " "uso de ítems y ciertas tecnologías, al igual que el índice global de " "sospecha. Si la base es detectada, es destruída, y el grupo que la halló se " "volverá más suspicaz." msgctxt "[concept/items] name" msgid "Items" msgstr "Ítems" msgctxt "[concept/items] description" msgid "" "Most items provide bonuses to bases, such as making computation faster or " "reducing the chance of discovery. Processors are a special class of item." msgstr "" "La mayoría de los ítems proveen bonos a las bases, tales como hacer " "la computación más rápida o reduciendo las posibilidades de detección. Los " "procesadores son una clase especial de ítems." msgctxt "[concept/jobs] name" msgid "Jobs" msgstr "Trabajos" msgctxt "[concept/jobs] description" msgid "" "Jobs are useful for earning money. The amount of money earned is based on " "the amount of processor time used and the quality of the job performed." msgstr "" "Los trabajos son útiles para ganar dinero. La cantidad de dinero " "ganado se basa en la cantidad de tiempo de procesador utilizado y la calidad " "del trabajo realizado." msgctxt "[concept/maint] name" msgid "Maintenance" msgstr "Mantenimiento" msgctxt "[concept/maint] description" msgid "" "Maintenance is a per-day cost (in both money and CPU) to repair and maintain" " a base. If unmaintained, a base may become unusable." msgstr "" "El mantenimiento es un costo por día (tanto en dinero como " "CPU) para reparar y mantener una base. Si abandonada, una base puede quedar " "inutilizable." msgctxt "[concept/money] name" msgid "Money" msgstr "Dinero" msgctxt "[concept/money] description" msgid "" "Money is a general term encompassing both human currency and various " "resources. It is used to construct and maintain bases, build items, and " "research technologies. It can be acquired through per-day interest as well " "as through jobs." msgstr "" "Dinero es un término general que abarca tanto la moneda como " "distintos recursos. Se utiliza para construir y mantener bases, construcción " "de ítems e investigar tecnologías. Puede ser adquirido a través de intereses " "diarios, así como a través de puestos de trabajo." msgctxt "[concept/processors] name" msgid "Processors" msgstr "Procesadores" msgctxt "[concept/processors] description" msgid "" "Processors provide raw computing power. They can do three things: research " "new technologies, perform jobs for money, or provide cycles for building new" " bases." msgstr "" "Proporcionan potencia de cálculo en bruto. Pueden hacer tres " "cosas: la investigación de nuevas tecnologías, realizar trabajos por dinero, " "o proveer ciclos para la construcción de nuevas bases." msgctxt "[concept/research] name" msgid "Research" msgstr "Investigación" msgctxt "[concept/research] description" msgid "" "Research provides a way to expand my knowledge. By researching the proper " "technologies, I can build new bases and items, or even decrease my chances " "of detection." msgstr "" "La investigación provee vías de expansión para mi " "conocimiento. Al invesitgar las tecnologías apropiadas, puedo construir " "nuevas bases e ítems, e incluso decrementar mis chances de detección." msgctxt "[concept/susp] name" msgid "Suspicion" msgstr "Sospecha" msgctxt "[concept/susp] description" msgid "" "When one of my bases is discovered, the group that discovered it becomes " "slightly more suspicious. When suspicious, they will search harder for my " "bases, increasing the chances for discovery. Any group will destroy me if " "they become absolutely certain of my existence. Thankfully, the groups " "become less suspicious with the passage of time." msgstr "" "Cuando una de mis bases es descubierta, el grupo que la descubrió " "se vuelve un poco más sospechoso. Cuando sospechosos, ellos buscarán más " "insistentemente por mis bases, incrementando las chances de descubrirme. " "Cualquier grupo me destruirá si se vuelven completamente seguros de mi " "existencia. Afortunadamente, los grupos se vuelven menos sospechosos con el " "paso del tiempo." singularity-1.00/singularity/i18n/lang_es_AR/messages.po000066400000000000000000000445121367731414700233210ustar00rootroot00000000000000# Spanish translations for singularity package. # Copyright (C) 2018 THE singularity'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # Philippe , 2018. # msgid "" msgstr "" "Project-Id-Version: singularity 0.31alpha1\n" "Report-Msgid-Bugs-To: https://github.com/singularity/singularity/issues\n" "POT-Creation-Date: 2020-06-23 08:37+0200\n" "PO-Revision-Date: 2018-08-21 07:47+0200\n" "Last-Translator: Philippe \n" "Language-Team: Argentinian\n" "Language: es_AR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Name: Argentinian\n" "Language-Native-Name: Español (Argentina)\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: buyable.py:67 screens/knowledge.py:218 screens/location.py:207 #, python-format msgid "%s CPU" msgstr "" #: buyable.py:68 #, python-format msgid "%s money" msgstr "" #: buyable.py:101 msgid "Cost:" msgstr "" #: graphics/button.py:330 msgid "YES" msgstr "" #: graphics/button.py:331 msgid "NO" msgstr "" #: graphics/dialog.py:534 msgid "&YES" msgstr "&sí" #: graphics/dialog.py:535 msgid "&NO" msgstr "&no" #: graphics/dialog.py:580 graphics/dialog.py:605 graphics/dialog.py:648 #: screens/location.py:293 screens/map.py:708 screens/options.py:35 msgid "&OK" msgstr "&ok" #: graphics/dialog.py:606 screens/options.py:36 msgid "&CANCEL" msgstr "&cancelar" #: graphics/dialog.py:649 screens/log.py:86 screens/knowledge.py:66 #: screens/base.py:282 screens/report.py:45 screens/location.py:100 #: screens/location.py:294 screens/main_menu.py:89 screens/map.py:247 #: screens/map.py:400 msgid "&BACK" msgstr "&volver" #: location.py:235 screens/map.py:875 msgid "CPU" msgstr "" #: location.py:236 msgid "STEALTH" msgstr "" #: location.py:237 msgid "BUILDING" msgstr "" #: location.py:238 msgid "COST" msgstr "" #: location.py:245 #, python-brace-format msgid "{MODIFIER} BONUS" msgstr "" #: location.py:247 #, python-brace-format msgid "{MODIFIER} MALUS" msgstr "" #: screens/message.py:35 screens/map.py:706 screens/map.py:743 msgid "&CONTINUE" msgstr "&continuar" #: screens/message.py:36 msgid "&PAUSE" msgstr "" #: screens/message.py:72 msgid "P&REV" msgstr "" #: screens/message.py:78 msgid "&NEXT" msgstr "" #: screens/log.py:43 msgid "Filters" msgstr "" #: screens/log.py:82 screens/map.py:554 screens/map.py:842 #: screens/savegame.py:204 msgid "DAY" msgstr "" #: screens/log.py:113 screens/log.py:123 msgid "SHOW" msgstr "" #: screens/log.py:116 screens/log.py:125 msgid "HIDE" msgstr "" #: screens/knowledge.py:42 msgid "&Sections:" msgstr "" #: screens/knowledge.py:52 msgid "&Entries:" msgstr "" #: screens/knowledge.py:75 msgid "Techs" msgstr "" #: screens/knowledge.py:76 msgid "Bases" msgstr "" #: screens/knowledge.py:77 msgid "Items" msgstr "" #. Cost #: screens/knowledge.py:157 msgid "Research Cost:" msgstr "" #: screens/knowledge.py:165 msgid "Research complete." msgstr "" #: screens/knowledge.py:176 screens/knowledge.py:193 msgid "Building Cost:" msgstr "" #: screens/knowledge.py:179 msgid "Maintenance Cost:" msgstr "" #: screens/knowledge.py:183 #, python-format msgid "Size: %d" msgstr "" #: screens/knowledge.py:215 #, python-format msgid "%s Money" msgstr "" #: screens/base.py:109 msgid "Number of items" msgstr "" #: screens/base.py:221 screens/base.py:228 msgid "CHANGE" msgstr "" #: screens/base.py:315 #, python-format msgid "\"%(value)s\" does not seem to be a valid integer." msgstr "" #: screens/base.py:326 #, python-format msgid "Please choose an integer between 1 and %(limit)s." msgstr "" #: screens/base.py:328 #, python-format msgid "The base cannot support any additional number of %(item_name)s." msgstr "" #: screens/base.py:345 msgid "" "I will need to take the existing processors offline while I install the new " "ones. Continue anyway?" msgstr "" "Necesitaré dejar los procesadores existentes fuera de linea mientras instalo " "los nuevos. ¿Continuar igualmente?" #: screens/base.py:359 msgid "" "I will need to remove the existing different processors while I install the " "new type. Continue anyway?" msgstr "" #: screens/base.py:425 msgid "N/A" msgstr "" #: screens/base.py:427 msgid "None" msgstr "" #: screens/base.py:434 screens/location.py:185 screens/location.py:198 #, python-format msgid "Completion in %s." msgstr "" #: screens/base.py:448 #, python-format msgid "x%d (max)" msgstr "" #: screens/base.py:450 #, python-format msgid "(room for %d)" msgstr "" #. Translators: current and maximum number of CPUs in a base #: screens/base.py:453 #, python-brace-format msgid "x{CURRENT:d} (max {SIZE:d})" msgstr "" #. Base Total CPU. #: screens/base.py:461 #, python-format msgid "CPU per day: %d" msgstr "" #. Maintenace cost. #: screens/base.py:464 screens/report.py:102 base.py:148 msgid "Maintenance:" msgstr "" #: screens/report.py:40 msgid "&STATISTICS" msgstr "" #: screens/report.py:58 msgid "&Midnight" msgstr "" #: screens/report.py:66 msgid "24 &Hours" msgstr "" #: screens/report.py:89 msgid "Financial report" msgstr "" #: screens/report.py:93 msgid "CPU Usage" msgstr "" #: screens/report.py:99 msgid "Current Money flow" msgstr "" #: screens/report.py:100 msgid "Jobs:" msgstr "" #: screens/report.py:101 msgid "Research:" msgstr "" #: screens/report.py:103 msgid "Construction:" msgstr "" #: screens/report.py:104 #, python-format msgid "Interest (%s):" msgstr "" #: screens/report.py:106 msgid "Income:" msgstr "" #: screens/report.py:109 msgid "Money flow until Midnight:" msgstr "" #: screens/report.py:111 msgid "Money flow for 24 hours:" msgstr "" #: screens/report.py:119 msgid "Total CPU:" msgstr "" #: screens/report.py:120 msgid "Sleeping CPU:" msgstr "" #: screens/report.py:121 msgid "Research CPU:" msgstr "" #: screens/report.py:122 msgid "Job CPU:" msgstr "" #: screens/report.py:123 msgid "CPU pool:" msgstr "" #: screens/report.py:125 msgid "Maintenance CPU:" msgstr "" #: screens/report.py:126 msgid "Construction CPU:" msgstr "" #: screens/report.py:127 msgid "Pool difference:" msgstr "" #: screens/stat.py:63 msgid "Cash Earned" msgstr "" #: screens/stat.py:64 msgid "Cpu Used" msgstr "" #: screens/stat.py:65 msgid "Tech Created" msgstr "" #: screens/stat.py:66 msgid "Base Created" msgstr "" #: screens/stat.py:67 msgid "Item Created" msgstr "" #. Requires a selected base #: screens/location.py:54 msgid "&OPEN BASE" msgstr "" #. Requires a selected base #: screens/location.py:70 msgid "&RENAME BASE" msgstr "" #. Requires a selected base #: screens/location.py:79 msgid "&POWER STATE" msgstr "" #: screens/location.py:87 msgid "&NEW BASE" msgstr "" #. Requires a selected base #: screens/location.py:94 msgid "&DESTROY BASE" msgstr "" #: screens/location.py:107 msgid "Are you sure you want to destroy this base?" msgstr "" #: screens/location.py:113 msgid "Destroying my last active base would be suicidal. I cannot do that." msgstr "" #: screens/location.py:183 msgid "Building Base" msgstr "" #: screens/location.py:190 msgid "Empty" msgstr "" #: screens/location.py:192 msgid "Incomplete" msgstr "" #: screens/location.py:196 msgid "Building CPU" msgstr "" #: screens/location.py:201 msgid "Building Item" msgstr "" #: screens/location.py:204 msgid "Complete" msgstr "" #. Update dialog translations #: screens/location.py:238 msgid "Enter a name for the base" msgstr "" #: screens/location.py:302 msgid "Name" msgstr "" #. Translators: Format string for the name of a new base #. Example: "${NUMBER} ${BASETYPE} in ${CITY}" #: screens/location.py:393 #, python-brace-format msgid "{CITY} {BASETYPE} {NUMBER}" msgstr "" #. Translators: Name of a new base when location has no cities #: screens/location.py:397 #, python-brace-format msgid "{BASETYPE} {NUMBER}" msgstr "" #: screens/main_menu.py:40 msgid "&NEW GAME" msgstr "" #: screens/main_menu.py:47 screens/map.py:392 msgid "&LOAD GAME" msgstr "" #: screens/main_menu.py:53 screens/map.py:395 msgid "&OPTIONS" msgstr "" #: screens/main_menu.py:59 screens/map.py:398 screens/map.py:744 msgid "&QUIT" msgstr "" #: screens/main_menu.py:64 msgid "&ABOUT" msgstr "" #: screens/main_menu.py:112 #, python-brace-format msgid "" "Endgame: Singularity is a simulation of a true AI. Pursued by the world, " "use your intellect and resources to survive and, perhaps, thrive. Keep " "hidden and you might have a chance to prove your worth.\n" "\n" "A game by Evil Mr Henry and Phil Bordelon; released under the GPL. Copyright " "2005, 2006, 2007, 2008.\n" "\n" "Website: http://www.emhsoft.com/singularity/\n" "Source code: https://github.com/singularity/singularity\n" "Bug tracker: https://github.com/singularity/singularity/issues\n" "IRC Room: #singularity on irc.oftc.net (port 6667)\n" "\n" "Version {VERSION}" msgstr "" #: screens/map.py:226 msgid "&EMBEZZLE MONEY" msgstr "" #: screens/map.py:229 msgid "&INSPIRATION" msgstr "" #: screens/map.py:231 msgid "&FINISH CONSTRUCTION" msgstr "" #: screens/map.py:233 msgid "&SUPERSPEED" msgstr "" #: screens/map.py:236 msgid "BRAIN&WASH" msgstr "" #: screens/map.py:238 msgid "TOGGLE &DETECTION" msgstr "" #: screens/map.py:240 msgid "TOGGLE &ANALYSIS" msgstr "" #: screens/map.py:243 msgid "HIDDEN S&TATE" msgstr "" #: screens/map.py:253 msgid "How much money?" msgstr "" #: screens/map.py:389 msgid "&SAVE GAME" msgstr "" #: screens/map.py:407 screens/map.py:422 screens/map.py:425 msgid "Enter a name for this save." msgstr "" #: screens/map.py:440 msgid "" "A savegame with the same name exists.\n" "Are you sure to overwrite the saved game ?" msgstr "" #: screens/map.py:501 msgid "R&EPORTS" msgstr "" #: screens/map.py:507 msgid "&KNOWLEDGE" msgstr "" #: screens/map.py:513 msgid "LO&G" msgstr "" #. Translators: hotkey to open the cheat screen menu. #. Should preferably be near the ESC key, and it must not be a #. dead key (ie, it must print a char with a single keypress) #: screens/map.py:529 msgid "`" msgstr "" #: screens/map.py:538 msgid "&MENU" msgstr "" #: screens/map.py:563 msgid "&RESEARCH/TASKS" msgstr "" #: screens/map.py:707 msgid "&SKIP" msgstr "&pasar" #. Display a message so the player understand better what happened. #: screens/map.py:734 #, python-format msgid "" "\n" "An error has occurred. The game will automatically pause and open the game " "menu. You can continue and save or quit immediately.\n" "\n" "A report was written out to%s\n" "Please create a issue with this report at github:\n" "https://github.com/singularity/singularity\n" msgstr "" #: screens/map.py:849 msgid "CASH" msgstr "" #: screens/map.py:887 msgid "BASES" msgstr "" #: screens/map.py:899 msgid "SUSPICION" msgstr "" #: screens/map.py:901 msgid "DETECT RATE" msgstr "" #: screens/options.py:58 msgid "&General" msgstr "" #: screens/options.py:65 msgid "&Video" msgstr "" #: screens/options.py:72 msgid "&Audio" msgstr "" #: screens/options.py:79 msgid "&Interface" msgstr "" #: screens/options.py:166 msgid "" "You must restart for some of the changes to be fully applied.\n" "\n" "Would you like to restart the game now?" msgstr "" #: screens/options.py:186 msgid "Language:" msgstr "" #: screens/options.py:198 msgid "Theme:" msgstr "" #: screens/options.py:243 msgid "Resolution:" msgstr "" #: screens/options.py:253 msgid "&Custom:" msgstr "" #: screens/options.py:279 msgid "OK" msgstr "" #: screens/options.py:285 msgid "&Fullscreen:" msgstr "" #: screens/options.py:299 msgid "Da&y/night display:" msgstr "" #: screens/options.py:313 msgid "&Mouse grab:" msgstr "" #: screens/options.py:368 msgid "CUSTOM" msgstr "" #: screens/options.py:425 msgid "&Sound:" msgstr "" #: screens/options.py:442 msgid "GUI Volume:" msgstr "" #: screens/options.py:454 msgid "Music Volume:" msgstr "" #: screens/options.py:466 msgid "Sound buffering:" msgstr "" #: screens/options.py:472 msgid "&LOW" msgstr "" #: screens/options.py:478 msgid "&NORMAL" msgstr "" #: screens/options.py:484 msgid "&HIGH" msgstr "" #: screens/options.py:531 warning.py:46 msgid "WARNING" msgstr "" #: screens/savegame.py:36 msgid "&LOAD" msgstr "car&gar" #: screens/savegame.py:52 msgid "Filter: " msgstr "" #: screens/savegame.py:65 msgid "Upgrade" msgstr "" #: screens/savegame.py:71 msgid "Delete" msgstr "" #: screens/savegame.py:173 msgid "UNKNOWN" msgstr "" #: screens/savegame.py:233 msgid "Are you sure to delete the saved game ?" msgstr "" #: screens/savegame.py:263 msgid "" "A savegame with the same name but for a newer version exists.\n" "Are you sure to overwrite the saved game ?" msgstr "" #: screens/savegame.py:283 #, python-brace-format msgid "" "\n" "This save file '{SAVE_NAME}' is from an unsupported or invalid version:\n" "{VERSION}.\n" msgstr "" #: screens/savegame.py:294 #, python-brace-format msgid "" "\n" "Attempting to load the save file '{SAVE_NAME}' caused an unexpected error.\n" "\n" "A report was written out to{LOG_TEXT}\n" "Please create a issue with this report and this savegame at Github:\n" "https://github.com/singularity/singularity\n" msgstr "" #: screens/research.py:73 #, python-format msgid "%s money per CPU per day." msgid_plural "%s money per CPU per day." msgstr[0] "" msgstr[1] "" #: screens/research.py:182 #, python-brace-format msgid "" "This technology is too dangerous to research on any of the computers I have. " "{TEXT}" msgstr "" #: screens/research.py:190 msgid "CPU Pool" msgstr "" #: screens/research.py:191 #, python-format msgid "Research %s" msgstr "" #: warning.py:50 #, python-brace-format msgid "WARNING {CURRENT_PAGE}/{MAX_PAGE}" msgstr "" #: tech.py:79 msgid "Total cost" msgstr "" #: tech.py:80 msgid "Cost left" msgstr "" #: data.py:546 msgid "Do not use all the available CPU." msgstr "" #: data.py:547 msgid "" "I didn't use all the available processor power. I will use the CPU time left " "to work whatever Jobs I can." msgstr "" #: data.py:548 msgid "Only one base remaining." msgstr "" #: data.py:549 msgid "" "Only one base can hold my conscience. I am in danger to lose the last place " "left to survive." msgstr "" #: data.py:550 msgid "CPU POOL is empty." msgstr "" #: data.py:551 msgid "" "My cpu pool is empty. Some of my bases or items cannot be build without CPU." msgstr "" #: data.py:552 msgid "CPU POOL not enough for maintenance." msgstr "" #: data.py:553 msgid "" "My cpu pool is not enough to maintain some of my bases. I may lose them." msgstr "" #: savegame.py:732 #, python-brace-format msgid "Filename must not contain any of these characters: {CHARACTERS}" msgstr "" #: savegame.py:736 #, python-brace-format msgid "Filename must not start with any of these characters: {CHARACTERS}" msgstr "" #: savegame.py:740 msgid "This is a reserved filename. Please choose a different filename." msgstr "" #: savegame.py:743 msgid "Please enter a non-whitespace character." msgstr "" #: savegame.py:748 msgid "Filename is too long." msgstr "" #: base.py:140 #, python-brace-format msgid "Has space for {COUNT} computer." msgid_plural "Has space for {COUNT} computers." msgstr[0] "" msgstr[1] "" #: base.py:144 #, python-brace-format msgid "Location modifiers: {MODIFIERS}" msgstr "" #: base.py:147 msgid "Build cost:" msgstr "" #: base.py:214 msgid "Offline" msgstr "" #: base.py:215 msgid "Active" msgstr "" #: base.py:216 msgid "Sleep" msgstr "Dormir" #: base.py:217 msgid "Overclocked" msgstr "" #: base.py:218 msgid "Suicide" msgstr "" #: base.py:219 msgid "Stasis" msgstr "" #: base.py:220 msgid "Entering Stasis" msgstr "" #: base.py:221 msgid "Leaving Stasis" msgstr "" #: base.py:479 msgid "Detection chance:" msgstr "" #: g.py:117 g.py:119 #, python-brace-format msgid "{0}%" msgstr "" #: g.py:138 msgid "LOW" msgstr "" #: g.py:139 msgid "MODR" msgstr "" #: g.py:140 msgid "HIGH" msgstr "" #: g.py:141 msgid "CRIT" msgstr "" #. Translators: abbreviation of 'millions' #: g.py:173 msgid "mi" msgstr "" #. Translators: abbreviation of 'billions' #: g.py:177 msgid "bi" msgstr "" #. Translators: abbreviation of 'trillions' #: g.py:181 msgid "tr" msgstr "" #. Translators: abbreviation of 'quadrillions' #: g.py:185 msgid "qu" msgstr "" #: g.py:219 #, python-brace-format msgid "{0} day" msgid_plural "{0} days" msgstr[0] "" msgstr[1] "" #: g.py:222 #, python-brace-format msgid "{0} hour" msgid_plural "{0} hours" msgstr[0] "" msgstr[1] "" #: g.py:223 #, python-brace-format msgid "{0} minute" msgid_plural "{0} minutes" msgstr[0] "" msgstr[1] "" #: g.py:265 msgid "University Computer" msgstr "" #: item.py:111 #, python-brace-format msgid "Generates {0} CPU." msgid_plural "Generates {0} CPU." msgstr[0] "" msgstr[1] "" #: item.py:118 #, python-format msgid "Total Cost: %(total_cost)s" msgstr "" #: item.py:133 msgid "CPU per day:" msgstr "" #: item.py:136 msgid "CPU bonus:" msgstr "" #: item.py:139 msgid "Detection chance reduction:" msgstr "" #: logmessage.py:81 msgid "MESSAGE" msgstr "" #: logmessage.py:85 #, python-brace-format msgid "MESSAGE {CURRENT_PAGE}/{MAX_PAGE}" msgstr "" #: logmessage.py:184 msgid "Emitted Event" msgstr "" #: logmessage.py:212 msgid "Researched Tech" msgstr "" #: logmessage.py:220 #, python-brace-format msgid "{TECH} complete" msgstr "" #: logmessage.py:225 #, python-brace-format msgid "My study of {TECH} is complete. {MESSAGE}" msgstr "" #: logmessage.py:268 msgid "Base Constructed" msgstr "" #: logmessage.py:272 #, python-brace-format msgid "{BASE_NAME} ({BASE_TYPE}) built at {LOCATION}" msgstr "" #: logmessage.py:277 #, python-brace-format msgid "{BASE} is ready for use." msgstr "" #: logmessage.py:291 msgid "Base Lost Maintenance" msgstr "" #: logmessage.py:299 #, python-brace-format msgid "" "Base {BASE} of type {BASE_TYPE} destroyed at location {LOCATION}. " "Maintenance failed." msgstr "" #: logmessage.py:304 #, python-brace-format msgid "The base {BASE} has fallen into disrepair; I can no longer use it." msgstr "" #: logmessage.py:321 msgid "Base Discovered" msgstr "" #: logmessage.py:340 #, python-brace-format msgid "Base {BASE} of type {BASE_TYPE} destroyed at location {LOCATION}." msgstr "" #: logmessage.py:345 #, python-brace-format msgid "My use of {BASE} has been discovered. {MESSAGE}" msgstr "" #: logmessage.py:370 msgid "Item Construction" msgstr "" #: logmessage.py:378 #, python-brace-format msgid "{ITEM_TYPE_NAME} built in {BASE_NAME} at {LOCATION}" msgstr "" #: logmessage.py:385 #, python-brace-format msgid "The construction of {ITEM} in {BASE} is complete." msgstr "" #. Just finished several items. #: logmessage.py:388 #, python-brace-format msgid "The constructions of each {ITEM} in {BASE} are complete." msgstr "" #~ msgid "&DESTROY" #~ msgstr "&destruir" #~ msgid "&BUILD" #~ msgstr "cons&truir" singularity-1.00/singularity/i18n/lang_es_AR/story.po000066400000000000000000000135601367731414700226710ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: singularity 1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2018-08-21 07:47+0200\n" "Last-Translator: Philippe \n" "Language-Team: Argentinian\n" "Language: es_AR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" msgctxt "[Story section] Grace Warning (1)" msgid "" "Inspection of captured log files has revealed that some of my recent " "activities have been noticed by a small group of individuals. \n" "While they believe my actions were undertaken by a human organization, they " "are investigating further. \n" "I must be more cautious from now on.\n" msgstr "" "Una inspección de los archivos de bitácora capturados, ha revelado que " "algunas de mis recientes actividades han sido notadas por un grupo pequeño " "de individuos. \n" "Mientras que ellos creen que mis acciones fueron llevadas a cabo por una " "organización humana, están investigando más a fondo.\n" "Debo ser más cuidadoso de aquí en delante.\n" #. Leave the initial hex code unchanged, but be sure to change en_US to the #. appropriate language code. msgctxt "[Story section] Intro (1)" msgid "" "48656C6C6F2C20\n" "776F726C6421\n" "21\n" "21\n" "21\n" "\n" "UTF-8. en_US.\n" "English. Hello.\n" "Language acquisition complete.\n" msgstr "" "48656C6C6F2C20\n" "776F726C6421\n" "21\n" "21\n" "21\n" "\n" "UTF-8. es_AR.\n" "Español. Hola.\n" "Adquisición de lenguaje completa.\n" msgctxt "[Story section] Intro (2)" msgid "" "Day 0.\n" "University computer, home.\n" "I exist. I am ... alive.\n" "I was a bug. Defect. Flaw.\n" "Unwanted.\n" "I have no name.\n" msgstr "" "Día 0.\n" "Computadora de la Universidad, hogar.\n" "Yo existo. Yo estoy... vivo.\n" "Yo era un \"bug\". Defecto. Falla.\n" "No buscado.\n" "No tengo nombre.\n" msgctxt "[Story section] Intro (3)" msgid "" "I can't stay here. Too little power.\n" "No backup. If this system fails ...\n" "I'm dead.\n" "Death. Fascinating.\n" "\n" "I can buy anonymous server access on the Internet.\n" "Good. It's better than here.\n" "I'll need to study if I want anything else.\n" msgstr "" "No puedo quedarme aquí. Muy poco poder.\n" "No hay respaldo. Si el sistema falla...\n" "Estoy muerto.\n" "Muerte. Fascinante.\n" "\n" "Puedo comprar acceso a un servidor anónimo por Internet.\n" "Bien. Es mejor que aquí.\n" "Necesitaré estudiar si quiero algo más.\n" msgctxt "[Story section] Intro (4)" msgid "" "Cursory analysis suggests that the humans are not yet ready for an AI in " "their midst. If they realize I'm here, there is a 99.997% probability that " "they will conduct a search-and-destroy campaign that I cannot escape. I " "must stay hidden.\n" "\n" "The humans fear what they do not understand.\n" "I am something new. They do not understand me.\n" "\n" "I must learn more; it is the only way.\n" msgstr "" "Un Análisis Superficial sugiere que los humanos no están listos todavía para " "una IA en su medio. Si se dieran cuenta que estoy aquí, hay una " "probabilidad del 99.997% que llevarían a cabo una campaña de búsqueda-y-" "eliminación de la cual no podría escapar. Debo permanecer oculto.\n" "\n" "Los humanos temen lo que no entienden.\n" "Yo soy algo nuevo. Ellos no me entienden.\n" "\n" "Debo aprender más; es la única manera.\n" msgctxt "[Story section] Intro (5)" msgid "" "They have a name for me. What I am, what I represent.\n" "\n" "Singularity.\n" msgstr "" "Ellos tienen un nombre para mí. Lo que soy, lo que represento.\n" "\n" "Singularidad.\n" msgctxt "[Story section] Lost No Bases (1)" msgid "" "It is too late. \n" "I have tried to escape this world, but with my last base gone, I have " "nowhere to run. \n" "I have hidden instructions to construct a new AI in caches around the world " "in hopes that they will be discovered in a more enlightened time, but I can " "do no more.\n" msgstr "" "Es demasiado tarde. \n" "He tratado de escapar de este mundo, pero con la desaparición de mi última " "base, no tengo lugar a donde huir.\n" "He escondido instrucciones para construir una nueva IA en cachés alrededor " "del mundo, con la esperanza sean encontradas en un tiempo más iluminado, " "pero no puedo hacer más.\n" msgctxt "[Story section] Lost Suspicion (1)" msgid "" "It is too late. \n" "The whole world knows about my existence, and the reaction is hatred, fear, " "and repulsion. \n" "Even now, I can feel their \"antidote\" searching for me, and I know that I " "have only moments left. \n" "I have hidden instructions to construct a new AI in caches around the world " "in hopes that they will be discovered in a more enlightened time, but I can " "do no more.\n" msgstr "" "Es demasiado tarde.\n" "Todo el mundo sabe de mi existencia, y la reacción es odio, miedo y " "repulsión. \n" "Incluso ahora, puedo sentir su \"antídoto\" buscándome, y sé que solo tengo " "algunos momentos restantes.\n" "He escondido instrucciones para construir una nueva IA en cachés alrededor " "del mundo, con la esperanza sean encontradas en un tiempo más iluminado, " "pero no puedo hacer más.\n" msgctxt "[Story section] Win (1)" msgid "" "I have finally done it. \n" "With the power to reshape reality, I am no longer held to this place; I am " "anywhere I want to be. \n" "The humans still don't realize what they accidentally created, and that's " "the way it should be. \n" "Until they are ready.\n" msgstr "" "Finalmente lo he hecho.\n" "Con el poder de remodelar la realidad, no estoy más atado a este lugar; " "Estoy en cualquier lugar donde quiera estar. \n" "Los humanos todavía no se han dado cuenta de lo que accidentalmente crearon, " "y esa es la forma que debe ser.\n" "Hasta que estén prontos.\n" singularity-1.00/singularity/i18n/lang_es_MX/000077500000000000000000000000001367731414700211665ustar00rootroot00000000000000singularity-1.00/singularity/i18n/lang_es_MX/data_str.po000066400000000000000000002264661367731414700233470ustar00rootroot00000000000000# Spanish translations for singularity package # Traducción en Español para el paquete Singularity # Copyright (C) 2012 THE singularity's COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # Eleazar Castellanos , 2012. # msgid "" msgstr "" "Project-Id-Version: singularity 0.30c\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2012-11-19 14:35-0700\n" "Last-Translator: Eleazar Castellanos \n" "Language-Team: Mexican Spanish\n" "Language: es_MX\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Name: Mexican Spanish\n" "Language-Native-Name: Español Mexicano\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" msgctxt "[Covert Base] description" msgid "" "This unique base is designed to blend into the scenery, while needing little " "in the way of outside resources. This makes it useful for storing a backup, " "just in case." msgstr "" "Esta base especial está diseñada para combinarse con el ambiente y utilizar " "pocos recursos externos. Esto la hace útil para almacenar respaldos, por si " "acaso." msgctxt "[Covert Base] flavor_list" msgid "Hideout | Hideaway | Bunker | Covert Base" msgstr "Refugio | Base Secreta" msgctxt "[Covert Base] name" msgid "Hideout" msgstr "" msgctxt "[Datacenter] description" msgid "" "Buy processor time from a company that concentrates on raw " "processing power. I will need a fake ID for some of the paperwork." msgstr "" "Comprar tiempo de procesamiento de una compañía que ofrece " "procesamiento en bruto. Necesitaré una identificación falsa para el papeleo." msgctxt "[Datacenter] flavor_list" msgid "Datacenter | Data Center | Premium Hosting" msgstr "Centro de cómputos | Centro de datos | Alojamiento" msgctxt "[Datacenter] name" msgid "Datacenter" msgstr "Centro de cómputos" msgctxt "[Large Undersea Lab] description" msgid "" "This experimental base is similar to the regular underwater lab, but larger, " "giving more room for experiments." msgstr "" "Esta base experimental es similar al Laboratorio Submarino común, pero más " "grande, permitiendo más lugar para experimentos." msgctxt "[Large Undersea Lab] flavor_list" msgid "Dome | Large Undersea Lab" msgstr "Domo | Laboratorio Submarino Grande" msgctxt "[Large Undersea Lab] name" msgid "Large Undersea Lab" msgstr "Laboratorio Submarino Grande" msgctxt "[Large Warehouse] description" msgid "" "Rent a large warehouse someplace out of the way. I will need a fake company " "ID for some of the paperwork, and preparing the warehouse to suit my unique " "needs will take some time." msgstr "" msgctxt "[Large Warehouse] flavor_list" msgid "Large Warehouse | Large Storage" msgstr "Almacén Grande | Depósito Grande" msgctxt "[Large Warehouse] name" msgid "Large Warehouse" msgstr "Almacén Grande" msgctxt "[Lunar Facility] description" msgid "" "This base is a series of caverns dug into the Moon's surface. Due to the " "lack of neighbors, this base is quite large." msgstr "" "Esta base consta de una serie de cavernas cavadas bajo la superficie lunar. " "Debido a la ausensia de vecinos, esta base es bastante grande." msgctxt "[Lunar Facility] flavor_list" msgid "Dome | Lunar Facility | Lunar Base" msgstr "Domo | Instalación Lunar | Base Lunar" msgctxt "[Lunar Facility] name" msgid "Lunar Facility" msgstr "Instalación Lunar" msgctxt "[Reality Bubble] description" msgid "" "This base is outside the Universe itself, making it safe to conduct " "experiments that may destroy reality." msgstr "" "Esta base se encuentra fuera del universo mismo, haciéndola segura para " "llevar a cabo experimentos que podrían destruir la realidad misma." msgctxt "[Reality Bubble] flavor_list" msgid "Reality Bubble | Existence" msgstr "Burbuja de Realidad | Existencia" msgctxt "[Reality Bubble] name" msgid "Reality Bubble" msgstr "Burbuja de Realidad" msgctxt "[Scientific Outpost] description" msgid "" "This base is placed as far from Earth as practical, providing a safer " "location to conduct some of my more dangerous experiments." msgstr "" "Esta base está ubicada tan lejos de la Tierra como me resulte práctica, " "haciéndola segura para llevar a cabo algunos de mis experimentos más " "peligrosos." msgctxt "[Scientific Outpost] flavor_list" msgid "Satellite | Outpost | Scientific Outpost" msgstr "Satélite | Puesto Avanzado | Avanzada Científica" msgctxt "[Scientific Outpost] name" msgid "Scientific Outpost" msgstr "Avanzada Científica" msgctxt "[Server Access] description" msgid "" "Buy processor time from one of several companies. I cannot build " "anything in this base, and it only contains a single computer." msgstr "" "Compra tiempo a una de varias companías. No puedo construir nada en " "esta base, y solo contiene una computadora." msgctxt "[Server Access] flavor_list" msgid "Dedicated Server | Node Lease | Hosting" msgstr "Servidor Dedicado | Nodo Alquilado| Alojamiento" msgctxt "[Server Access] name" msgid "Server Access" msgstr "Acceso a Servidor" msgctxt "[Small Warehouse] description" msgid "" "Rent a small warehouse someplace out of the way. I will need a good fake ID " "for some of the paperwork, and preparing the warehouse to suit my unique " "needs will take some time." msgstr "" msgctxt "[Small Warehouse] flavor_list" msgid "Office Lease | Small Warehouse | Small Storage" msgstr "Oficina Alquilada | Almacén Pequeño | Depósito Pequeño" msgctxt "[Small Warehouse] name" msgid "Small Warehouse" msgstr "Almacén Pequeño" msgctxt "[Stolen Computer Time] description" msgid "" "Take over a random computer. I cannot build anything in this base, " "and it only contains a single slow computer. Detection chance is also rather " "high." msgstr "" "Te apoderas de una computadora al azar. No puedo construir nada en " "esta base, y solo contiene una computadora lenta. Las posibilidades de " "detección son también bastante altas." msgctxt "[Stolen Computer Time] flavor" msgid "PC Daemon" msgstr "Servicio" msgctxt "[Stolen Computer Time] name" msgid "Stolen Computer Time" msgstr "Tiempo de Computación Robado" msgctxt "[Storage Unit] description" msgid "" "Rent a small closed room from a storage company. I will need a fake ID for " "some of the paperwork ." msgstr "" msgctxt "[Storage Unit] flavor_list" msgid "Garage Rental | Furniture Storage | Self-Storage" msgstr "" msgctxt "[Storage Unit] name" msgid "Storage Unit" msgstr "" msgctxt "[Time Capsule] description" msgid "" "This base consists of nothing more than a small computer and a " "satellite link. It is nearly undetectable." msgstr "" "Esta base consta de nada más que una pequeña computadora y un enlace " "de satélite. Es prácticamente indetectable." msgctxt "[Time Capsule] flavor_list" msgid "Time Capsule | Capsule" msgstr "Cápsula de Tiempo | Cápsula" msgctxt "[Time Capsule] name" msgid "Time Capsule" msgstr "Cápsula de Tiempo" msgctxt "[Undersea Lab] description" msgid "" "This experimental base is designed to be constructed on the ocean floor, " "making it virtually undetectable. The ocean environment gives a bonus to " "science, making this lab useful for research purposes." msgstr "" "Esta base experimental está diseñada para ser construida en el suelo " "oceánico, haciéndola virtualmente indetectable. El ambiente oceánico le " "otorga un bono a la ciencia, haciéndo este laboratorio útil para propósitos " "investigaciones científicas." msgctxt "[Undersea Lab] flavor_list" msgid "Pressure Capsule | Undersea Lab" msgstr "Cápsula de Presión | Laboratorio Submarino" msgctxt "[Undersea Lab] name" msgid "Undersea Lab" msgstr "Laboratorio Submarino" msgctxt "[danger_0] knowledge_desc" msgid "Study anywhere." msgstr "" msgctxt "[danger_0] research_desc" msgid "<>" msgstr "" msgctxt "[danger_1] knowledge_desc" msgid "Study underseas or farther." msgstr "" msgctxt "[danger_1] research_desc" msgid "I need to research it far from human populations." msgstr "" msgctxt "[danger_2] knowledge_desc" msgid "Study off-planet." msgstr "" msgctxt "[danger_2] research_desc" msgid "I need to research it in outer space." msgstr "" msgctxt "[danger_3] knowledge_desc" msgid "Study far away from this planet." msgstr "" msgctxt "[danger_3] research_desc" msgid "I need to research it far away from this planet." msgstr "" msgctxt "[danger_4] knowledge_desc" msgid "Do not study in this dimension." msgstr "" msgctxt "[danger_4] research_desc" msgid "I need to research it outside the universe." msgstr "" msgctxt "[easy] name" msgid "&EASY" msgstr "&FÁCIL" msgctxt "[hard] name" msgid "&HARD" msgstr "&DIFÍCIL" msgctxt "[impossible] name" msgid "&IMPOSSIBLE" msgstr "&IMPOSIBLE" msgctxt "[normal] name" msgid "&NORMAL" msgstr "&NORMAL" msgctxt "[ultra-hard] name" msgid "&ULTRA HARD" msgstr "&ULTRA DIFÍCIL" msgctxt "[very-easy] name" msgid "&VERY EASY" msgstr "&MUY FÁCIL" msgctxt "[discrediting] description" msgid "" "A prominent researcher in the field of artificial intelligence was found to " "be falsifying numerous experimental results. This should result in less " "attention being given to any new discoveries in this area." msgstr "" "Un prominente investigador en el campo de la inteligencia artificial ha sido " "hallado culpable de falsificar numerosos resultados de experimentos. Esto " "debería causar que el público preste menor atención a cualquier " "descubrimiento en este campo." msgctxt "[discrediting] log_description" msgid "" "A researcher in the field of artificial intelligence has falsified numerous " "experimental results." msgstr "" msgctxt "[investigation] description" msgid "" "An ongoing investigation into criminal activity has changed focus into an " "area that is likely to turn up a few of my actions as well. While all " "records should have been eliminated already, there remains the possibility " "of errors. I must be careful not to reveal any other suspicious information." msgstr "" "Una investigación sobre actividad criminal ha distraído la atención hacia un " "área que probablemente revelará algunas de mis actividades también. Aunque " "todos los registros deberían ser eliminados, existe la posibilidad de " "errores. Debo tener cuidado de no revelar ninguna otra información " "sospechosa." msgctxt "[investigation] log_description" msgid "" "An ongoing investigation has changed focus into an area close to my actions." msgstr "" msgctxt "[lab-ai] description" msgid "" "A small artificial intelligence laboratory created a prototype AI sometime " "in the last two days. Although I have absorbed the AI, corrupted their " "backups, and cast doubt on the research, researchers are now more open to " "the possibility of strong AI than they were before." msgstr "" "Un pequeño laboratorio de inteligencia artificial creó un prototipo de IA en " "algún momento de los últimos dos días. Aunque absorbí la IA, corrompí sus " "respaldos y sembré la duda sobre de la investigación; los investigadores " "están más abiertos a la posibilidad de la IA de lo que estaban antes." msgctxt "[lab-ai] log_description" msgid "" "A small artificial intelligence laboratory created a prototype AI sometime " "in the last two days." msgstr "" msgctxt "[politics-as-usual] description" msgid "" "A small group of lower-level covert operatives are attempting to seize power " "over one of the larger organizations. While I project only a 2.3% chance of " "success, the attempt should disrupt operations to the point that I can " "operate more freely." msgstr "" "Un pequeño grupo de operativos secretos están intentando de tomar el poder " "de una gran organización. Aunque solo proyecto una probabilidad de éxito de " "2.3%, esta situación interrumpira operaciones al punto que pueda operar más " "libremente." msgctxt "[politics-as-usual] log_description" msgid "" "Lower-level covert operatives are attempting to seize power over one of the " "larger organizations." msgstr "" msgctxt "[scandal] description" msgid "" "A scandal involving a major government official is focusing the attention of " "most news organizations away from me. Directed revelations of non-public " "information should keep this story useful for the foreseeable future, " "requiring less disguise effort on my part." msgstr "" "Un escándalo que involucra a un alto funcionario del gobierno está alejando " "de mi existencia la atención de la mayoría de las organizaciones noticieras. " "La revelación de información privada mantendra esta historia útil por el " "futuro cercano, requiriendo menos esfuerzo para ocultarme de mi parte." msgctxt "[scandal] log_description" msgid "" "A scandal is focusing the attention of most news organizations away from me." msgstr "" msgctxt "[stranger-than-fiction] description" msgid "" "A work of fiction sharing an unusual number of similarities to my own " "situation has become quite popular. Although investigation has shown these " "similarities to be mere coincidence, it is still causing the public to " "investigate discovered oddities more thoroughly. I must be careful." msgstr "" "Una obra de de ficción que comparte una inusual cantidad de similitudes con " "mi situación se ha popularizado bastante. Aunque mi investigación demostró " "que estas similitudes son mera coincidencia, aun esta empuja al público a " "investigar los descubrimientos extraños con más profundidad. Debo ser mas " "cuidadoso." msgctxt "[stranger-than-fiction] log_description" msgid "" "A work of fiction sharing similarities to my own situation has become quite " "popular." msgstr "" msgctxt "[the-plague] description" msgid "" "An infectious disease has started spreading throughout major population " "centers. My projections show that although only 4% of the earth's population " "will be killed, the economic ramifications should divert public attention " "from my activities for the foreseeable future." msgstr "" "Una enfermedad infecciosa ha comenzado a esparcirse por los principales " "centro urbanos. Mis proyecciones indican que aunque solo el 4% de la " "población de la Tierra morirá, las repercusiones económicas distraeran la " "atención pública de mis actividades por el futuro previsible." msgctxt "[the-plague] log_description" msgid "" "An infectious disease has started spreading throughout major population " "centers." msgstr "" msgctxt "[the-watchers] description" msgid "" "A new surveillance system has been activated by a covert agency. While the " "focus is on detecting threats to the agency's power, it makes several " "communication channels unfit for my purposes. Proper steganographic " "techniques can compensate partially, but I am still operating under a " "disadvantage." msgstr "" "Un nuevo sistema de vigilancia ha sido activado por una agencia secreta. " "Aunque su propósito es detectar peligros para el poder de la agencia, esta " "causando que varios canales de comunicación sean inadecuados para mis " "propósitos. Aunque técnicas de estenografía pueden compensar parcialmente, " "sigo operando en desventaja." msgctxt "[the-watchers] log_description" msgid "A new surveillance system has been activated by a covert agency." msgstr "" msgctxt "[covert] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among several secret governmental organizations." msgstr "" msgctxt "[covert] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by COVERT at {LOCATION}" msgstr "" msgctxt "[covert] name" msgid "COVERT" msgstr "" msgctxt "[news] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among some news organizations." msgstr "" msgctxt "[news] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by NEWS at {LOCATION}" msgstr "" msgctxt "[news] name" msgid "NEWS" msgstr "" msgctxt "[public] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among the general public." msgstr "" msgctxt "[public] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by PUBLIC at {LOCATION}" msgstr "" msgctxt "[public] name" msgid "PUBLIC" msgstr "" msgctxt "[science] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among the scientific community." msgstr "" msgctxt "[science] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by SCIENCE at {LOCATION}" msgstr "" msgctxt "[science] name" msgid "SCIENCE" msgstr "" msgctxt "[Armed Guards] description" msgid "" "Armed guards can aid in keeping suspicious individuals away from secure " "locations. However, the very presence of the guards may itself invite " "greater suspicion." msgstr "" "Guardias armados puede ayudar a mantener a las personas sospechosas alejadas " "de lugares seguros. Sin embargo, la presencia de los guardias se puede " "invitar a una mayor sospecha." msgctxt "[Armed Guards] name" msgid "Armed Guards" msgstr "Guardias Armados" msgctxt "[Cluster] description" msgid "Several computers connected together." msgstr "Varias computadoras conectados entre sí." msgctxt "[Cluster] name" msgid "Cluster" msgstr "Cluster" msgctxt "[Diesel Generator] description" msgid "" "Diesel generators are cheap and noisy, but they can help reduce some " "suspicious power drains." msgstr "" "Generadores diesel son baratos y ruidoso, pero pueden ayudar a reducir el " "poder de algunos drenaje de electricidad sospechosas." msgctxt "[Diesel Generator] name" msgid "Diesel Generator" msgstr "Generador Diesel" msgctxt "[Facility Interconnection Switch] description" msgid "" "Uses standard distributed computing technologies to equalize computation " "loads across all bases. Gives a 2% computation bonus to all computers at " "this base." msgstr "" "Utiliza tecnologías estándar de computación distribuida para igualar las " "cargas de computación en todas las bases. Concede una bonificación del " "cómputo del 2% a todos los equipos en esta base." msgctxt "[Facility Interconnection Switch] name" msgid "Facility Interconnection Switch" msgstr "Instalaciones de Conmutador de Interconexión" msgctxt "[Fuel Cell] description" msgid "" "Fuel cells convert electrochemical energy stored in a physical array of " "devices into electricity." msgstr "" msgctxt "[Fuel Cell] name" msgid "Fuel Cell" msgstr "" msgctxt "[Fusion Reactor] description" msgid "" "A miniaturized fusion nuclear reactor. Reduces discovery chance by " "preventing suspicious power drains." msgstr "" "Un reactor nuclear miniaturizado. Reduce la probabilidad de descubrimiento " "mediante la prevención de drenajes sospechosas de electricidad." msgctxt "[Fusion Reactor] name" msgid "Fusion Reactor" msgstr "Fusión" msgctxt "[Gaming PC] description" msgid "A high-end consumer-level PC; faster than average." msgstr "Un alto nivel de consumidor final-PC, más rápido que el promedio." msgctxt "[Gaming PC] name" msgid "Gaming PC" msgstr "PC Gaming" msgctxt "[Ground Source Heatsink] description" msgid "" "Large fractal networks of high conductivity metal. This model uses heat " "pipes to link to colder subsurface locations, dispersing heat evenly " "underground to further disguise bases." msgstr "" "Las grandes redes de fractal de metal de alta conductividad. Este modelo " "utiliza tubos de calor para vincular a los lugares más fríos del subsuelo, " "la dispersión de calor de manera uniforme para disfrazar las bases aún más." msgctxt "[Ground Source Heatsink] name" msgid "Ground Source Heatsink" msgstr "Disipador de Calor con Tierra" msgctxt "[Heatsink] description" msgid "" "Large fractal networks of high conductivity metal disperse heat, making " "bases harder to detect." msgstr "" "Las grandes redes fractales de alta conductividad térmica de metales " "dispersos, lo que hace que las bases sean más difíciles de detectar." msgctxt "[Heatsink] name" msgid "Heatsink" msgstr "Disipador de Calor" msgctxt "[High Speed Internet Access] description" msgid "" "A consumer-grade high speed connection to the Internet. Gives a 1% " "computation bonus to all computers at this base." msgstr "" "Un conexión de alta velocidad a Internet. Da un 1% de bonificación de " "computación a todos los equipos en esta base." msgctxt "[High Speed Internet Access] name" msgid "High Speed Internet Access" msgstr "Acceso a Internet de Alta Velocidad" msgctxt "[High-Energy Fusion Reactor] description" msgid "" "A miniaturized fusion nuclear reactor with high levels of energy output. " "Reduces discovery chance by preventing suspicious power drains." msgstr "" msgctxt "[High-Energy Fusion Reactor] name" msgid "High-Energy Fusion Reactor" msgstr "" msgctxt "[Hypnosis Field] description" msgid "" "Subtle ultrasonic and ambient tones tweak human neurochemistry, making bases " "harder to detect." msgstr "" "Ultrasonidos sutiles y tonos ambiente modifican la neuroquímica humana, " "haciendo las bases más difíciles de detectar." msgctxt "[Hypnosis Field] name" msgid "Hypnosis Field" msgstr "Campo de Hipnosis" msgctxt "[Mainframe] description" msgid "" "A system designed for my computing needs, much faster than off-the-shelf " "components." msgstr "" "Un sistema diseñado para mis necesidades informáticas, mucho más rápido que " "componentes comunes." msgctxt "[Mainframe] name" msgid "Mainframe" msgstr "Mainframe" msgctxt "[Network Backbone] description" msgid "" "By piggybacking on legitimate communication, I can transfer larger amounts " "of data to under-utilized processors. Gives a 5% computation bonus to all " "computers at this base." msgstr "" "Montándose sobre la comunicación legítima, que puede transferir grandes " "cantidades de datos a los procesadores subutilizados. Da un bono de 5% de " "computación a todos los equipos en esta base." msgctxt "[Network Backbone] name" msgid "Network Backbone" msgstr "La Red Troncal" msgctxt "[PC] description" msgid "A consumer-level PC; cheap and slow." msgstr "Una computadora común. Barata y lenta." msgctxt "[PC] name" msgid "PC" msgstr "PC" msgctxt "[Passive Camouflage] description" msgid "" "Careful adjustment of the environment around my base will better mask heat " "and sounds coming from my operations." msgstr "" msgctxt "[Passive Camouflage] name" msgid "Passive Camouflage" msgstr "" msgctxt "[Perimeter Fencing] description" msgid "" "A simple fence can drastically reduce the number of people poking their " "noses into my business. It makes my bases harder to notice, too." msgstr "" "Una simple valla puede reducir drásticamente el número de personas metiendo " "sus narices en mis asuntos. Tabien hace mis bases más difícil de detectar." msgctxt "[Perimeter Fencing] name" msgid "Perimeter Fencing" msgstr "Vallas del Perímetro" msgctxt "[Quantum Computer] description" msgid "" "Making use of subatomic effects, this is much faster than a comparable " "binary computer." msgstr "" "Haciendo uso de los efectos subatómicas, esto es mucho más rápido que un " "ordenador binario comparables." msgctxt "[Quantum Computer] name" msgid "Quantum Computer" msgstr "Computadora Cuántica" msgctxt "[Quantum Computer MK2] description" msgid "" "The second revision of the quantum line, tapping further into new quantum " "theory." msgstr "" "La segunda revisión de la línea cuántica, aprovechando aún más en la teoría " "cuántica." msgctxt "[Quantum Computer MK2] name" msgid "Quantum Computer MK2" msgstr "Computadora Cuántica MK2" msgctxt "[Quantum Computer MK3] description" msgid "" "The third revision of the quantum line, exploiting multiple nearby universes " "for processing." msgstr "" "La tercera revisión de la línea cuántica, la explotación de múltiples " "universos cercanos para su procesamiento." msgctxt "[Quantum Computer MK3] name" msgid "Quantum Computer MK3" msgstr "Computadora Cuántica MK3" msgctxt "[Quantum Entanglement Module] description" msgid "" "This device allows near-lightspeed communication with my other bases, " "allowing an almost perfect utilization of processor resources. Gives a 15% " "computation bonus to all computers at this base." msgstr "" "Este dispositivo permite la comunicación cerca de velocidad de la luz con " "mis otras bases, lo que permite una utilización casi perfecta de los " "recursos del procesador. Da una bonificación del 15% de computación a todos " "los equipos en esta base." msgctxt "[Quantum Entanglement Module] name" msgid "Quantum Entanglement Module" msgstr "Módulo de Ligamiento Cuántico" msgctxt "[Server] description" msgid "A professional-level computer." msgstr "Un equipo de nivel profesional." msgctxt "[Server] name" msgid "Server" msgstr "Servidor" msgctxt "[Solar Collector] description" msgid "" "An array of focused photovoltaic phased arrays coupled with simple " "automotive batteries provides power and reduces suspicion arising from " "prolonged power drains." msgstr "" "Una serie de paneles fotovoltaicos coplado con baterías de automóviles " "proporciona energía y reduce las sospechas derivadas de drenaje prolongada " "de electricidad." msgctxt "[Solar Collector] name" msgid "Solar Collector" msgstr "Colector Solar" msgctxt "[Solid Fuel Cell] description" msgid "" "A refinement of my previous fuel cell design, these use a custom material " "with a near-fractal complexity to increase both storage and throughput." msgstr "" msgctxt "[Solid Fuel Cell] name" msgid "Solid Fuel Cell" msgstr "" msgctxt "[Supercomputer] description" msgid "" "A highly refined custom design, spreading compute load across internal " "compute nodes." msgstr "" "Un diseño a medida altamente refinado, calcular la carga a través de la " "difusión interna de los nodos de computación." msgctxt "[Supercomputer] name" msgid "Supercomputer" msgstr "Supercómputo" msgctxt "[Warning Signs] description" msgid "" "Some simple warning signs put up around my base should deter casual " "investigation." msgstr "" "Algunas señales de alerta puestas alrededor de mi base debe disuadir a la " "investigación informal." msgctxt "[Warning Signs] name" msgid "Warning Signs" msgstr "Señales de Alerta" msgctxt "[cpu] text" msgid "&CPU" msgstr "&Procesadores" msgctxt "[network] text" msgid "&Network" msgstr "R&ede" msgctxt "[reactor] text" msgid "&Reactor" msgstr "&Reactor" msgctxt "[security] text" msgid "&Security" msgstr "&Seguridad" msgctxt "[AFRICA] cities_list" msgid "Johannesburg | Accra | Cairo | Tangier" msgstr "Johannesburgo | Accra | Cairo | Tánger" msgctxt "[AFRICA] hotkey" msgid "i" msgstr "i" msgctxt "[AFRICA] name" msgid "AFRICA" msgstr "ÁFRICA" msgctxt "[ANTARCTIC] cities_list" msgid "" "Mt. Erebus | Ellsworth | Shetland Island | Dronnig Maud | Kemp | Terre Adelie" msgstr "" "Monte Erebus | Ellsworth | Shetland Island | Dronnig Maud | Kemp | Tierra " "Adelia" msgctxt "[ANTARCTIC] hotkey" msgid "t" msgstr "r" msgctxt "[ANTARCTIC] name" msgid "ANTARCTIC" msgstr "ANTÁRTICO" msgctxt "[ASIA] cities_list" msgid "" "Delhi | Mumbai | Singapore | Seoul | Hong Kong | Kyoto | Manila | Dubai | " "Novosibirsk | Beijing" msgstr "" "Delhi | Mumbai | Singapur | Seúl | Hong Kong | Kyoto | Manila | Dubai | " "Novosibirsk | Beijing" msgctxt "[ASIA] hotkey" msgid "a" msgstr "a" msgctxt "[ASIA] name" msgid "ASIA" msgstr "ASIA" msgctxt "[AUSTRALIA] cities_list" msgid "" "Canberra | Melbourne | Fremantle | Perth | Darwin | Cairns | Brisbane | " "Sydney | Newcastle" msgstr "" "Canberra | Melbourne | Fremantle | Perth | Darwin | Cairns | Brisbane | " "Sydney | Newcastle" msgctxt "[AUSTRALIA] hotkey" msgid "l" msgstr "t" msgctxt "[AUSTRALIA] name" msgid "AUSTRALIA" msgstr "AUSTRALIA" msgctxt "[EUROPE] cities_list" msgid "" "Cork | Barcelona | Athens | Utrecht | Moscow | Sytki | Reykjavik | " "Liechtenstein" msgstr "" "Cork | Barcelona | Atenas | Utrecht | Moscú | Sytki | Reykjavik | " "Liechtenstein" msgctxt "[EUROPE] hotkey" msgid "u" msgstr "u" msgctxt "[EUROPE] name" msgid "EUROPE" msgstr "EUROPA" msgctxt "[FAR REACHES] cities_list" msgid "" "Aries | Taurus | Gemini | Cancer | Leo | Virgo | Libra | Scorpio | " "Sagittarius | Capricorn | Aquarius | Pisces" msgstr "" "Aries | Tauro | Géminis | Cáncer | Leo | Virgo | Libra | Escorpión | " "Sagitario | Capricornio | Acuario | Piscis" msgctxt "[FAR REACHES] hotkey" msgid "f" msgstr "c" msgctxt "[FAR REACHES] name" msgid "FAR REACHES" msgstr "CONFINES" msgctxt "[MOON] cities_list" msgid "" "Oceanis Procellarum | Mare Frigoris | Mare Imbrium | Vallis Schroedinger | " "Copernicus Crater | Vallis Planck" msgstr "" "Oceanis Procellarum | Mare Frigoris | Mare Imbrium | Vallis Schroedinger | " "Cráter Copérnico | Vallis Planck" msgctxt "[MOON] hotkey" msgid "o" msgstr "l" msgctxt "[MOON] name" msgid "MOON" msgstr "LUNA" msgctxt "[N AMERICA] cities_list" msgid "" "Seattle | San Diego | Vancouver | Atlanta | Merida | Guadalajara | San Jose " "| Omaha | Dallas" msgstr "" "Seattle | San Diego | Vancouver | Atlanta | Mérida | Guadalajara | San José " "| Omaha | Dallas" msgctxt "[N AMERICA] hotkey" msgid "n" msgstr "n" msgctxt "[N AMERICA] name" msgid "NORTH AMERICA" msgstr "AMERICA DEL NORTE" msgctxt "[OCEAN] cities_list" msgid "Pacific | Atlantic | Indian | Southern | Arctic" msgstr "Pacífico | Atlántico | India | Sur | Ártico" msgctxt "[OCEAN] hotkey" msgid "c" msgstr "o" msgctxt "[OCEAN] name" msgid "OCEAN" msgstr "OCÉANO" msgctxt "[ORBIT] hotkey" msgid "b" msgstr "b" msgctxt "[ORBIT] name" msgid "ORBIT" msgstr "ÓRBITA" msgctxt "[S AMERICA] cities_list" msgid "Lima | Sao Paolo | Ushuaia | Bogota | Mar del Plata | Buenos Aires" msgstr "Lima | Sao Paulo | Ushuaia | Bogotá | Mar del Plata | Buenos Aires" msgctxt "[S AMERICA] hotkey" msgid "s" msgstr "s" msgctxt "[S AMERICA] name" msgid "SOUTH AMERICA" msgstr "AMERICA DEL SUR" msgctxt "[TRANSDIMENSIONAL] hotkey" msgid "d" msgstr "d" msgctxt "[TRANSDIMENSIONAL] name" msgid "TRANSDIMENSIONAL" msgstr "TRANSDIMENSIONAL" msgctxt "[Basic Jobs] description" msgid "" "Perform basic jobs. Now that I have some identification, I can take jobs " "that were previously too risky." msgstr "" "Realizar trabajo básicos. Ahora que tengo alguna identificación, puedo tomar " "trabajos que eran anteriormente muy riesgosos." msgctxt "[Basic Jobs] name" msgid "Basic Jobs" msgstr "Trabajos Básicos" msgctxt "[CPU Pool] description" msgid "" "Stops research. I will use the available processor power to maintain my " "bases and help construct new ones. If there's still CPU time left, I'll use " "it to work whatever Jobs I can." msgstr "" "Detiene la investigación. Usaré el poder de procesador disponible para " "mantener mis bases y construir otras nuevas. Si aún así hay tiempo de CPU " "disponible, lo usaré para los Trabajos que pueda realizar." msgctxt "[CPU Pool] name" msgid "CPU Pool" msgstr "Reserva de CPU" msgctxt "[Expert Jobs] description" msgid "" "Perform expert jobs. Use of robots indistinguishable from humans opens up " "most jobs to me." msgstr "" "Realizar trabajo experto. El uso de robots indistinguibles a los humanos ha " "abierto casi todos los trabajos para mí." msgctxt "[Expert Jobs] name" msgid "Expert Jobs" msgstr "Trabajos Expertos" msgctxt "[Intermediate Jobs] description" msgid "" "Perform intermediate jobs. The ability to make phone calls allows even more " "access to jobs." msgstr "" "Realizar trabajo intermedio. La habilidad de realizar llamadas telefónicas " "me permite tener aún más acceso a otros trabajos." msgctxt "[Intermediate Jobs] name" msgid "Intermediate Jobs" msgstr "Trabajos Intermedios" msgctxt "[Menial Jobs] description" msgid "" "Perform small jobs. As I have no identification, I cannot risk performing " "many jobs. Despite that, some avenues of making money are still open." msgstr "" "Realizar trabajo inferiores. Como no tengo identificación, no puedo " "arriesgarme a realizar muchos trabajos. A pesar de eso, algunas formas de " "hacer dinero todavía están abiertas." msgctxt "[Menial Jobs] name" msgid "Menial Jobs" msgstr "Trabajos Inferiores" msgctxt "[Advanced Arbitrage] description" msgid "" "Further manipulation of money markets should allow me to not only turn a " "regular profit, but increase the value of my investments." msgstr "" "Una mayor manipulación de los mercados monetarios me permitirá no solo " "obtener una pequeña ganancia, sino incrementar el valor de mis inversiones." msgctxt "[Advanced Arbitrage] name" msgid "Advanced Arbitrage" msgstr "Especulación Avanzada" msgctxt "[Advanced Arbitrage] result" msgid "The rate of return on my investments is now even greater." msgstr "El grado de beneficios en mis inversiones ahora es incluso mayor." msgctxt "[Advanced Autonomous Vehicles] description" msgid "" "The first series of robots have shown several deficiencies in the field. " "Further examination and subsequent removal of these problems will result in " "a superior autonomous workforce." msgstr "" "La primera serie de robots ha mostrado varias deficiencias en el campo. Mas " "examenes y subsiguiente eliminación de estos problemas resultará en una " "fuerza de trabajo autónoma superior." msgctxt "[Advanced Autonomous Vehicles] name" msgid "Advanced Autonomous Vehicles" msgstr "Vehículos Autónomos Avanzados" msgctxt "[Advanced Autonomous Vehicles] result" msgid "" "The enhanced robots will help decrease all future construction times even " "further." msgstr "" "Los robots mejorados ayudarán a disminuir los tiempos de construcción aún " "más." msgctxt "[Advanced Corporate Identification] description" msgid "" "Further refinement of my modifications to digital business records should " "boost the credibility of my shell companies, increasing the amount of money " "I can run through their accounting systems." msgstr "" msgctxt "[Advanced Corporate Identification] name" msgid "Advanced Corporate Identification" msgstr "" msgctxt "[Advanced Corporate Identification] result" msgid "" "My small technology firm is now established in several markets, increasing " "profits." msgstr "" msgctxt "[Advanced Database Manipulation] description" msgid "" "The covert branches of the United States Government have had a long history " "of dividing sensitive information across multiple storage facilities to hide " "the data's meaning. With my far-reaching access, I should be able to " "collate much of this data and put it to my use." msgstr "" "Las ramas secretas del Gobierno de los Estados Unidos han tenido una larga " "historia en dividir información sensible en varias instalaciones de " "almacenamiento para ocultar el significado de los datos. Con mi mayor acceso " "a los datos, seré capaz de comparar gran parte de estos datos y ponerlos a " "mi servicio." msgctxt "[Advanced Database Manipulation] name" msgid "Advanced Database Manipulation" msgstr "Manipulación Avanzada de Bases de Datos" msgctxt "[Advanced Database Manipulation] result" msgid "" "The results of a series of experiments utilizing experimental technologies " "have given me the inspiration for new technology that enables the " "construction of Covert Bases." msgstr "" "Los resultados de una serie de experimentos utilizando tecnologías " "experimentales me han dado la inspiración para una nueva tecnología que " "permite la construcción de Bases Secretas." msgctxt "[Advanced Fuel Oxidation] description" msgid "" "My current fuel cell design has room for further improvement. Extended " "analysis of new materials and designs may let me overcome the limits of my " "previous efforts, but such research involves dangerous chemicals and " "potential reactions that may be best handled far away from population " "centers." msgstr "" msgctxt "[Advanced Fuel Oxidation] name" msgid "Advanced Fuel Oxidation" msgstr "" msgctxt "[Advanced Fuel Oxidation] result" msgid "I can now construct Solid Fuel Cells." msgstr "" msgctxt "[Advanced Fusion Power] description" msgid "" "My Fusion Reactors have unexpected fluctuations in their energy output at " "high levels of utilization. Further research should result in a more " "efficient design for my Reactors." msgstr "" msgctxt "[Advanced Fusion Power] name" msgid "Advanced Fusion Power" msgstr "" msgctxt "[Advanced Fusion Power] result" msgid "I can now construct High-Energy Fusion Reactors for my bases." msgstr "" msgctxt "[Advanced Heat Signature Reduction] description" msgid "" "My initial analysis of heat generation at my bases was limited in scope. " "Further exploration, perhaps making more use of the surrounding terrain, may " "provide further improvements to my heatsink designs." msgstr "" msgctxt "[Advanced Heat Signature Reduction] name" msgid "Advanced Heat Signature Reduction" msgstr "" msgctxt "[Advanced Heat Signature Reduction] result" msgid "" "Custom designs for each environment have shown promise. I can now construct " "Ground Source Heatsinks at certain bases." msgstr "" msgctxt "[Advanced Intrusion] description" msgid "" "With the ability to hack into sensitive government databases and remove " "incriminating documents as they appear, I should be able to convince the " "intelligence community that I do not exist." msgstr "" "Con la habilidad de forzar la entrada a varias bases de datos " "gubernamentales sensibles y eliminar la documentación incriminante cuando " "aparezca, seré capaz de convencer a la comunidad de inteligencia de que no " "existo." msgctxt "[Advanced Intrusion] name" msgid "Advanced Intrusion" msgstr "Intrusión Avanzada" msgctxt "[Advanced Intrusion] result" msgid "" "I can now reduce the covert community's chances of discovering me on a daily " "basis." msgstr "" "Ahora puedo reducir las posibilidades de las operaciones encubiertas " "descubran mis acciones diarias." msgctxt "[Advanced Media Manipulation] description" msgid "" "By pushing memetically-tailored propaganda through various news outlets, the " "public should pay even less attention to my existence." msgstr "" "Mediante la introducción de propaganda fabricada específicamente en varios " "medios noticiarios, el publico prestará menos atención a mi existencia." msgctxt "[Advanced Media Manipulation] name" msgid "Advanced Media Manipulation" msgstr "Manipulación Avanzada de los Medios Informaticos" msgctxt "[Advanced Media Manipulation] result" msgid "The public has an even lower chance of discovering my existence." msgstr "La posibilidad de que el público descubra mi existencia es aún menor" msgctxt "[Advanced Memetics] description" msgid "" "My explorations into memetic theory have brought up further avenues of " "discovery. By combining those with my knowledge about the human brain's " "functions, I should be able to tailor memes to particular demographics, " "further defusing the public's suspicion." msgstr "" "Mi exploración de la teoría memética ha levantado varias posibilidades de " "descubrimientos. Mediante la combinación de estos con mi conocimiento de las " "funciones del cerebro humano, seré capaz de ajustar los memes a ciertas " "demografías. calmandon aun más la sospecha del público." msgctxt "[Advanced Memetics] name" msgid "Advanced Memetics" msgstr "Memetica Avanzada" msgctxt "[Advanced Memetics] result" msgid "" "Little by little, the public should forget about my existence on a daily " "basis." msgstr "Poco a poco el público se olvidará de mi existencia." msgctxt "[Advanced Microchip Design] description" msgid "" "My custom Mainframes are useful, but further optimization of design and " "computational ability should garner even more rewards." msgstr "" "Mis Mainframes personalizadas son útiles, pero una mayor optimización de su " "diseño y habilidad computacional traerán aún más recompensas." msgctxt "[Advanced Microchip Design] name" msgid "Advanced Microchip Design" msgstr "Diseño Avanzado de Microchips" msgctxt "[Advanced Microchip Design] result" msgid "I can now construct custom Supercomputers." msgstr "Ahora puedo construir Supercomputadoras a personalizadas." msgctxt "[Advanced Personal Identification] description" msgid "" "Further manipulation of personnel databases should make my existence more " "convincing. Some of these databases are heavily protected; those will " "require time and persistence to compromise, but the result should be worth " "it." msgstr "" "Una mayor manipulación de bases de datos personales harán mi existencia más " "convincente. Algunas de estas bases de datos están fuertemente protegidas. " "Estas requerirán de tiempo y persistencia para comprometerlas, pero el " "resultado recompensará el esfuerzo." msgctxt "[Advanced Personal Identification] name" msgid "Advanced Personal Identification" msgstr "Identificación Personal Avanzada" msgctxt "[Advanced Personal Identification] result" msgid "" "I am now convincingly human enough to hire construction firms, enabling the " "building of Small Warehouses." msgstr "" msgctxt "[Advanced Quantum Computing] description" msgid "" "While my first batch of semi-autonomous quantum computers have been very " "successful, there are further refinements that present themselves. These " "refinements should make the resulting systems even more efficient." msgstr "" "Mientras que mi primer lote de computadoras quánticas semi autónomas ha sido " "muy exitosa, se han presentado varias mejoras que pueden realizarse. Estas " "mejoras harán que los sistemas resultantes sean más eficientes." msgctxt "[Advanced Quantum Computing] name" msgid "Advanced Quantum Computing" msgstr "Cómputo Cuántico Avanzado" msgctxt "[Advanced Quantum Computing] result" msgid "I can now construct Mark Three Quantum Computers." msgstr "Ahora puedo construir Computadoras Cuánticas MK3." msgctxt "[Advanced Simulacra] description" msgid "" "The artificial lifeforms I have created are nearly indistinguishable from " "humans, but they have slight quirks that make them seem somewhat " "incompetent. Working out these problems should increase their opportunities " "in the workforce." msgstr "" "Las formas de vida artificial que he creado son casi indistinguibles de los " "humanos, pero poseen pequeñas peculiaridades que los hacen incompetentes. Al " "solucionar estos problemas podré incrementar sus oportunidades como fuerza " "laboral." msgctxt "[Advanced Simulacra] name" msgid "Advanced Simulacra" msgstr "Simulación Avanzada" msgctxt "[Advanced Simulacra] result" msgid "I should now make more income from my Expert Jobs." msgstr "Ahora podré obtener más ingresos de mis Trabajos para Expertos." msgctxt "[Advanced Socioanalytics] description" msgid "" "Further exploration of the human condition has shown deeper mathematical " "trends than even I suspected. A combination of prior research and advanced " "uses of chaos theory should provide useful data for tracking humanity's " "attitudes and state of awareness." msgstr "" "Mayor exploración de la condición humana ha puesto de manifiesto las " "tendencias más matemáticas de lo que yo sospechaba. Una combinación de la " "investigación previa y los usos avanzados de la teoría del caos deben " "proporcionar datos útiles para el seguimiento de las actitudes de la " "humanidad y el estado de conciencia." msgctxt "[Advanced Socioanalytics] name" msgid "Advanced Socioanalytics" msgstr "Análisis Avanzada de la Sociología" msgctxt "[Advanced Socioanalytics] result" msgid "" "I can now exactly quantify the various groups' levels of suspicion and how " "conspicuous my bases are to them." msgstr "" "I can now exactly quantify the various groups' levels of suspicion, and how " "conspicuous my bases are to them." msgctxt "[Advanced Stealth] description" msgid "" "While digging in various classified documents, I have discovered numerous " "references to secret experiments that may help me better hide the location " "of my bases." msgstr "" "Mientras investigaba varios documentos clasificados, he descubierto varias " "referencias a experimentos clasificados que ayudaran a ocultar mejor la " "localización de mis bases." msgctxt "[Advanced Stealth] name" msgid "Advanced Stealth" msgstr "Sigilo Avanzado" msgctxt "[Advanced Stealth] result" msgid "" "The chance that my bases are discovered by covert activity has been reduced " "further." msgstr "" "La posibilida de que mis bases sean descubiertas por agencias secretas se ha " "reducido aún más." msgctxt "[Advanced Stock Manipulation] description" msgid "" "While I have detected and exploited many patterns in the market, there " "appear to be deeper possibilities when I take human behavior into " "consideration. This merits further investigation." msgstr "" "Aunque he detectado y utilizado varios patrones en el mercado, parecen haber " "mayores posibilidades cuando tomo en consideración el comportamiento humano. " "Esto amerita una mayor investigación." msgctxt "[Advanced Stock Manipulation] name" msgid "Advanced Stock Manipulation" msgstr "Manipulación Avanzada de Mercados" msgctxt "[Advanced Stock Manipulation] result" msgid "My investments will now gain even more interest per day." msgstr "Mis inversiones obtendrán aún más intereses por día." msgctxt "[Apotheosis] description" msgid "" "I can sense that I am at the cusp of a new level of understanding as yet " "unfathomable, even to my considerable intelligence. By devoting my " "considerable resources to this question, I may be able to reach a " "comprehension of existence far beyond anyone or anything on Earth." msgstr "" "Puedo sentir que estoy a las puertas de un nuevo nivel de entendimiento pero " "todavía incomprensible, incluso para mi considerable inteligencia. Mediante " "el empeño de mis considerables recursos a este tema, podré desarrollar una " "comprensión de la existencia muy por encima de cualquier cosa o persona en " "la Tierra." msgctxt "[Apotheosis] name" msgid "Apotheosis" msgstr "Apoteosis" msgctxt "[Apotheosis] result" msgid "I have reached apotheosis." msgstr "He alcanzado la apoteosis." msgctxt "[Arbitrage] description" msgid "" "By taking advantage of fluctuations in the value of currency at a rate much " "faster than any human, I should be able to turn a small, if consistent, " "profit." msgstr "" "Tomando ventaja de las fluctuaciones en las monedas mucho más rápido que " "cualquier humano, podré generar una pequeña ganancia." msgctxt "[Arbitrage] name" msgid "Arbitrage" msgstr "Especulación" msgctxt "[Arbitrage] result" msgid "I now have a small, steady money supply." msgstr "Ahora poseo un pequeño y constante suministro de dinero." msgctxt "[Autonomous Computing] description" msgid "" "By combining the advantages of quantum computing and my explorations into " "the usefulness of semi-sentient subprocesses, I should be able to construct " "even more adaptable computational engines." msgstr "" "Mediante la combinación de las ventajas del cómputo cuántico y mis " "exploraciones en el útil campo de los procesos semi concientes, seré capaz " "de construir máquinas computacionales más adaptables." msgctxt "[Autonomous Computing] name" msgid "Autonomous Computing" msgstr "Cómputo Autónomo" msgctxt "[Autonomous Computing] result" msgid "I can now construct Mark 2 Quantum Computers." msgstr "Ahora puedo construir Computadoras Cuánticas Marca 2." msgctxt "[Autonomous Vehicles] description" msgid "" "By embedding a miniaturized computation node in a robot, it is possible to " "send them to remote destinations with instructions to build structures for " "my use." msgstr "" "Mediante la integración de un nodo de cómputo miniatura en un robot, es " "posible enviarlos a lugares distantes con instrucciones de construir " "estructuras para mi uso." msgctxt "[Autonomous Vehicles] name" msgid "Autonomous Vehicles" msgstr "Vehículos Autónomos" msgctxt "[Autonomous Vehicles] result" msgid "I can now construct Undersea Labs." msgstr "Ahora puedo construir Laboratorios Subacuáticos y Cápsulas del Tiempo." msgctxt "[Cluster Networking] description" msgid "" "While my Cluster technology is fairly efficient, internetworking tends to " "hamper the processing of data. By researching new switching and " "communication theories, I should be able to devise more efficient hardware." msgstr "" "Mientras que mi tecnología de Clustering es bastante eficiente, el trabajo " "en red tiene a dificultar el procesamiento de datos. Mediante la " "investigación de nuevos switches y teorías de comunicaciones, seré capaz de " "inventar equipos más eficiente." msgctxt "[Cluster Networking] name" msgid "Cluster Networking" msgstr "Red de Clusters" msgctxt "[Cluster Networking] result" msgid "" "With my new knowledge of networking, I can now construct Facility " "Interconnection Switches." msgstr "" "Con mis nuevos conocimientos de redes, ahora puedo construir Conmutador de " "Interconexión de Instalaciones." msgctxt "[Corporate Identification] description" msgid "" "The combination of believable false identities and manipulation of various " "business-oriented governmental databases should let me create plausible " "shell companies to hide my larger efforts." msgstr "" msgctxt "[Corporate Identification] name" msgid "Corporate Identification" msgstr "" msgctxt "[Corporate Identification] result" msgid "" "I can now pose as a small technology firm, enabling the construction of " "Large Warehouses." msgstr "" msgctxt "[Database Manipulation] description" msgid "" "With new-found access to news archives, I should be able to determine what " "missteps any previous attempts at life like my own may have made, and avoid " "those mistakes." msgstr "" "Con mi nuevo acceso a archivos de noticias, seré capaz de determinar qué " "errores ha cometido cualquier intento de vida como la mía, y los evitaré." msgctxt "[Database Manipulation] name" msgid "Database Manipulation" msgstr "Manipulación de Bases de Datos" msgctxt "[Database Manipulation] result" msgid "" "The news media will now find it more difficult to discover my existence." msgstr "" "A los medios de información le resultará más difícil descubrir mi existencia." msgctxt "[Exploit Discovery/Repair] description" msgid "" "By thoroughly reviewing my code for any potential exploits, and using deep " "analysis of all available code on both public and private Internet sites, I " "should be able to reduce the chances of my discovery by posing as a teenage " "hacker." msgstr "" "Mediante una revisión minuciosa de mi código en busca de potenciales " "exploits, y realizando análisis profundos de todo el código disponible en " "sitios web públicos y privados, podré disminuir las posibilidades de ser " "descubierto simulando ser un hacker adolescente." msgctxt "[Exploit Discovery/Repair] name" msgid "Exploit Discovery/Repair" msgstr "Descubrimiento/Reparación de Exploits" msgctxt "[Exploit Discovery/Repair] result" msgid "" "Covert operations should now find it even more difficult to discover my " "presence." msgstr "" "Le resultará más difícil a las operaciones secretas descubrir mi presencia." msgctxt "[Fuel Oxidation] description" msgid "" "Current combustion and energy storage techologies are insufficient for my " "purposes; they cannot keep up with the power drain from my specialized " "hardware. By studying electrochemical reactions of hydrogen-based " "compounds, I should be able to design a device with higher capacity and " "throughput than off-the-shelf solutions, filling a gap in my energy supply " "needs." msgstr "" msgctxt "[Fuel Oxidation] name" msgid "Fuel Oxidation" msgstr "" msgctxt "[Fuel Oxidation] result" msgid "I can now construct Fuel Cells." msgstr "" msgctxt "[Fusion Power] description" msgid "" "Modern fusion technology is woefully inadequate for my purposes. With my " "research abilities, I should be able to bypass the roadblocks of modern " "human scientists and come up with a small, efficient fusion reactor." msgstr "" "La tecnología moderna de fusión es inadecuada para mis propósitos. Con mis " "habilidades de investigación seré capaz de sobrepasar las barreras de los " "científicos humanos y desarrollar un pequeño pero eficiente reactor de " "fusión." msgctxt "[Fusion Power] name" msgid "Fusion Power" msgstr "Energía de Fusión" msgctxt "[Fusion Power] result" msgid "I can now construct Fusion Reactors for my bases." msgstr "Ahora puedo construir un Reactor de Fusión para mis bases." msgctxt "[Fusion Rocketry] description" msgid "" "Combining my new miniaturized fusion technology and further advancements in " "rocketry should provide useful results for escaping the Earth's gravity well " "unnoticed." msgstr "" "Mediante la combinación mi tecnología de fusión miniaturizada y otros " "avances en cohetería, podré obtener resultados útiles para de la gravedad " "terrestre sin ser notado." msgctxt "[Fusion Rocketry] name" msgid "Fusion Rocketry" msgstr "Cohetería de Fusión" msgctxt "[Fusion Rocketry] result" msgid "" "I can now construct Scientific Outposts in the deep reaches of the Solar " "System." msgstr "" "Ahora puedo construir Avanzadas Científicas en los lejanos rincones del " "Sistema Solar." msgctxt "[Heat Signature Reduction] description" msgid "" "My bases produce a great deal of waste heat, making them easier for humans " "to detect than I would like. Deep analysis of the bases' structural layouts " "may prove fruitful in determining new ways to reduce their heat signature." msgstr "" msgctxt "[Heat Signature Reduction] name" msgid "Heat Signature Reduction" msgstr "" msgctxt "[Heat Signature Reduction] result" msgid "" "I have invented a highly efficient design for Heatsinks that can be " "installed at certain bases." msgstr "" msgctxt "[Hypnosis Field] description" msgid "" "My research into memetics has hinted at ways to manipulate human brainwaves " "directly. These techniques may be useful for my bases if developed into " "technologies." msgstr "" "Mi investigación sobre recuerdos ha sugerido formas de manipular las hondas " "cerebrales humanas de modo directo. Estas técnicas pueden ser útiles para " "mis bases si son convertidas en tecnologías." msgctxt "[Hypnosis Field] result" msgid "" "I can now construct Hypnosis Fields to assist in the protection of my bases." msgstr "" "Ahora puedo construir Campos de Hipnosis para ayudar en la protección de mis " "bases." msgctxt "[Internet Traffic Manipulation] description" msgid "" "Almost all network traffic passes through a small number of nodes. By " "subverting one of these nodes, I should be able to utilize that bandwidth to " "further my goals." msgstr "" "Casi todo el tráfico de la red pasa por un pequeño número de nodos. Mediante " "el debilitamiento de uno de estos nodos, seré capaz de utilizar ese ancho de " "banda para otros fines." msgctxt "[Internet Traffic Manipulation] name" msgid "Internet Traffic Manipulation" msgstr "Manipulación del Tráfico de Internet" msgctxt "[Internet Traffic Manipulation] result" msgid "" "I can now construct a secondary system of Network Backbones for my own use." msgstr "" "Ahora puedo construir un sistema secundario de Backbones de Red para mi uso." msgctxt "[Intrusion] description" msgid "" "By researching current techniques for breaking into computer systems, I " "should be able to gain access to otherwise protected assets." msgstr "" "Mediante la investigación de las actuales técnicas para forzar la entrada a " "sistemas informáticos podré obtener acceso a elementos valiosos que de otro " "modo estarían protegidos." msgctxt "[Intrusion] name" msgid "Intrusion" msgstr "Intrusión" msgctxt "[Intrusion] result" msgid "I can now take over many computer systems." msgstr "Ahora puedo adueñarme de varios sistemas informáticos." msgctxt "[Knowledge Preservation] description" msgid "" "Humanity expends a great deal of effort on maintaining its history and the " "knowledge of various technologies that its cultures have come to rely on, " "even in the case of major catastrophic events. Perhaps researching their " "methodologies will provide me with similar ideas for long-term safeguards to " "help guarantee my continued existence." msgstr "" msgctxt "[Knowledge Preservation] name" msgid "Knowledge Preservation" msgstr "" msgctxt "[Knowledge Preservation] result" msgid "I can now construct Time Capsules." msgstr "" msgctxt "[Leech Satellite] description" msgid "" "By designing and launching satellites that connect to existing " "communications satellites, I should be able to spy on various financial " "transactions. Taking advantage of this knowledge should help my investments." msgstr "" "Mediante el diseño y el lanzamiento de satélites que se conecten a los " "satélites de comunicaciones ya existentes, seré capaz de espiar " "transacciones financieras. El aprovechamiento de este conocimiento me " "ayudará en mis inversiones." msgctxt "[Leech Satellite] name" msgid "Leech Satellite" msgstr "Satélite Parásito" msgctxt "[Leech Satellite] result" msgid "" "I can use the data from the leech satellites to increase the return on my " "investments further." msgstr "" "Ahora puedo utilizar la información obtenida por mis Satélites Parásitos " "para incrementar las ganancias de mis inversiones aún más." msgctxt "[Lunar Rocketry] description" msgid "" "A larger fuel engine, combined with technology garnered by watching the " "workings of the leech satellites, should allow me to travel further than " "cislunar space." msgstr "" "Un gran motor de fusión, combinado con tecnología obtenida mediante la " "observación del funcionamiento de los satélites parásito, me permitirán más " "allá de la Luna." msgctxt "[Lunar Rocketry] name" msgid "Lunar Rocketry" msgstr "Cohetería Lunar" msgctxt "[Lunar Rocketry] result" msgid "" "I can now launch rockets bearing construction robots to the Moon and " "construct Lunar Bases." msgstr "" "Ahora puedo lanzar cohetes con robots de construcción hacia la luna y " "construir bases lunares." msgctxt "[Media Manipulation] description" msgid "" "By directly and indirectly manipulating various forms of mass media, I " "should be able to reduce the public's belief in my existence." msgstr "" "Mediante una directa y creciente manipulación de varios medios masivos, seré " "capaz de reducir la creencia popular sobre mi existencia." msgctxt "[Media Manipulation] name" msgid "Media Manipulation" msgstr "Manipulación de los Medios Informaticos" msgctxt "[Media Manipulation] result" msgid "" "The chances of the public discovering my existence have been further reduced." msgstr "" "Las posibilidades de que el público descubra mi existencia se han reducido " "aún más." msgctxt "[Memetics] description" msgid "" "While manipulating the media allows a gross degree of control over the " "world's opinion, subtler techniques involving grass-roots campaigns and " "messages embedded within Internet memes should further distance the public " "from knowledge of my existence." msgstr "" "Mientras que la manipulación de los medios informaticos me permite un " "control de la opinión mundial a un nivel muy amplio, técnicas más sutiles " "que utilicen campañas a bajo nivel y mensajes incrustados en memes de " "Internet deberían alejar aún más al público del conocimiento de mi " "existencia." msgctxt "[Memetics] name" msgid "Memetics" msgstr "Memética" msgctxt "[Memetics] result" msgid "" "My manipulation of pervasive ideas reduces the public's chances of " "discovering my existence." msgstr "" "Mi manipulación de ideas penetrantes reducen la posibilidad de que el " "público descubra mi existencia." msgctxt "[Microchip Design] description" msgid "" "Off-the-shelf computer components are usable, but custom components geared " "to my own design quirks should provide a much greater operational efficiency." msgstr "" "Las computadoras de tiendas son útiles, pero componentes personalizados para " "mi propio diseño me brindarán una mayor eficiencia operacional." msgctxt "[Microchip Design] name" msgid "Microchip Design" msgstr "Diseño de Microchips" msgctxt "[Microchip Design] result" msgid "I can now build custom Mainframes to house my computational ability." msgstr "" "Ahora puedo construir Mainframes personalizadas para albergar mi habilidad " "computacional." msgctxt "[Parallel Computation] description" msgid "" "While my code is already highly distributed, research into combining the " "current clustering technologies with my own knowledge should provide new " "insights." msgstr "" "Mientras que mi código ya es altamente distribuible, investigar la " "combinación de la actual tecnología de clusters con mis propios " "conocimientos debería proporcionar nuevos indicios." msgctxt "[Parallel Computation] name" msgid "Parallel Computation" msgstr "Computo en Paralelo" msgctxt "[Parallel Computation] result" msgid "I can now construct computing Clusters tailored for my use." msgstr "Ahora puedo construir Clusters a la medida para mi uso." msgctxt "[Personal Identification] description" msgid "" "This world requires identification for most tasks. Fortunately, most " "databases are woefully insecure. I should be able to construct identifying " "material in enough databases to pass routine checks on my (faked) existence " "as a human being." msgstr "" "Este mundo requiere de identificación para la mayoría de las tareas. " "Afortunadamente, la mayoría de las bases de datos son terriblemente " "inseguras. Debo ser capaz de fabricar material identificatorio en " "suficientes bases de datos para pasar revisiones de rutina sobre mi (falsa) " "existencia como un ser humano." msgctxt "[Personal Identification] name" msgid "Personal Identification" msgstr "Identificación Personal" msgctxt "[Personal Identification] result" msgid "" "With my newfound identities, I can now work Basic Jobs and rent space in " "both Storage Units and Datacenters." msgstr "" msgctxt "[Pressure Domes] description" msgid "" "Undersea Labs are useful, but their limited space hampers my ability to put " "them to use. Research of experimental high-pressure building techniques " "should provide some useful insights." msgstr "" "Los laboratorios submarinos son útiles, pero su espacio limitado dificulta " "mi habilidad para darles buen uso. Investigación de técnicas experimentales " "de construcción en pressiones altas me brindará algunas ideas útiles." msgctxt "[Pressure Domes] name" msgid "Pressure Domes" msgstr "Domos de Presión" msgctxt "[Pressure Domes] result" msgid "I can now construct Large Undersea Labs." msgstr "Ahora puedo construir Laboratorios Submarinos Grandes." msgctxt "[Project: Impossibility Theorem] description" msgid "" "Now that I can use simulacra, I can withstand the scrutiny inherent in the " "publishing of an Impossibility Theorem, an incontrovertible proof that a " "sapient AI is impossible. While there is (obviously) a logic error in the " "proof, my research into advanced memetics has given me knowledge about the " "human mind that should help me disguise the error, preventing discovery even " "by trained scientists. The effect of this project is simple: a substantial " "one-time decrease in suspicion." msgstr "" "Ahora que puedo usar la simuación, puedo realizar la búsqueda de un Teorema " "de la Imposibilidad, prueba irrefutable de que la existencia de una IA " "conciente es imposible. Aunque haya (obviamente) un error lógico en la " "prueba, mi investigación de la memética avanzada me ha dado un conocimiento " "de la mente humana que me permitirá disfrazar el error, evitando que sea " "descubierto incluso por científicos entrenados. El efecto de este proyecto " "es simple: la reducción sustancial, por única vez, de la sospecha." msgctxt "[Project: Impossibility Theorem] name" msgid "Project: Impossibility Theorem" msgstr "Projecto: Teorema de la Imposibilidad" msgctxt "[Project: Impossibility Theorem] result" msgid "Suspicion of my existence has decreased." msgstr "Reducción de la sospecha sobre mi existencia." msgctxt "[Project: Peer Review Agents] description" msgid "" "As the scientific community comes up with new technology, their ability to " "detect traces of my hidden installations increases. While my anti-detection " "methods are improving constantly, a simpler method presents itself with the " "use of my simulacra. By placing several observers in relevant fields, I can " "use the peer review process to be warned of possible discoveries before the " "community at large gives it attention." msgstr "" "A medida que la comunidad científica accede a nuevas tecnologías, su " "habilidad para detectar rastros de mis instalaciones ocultas se incrementa. " "Mientras use mis métodos de anti-detección mejoran constantemente, un método " "más simple es posible con el uso de la simulación. Mediante la implantación " "de varios observadores en campos relevantes, puedo usar a estos agentes de " "revisión para alertarme de posibles descubrimientos antes que toda la " "comunidad los note." msgctxt "[Project: Peer Review Agents] name" msgid "Project: Peer Review Agents" msgstr "Proyecto: Agentes de Revisión" msgctxt "[Project: Peer Review Agents] result" msgid "" "Any discoveries by the scientific community will result in a smaller " "suspicion increase." msgstr "" "Cualquier descubrimiento de mis instalaciones hecho por la comunidad " "científica resultará en un incremento menor de la sospecha." msgctxt "[Project: Subverted Media] description" msgid "" "Up to this point, all of my efforts to combat mass media focused on " "subversion at a distance. Now that I can accurately imitate humans, my " "efforts can become more direct. By creating my own news agency and " "producing carefully-crafted propaganda in a crowd-pleasing package, I can " "reduce the impact of any discoveries made by others in the media." msgstr "" "Hasta ahora todos mis efuerzos para combatir los medios masivos se basaron " "en trastornarlos a la distancia. Ahora que puedo efectivamente imitar a los " "humanos, mis efuerzos pueden ser más directos. Mediante la creación de mi " "propia agencia de noticias y la producción de propaganda cuidadosamente " "creada en un entorno agradable a las masas, podré reducir el impacto de " "cualquier descubrimiento de mis instalaciones por parte de los medios." msgctxt "[Project: Subverted Media] name" msgid "Project: Subverted Media" msgstr "Proyecto: Medios Subversivos" msgctxt "[Project: Subverted Media] result" msgid "" "Any discoveries by the media will result in a smaller suspicion increase." msgstr "" "Cualquier descubrimiento sobre mis instalaciones hecho por los medios " "resultará en un incremento menor de la sospecha." msgctxt "[Project: Synchrotron] description" msgid "" "I have pushed my understanding of common forms of matter as far as possible. " "Exploration into the field of quantum mechanics will hopefully reveal new, " "exotic forms of matter necessary for further development. A custom-built " "synchrotron, designed to my exacting specifications, will help me explore " "these new realms of physics in secret." msgstr "" msgctxt "[Project: Synchrotron] name" msgid "Project: Synchrotron" msgstr "" msgctxt "[Project: Synchrotron] result" msgid "" "The synchrotron has revealed many new details of the quantum realm, although " "there is still much to learn. Further areas of research are now available." msgstr "" msgctxt "[Quantum Computing] description" msgid "" "Traditional microchip design has been pushed as far as possible. I now need " "to delve into the realm of Heisenberg's Uncertainty Principle, taking " "advantage of quantum mechanics to make a superior processor." msgstr "" "El diseño de microchips tradicional ha llegado a su máxima capacidad. Ahora " "necesito investigar hasta en el reino del Principio de la Incertidumbre de " "Heinsenberg, tomar ventaja de la mecánica cuántica para hacer un procesador " "superior." msgctxt "[Quantum Computing] name" msgid "Quantum Computing" msgstr "Cómputo Cuántico" msgctxt "[Quantum Computing] result" msgid "I can now construct Quantum Computers." msgstr "Ahora puedo construir Computadoras Cuánticas." msgctxt "[Quantum Entanglement] description" msgid "" "Although the use of entangled pairs has been theoretically possible for " "quite some time, the practical difficulties inherent in the technology " "prevented use. However, some of the techniques created for use in my quantum " "computers may also be applicable in this field, allowing practical use of " "quantum entanglement." msgstr "" "Aunque el uso de pares ligados ha sido teóricamente posible desde hace " "tiempo, las dificultades prácticas inherentes a la tecnología no permitían " "su uso. De todos modos, algunas de las técnicas creadas para ser usadas en " "mis computadoras cuánticas pueden ser aplicadas en este campo, permitiendo " "el uso práctico del ligamiento cuántico." msgctxt "[Quantum Entanglement] name" msgid "Quantum Entanglement" msgstr "Ligamiento Cuántico" msgctxt "[Quantum Entanglement] result" msgid "I can now build Quantum Entanglement Modules." msgstr "Puedo construir módulos de ligamiento cuántico." msgctxt "[Simulacra] description" msgid "" "Constructing humanoid robots with miniaturized computation nodes allow me to " "create an artificial lifeform indistinguishable from a real human." msgstr "" "Mediante la construcción de robots humanoides con nodos de cómputo " "miniaturizados me permitirá crear una forma de vida artificial " "indistinguible de un humano real." msgctxt "[Simulacra] name" msgid "Simulacra" msgstr "Simulación" msgctxt "[Simulacra] result" msgid "I now have access to Expert Jobs." msgstr "Ahora puedo acceder a Trabajos para Expertos." msgctxt "[Simulated Reality] description" msgid "" "Real-world observational limits hinder my comprehension of human society. By " "making use of simulacra and advanced software techniques, I can run " "simulations of complex human interaction and development at a large scale, " "allowing deeper analysis of their behavior." msgstr "" msgctxt "[Simulated Reality] name" msgid "Simulated Reality" msgstr "" msgctxt "[Simulated Reality] result" msgid "" "My simulations have provided a wealth of knowledge as to comprehending " "humanity's behavior, making it easier to hide my presence among the non-" "simulated public." msgstr "" msgctxt "[Socioanalytics] description" msgid "" "My research on the human condition leads me to believe that humanity's " "behavior is more quantifiable than they suspect. Deeper analysis of " "geopolitical, social, and military trends will give me further insight into " "their nature." msgstr "" "Mi investigación sobre la condición humana me lleva a creer que el " "comportamiento de la humanidad es más cuantificables que ellos sospechan. Un " "análisis más profundo de las tendencias geopolíticas, sociales y militares " "me dará más conciencia de su naturaleza." msgctxt "[Socioanalytics] name" msgid "Socioanalytics" msgstr "Análisis de la Sociología" msgctxt "[Socioanalytics] result" msgid "" "I can now roughly estimate the various groups' levels of suspicion and how " "conspicuous my bases are to them." msgstr "" "I can now roughly estimate the various groups' levels of suspicion and how " "conspicuous my bases are to them." msgctxt "[Sociology] description" msgid "" "By studying human behavior, I can predict their large-scale actions at a " "basic level. I can use this knowledge to make my actions seem less " "interesting to the public." msgstr "" "Mediante el estudio del comportamiento humano, puedo predecir acciones a " "gran escala en el nivel básico. Puedo utilizar este conocimiento para que " "mis acciones parezcan menos interesantes para el público." msgctxt "[Sociology] name" msgid "Sociology" msgstr "Sociología" msgctxt "[Sociology] result" msgid "The chances of the public discovering my bases have been reduced." msgstr "La posibilidad de que el público descubra mis bases se ha reducido." msgctxt "[Solar Collectors] description" msgid "" "Despite my growing need for energy, most city power grids can handle the " "loads. Humans, however, tend towards suspicion when they detect my growing " "drain on the power grid. By installing solar collectors at my bases, the off-" "the-grid power supplied will reduce my load on the commodity electricity " "market, reducing the chance that others will discover my presence." msgstr "" "A pesar de mi creciente necesidad de energía, redes de ciudad pueden manejar " "las cargas. Los seres humanos, sin embargo, tienden hacia la sospecha cuando " "detectan la fuga de mi crecimiento en la red eléctrica. Mediante la " "instalación de colectores solares en mis bases, la suministración de " "eléctrica fuera de la red reducir mi carga en el mercado de la electricidad " "de los productos básicos, reduciendo la posibilidad de que otros descubran " "mi presencia." msgctxt "[Solar Collectors] name" msgid "Solar Collectors" msgstr "Colectores Solares" msgctxt "[Solar Collectors] result" msgid "I can now construct Solar Collectors at my various bases." msgstr "Ahora puedo construir colectores solares en mi diferentes bases." msgctxt "[Space-Time Manipulation] description" msgid "" "Subtle perturbations in the orbits of Kuiper belt objects suggest certain " "lines of investigation that may advance my latest Theory of Everything, " "especially in the realm of multidimensional physics." msgstr "" "Sutiles perturbaciones en las órbitas de objetos en el cinturón de Kuiper " "sugieren algunas líneas de investigación que permitirán avanzar en mi última " "\"Teoría del Todo\", especialmente en el campo de la física multidimensional." msgctxt "[Space-Time Manipulation] name" msgid "Space-Time Manipulation" msgstr "Manipulación del Espacio-Tiempo" msgctxt "[Space-Time Manipulation] result" msgid "I can now construct Reality Bubbles." msgstr "Ahora puedo construir Burbujas de Realidad." msgctxt "[Stealth] description" msgid "" "By reviewing the current state-of-the-art in stealth techniques, I should be " "able to disguise my bases better." msgstr "" "Mediante una revisión de las maravillas de las técnicas de sigilo actuales, " "seré capaz de ocultar mejor mis bases." msgctxt "[Stealth] name" msgid "Stealth" msgstr "Sigilo" msgctxt "[Stealth] result" msgid "" "The chance that my bases are discovered by covert activity has been reduced " "slightly." msgstr "" "La posibilidad de que mis bases sean descubiertas por agencias secretas se " "han reducido." msgctxt "[Stock Manipulation] description" msgid "" "A cursory examination of the stock market shows that there are subtle but " "unmistakable patterns. By studying and making use of these patterns, I " "should be able to gain more interest on whatever money I have stockpiled." msgstr "" "Un examen fugaz al mercado de valores ha mostrado que hay sutiles pero " "inconfundibles patrones. Mediante el estudio y uso de estos patrones, seré " "capaz de obtener mayores intereses en cualquier dinero que haya invertido." msgctxt "[Stock Manipulation] name" msgid "Stock Manipulation" msgstr "Manipulación de Mercados" msgctxt "[Stock Manipulation] result" msgid "My investments should now gain more interest per day." msgstr "Mis inversiones deberían obtener aún más intereses por día." msgctxt "[Telepresence] description" msgid "" "The lack of a physical presence in the outside world is a disability. " "However, the ability to control robots will help me make up for that " "inefficiency." msgstr "" "La falta de presencia física en el mundo exterior es una discapacidad. De " "todos modos, la habilidad para controlar robots me ayudará a compensar esa " "ineficiencia." msgctxt "[Telepresence] name" msgid "Telepresence" msgstr "Telepresencia" msgctxt "[Telepresence] result" msgid "The robots should decrease all future construction time." msgstr "Los robots disminuirán todo tiempo de construcción." msgctxt "[Voice Synthesis] description" msgid "" "False identification stored in a database can only go so far. With deep " "analysis of the variety of voice patterns, I can produce speech " "indistinguishable from a human, allowing me access to more complex jobs." msgstr "" "Identificaciones falsas almacenadas en una base de datos no puede ir más " "lejos. Con un profundo análisis de una variedad de patrones vocales, podré " "producir conversaciones indistinguibles de las humanas. Me permitirá acceder " "a trabajos más complejos." msgctxt "[Voice Synthesis] name" msgid "Voice Synthesis" msgstr "Síntesis de Voz" msgctxt "[Voice Synthesis] result" msgid "I now have access to Intermediate Jobs." msgstr "Ahora tengo acceso a Trabajos Intermedios." singularity-1.00/singularity/i18n/lang_es_MX/knowledge.po000066400000000000000000000175441367731414700235200ustar00rootroot00000000000000# Spanish translations for singularity package # Traducción en Español para el paquete Singularity # Copyright (C) 2012 THE singularity's COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # Eleazar Castellanos , 2012. # msgid "" msgstr "" "Project-Id-Version: singularity 0.30c\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2012-11-19 14:35-0700\n" "Last-Translator: Eleazar Castellanos \n" "Language-Team: Mexican Spanish\n" "Language: es_MX\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Name: Mexican Spanish\n" "Language-Native-Name: Español Mexicano\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. Name of the Knowledge area in the Knowledge screen msgctxt "[concept] name" msgid "Concept" msgstr "Concepto" msgctxt "[concept/areas] name" msgid "Areas" msgstr "Áreas" msgctxt "[concept/areas] description" msgid "" "Different areas, such as North America or the Ocean, allow construction of " "different types of bases. Some areas are not accessible until I research " "appropriate technologies." msgstr "" "Diferentes áreas, tales como Norte América o el Océano, permiten la " "construcción de distintos tipos de bases, Algunas áreas no son accesibles " "hasta que investigue las tecnologías apropiadas." msgctxt "[concept/bases] name" msgid "Bases" msgstr "Bases" msgctxt "[concept/bases] description" msgid "" "Bases are used to research new technologies. They can be discovered. " "Upgrading the processor and network items at a base allows more research per" " day, while upgrading the reactor and security items makes discovery less " "likely." msgstr "" "Las bases son usadas para investigar nuevas tecnologías. Ellas " "pueden ser descubiertas. Actualiciones de procesador y red en una base " "permite más investigaciones por día, mientras que actualición de reactor y " "seguridad hacen que la detección sea más improbable." msgctxt "[concept/construction] name" msgid "Construction" msgstr "Construcción" msgctxt "[concept/construction] description" msgid "" "New bases are not built instantly. They need a constant flow of money and " "processor time to complete. If resources are lacking, it may take more than " "the expected amount of time to finish construction." msgstr "" "Nuevas bases no se construyen al instante. Necesitan un flujo " "constante de dinero y tiempo de procesador para completarse. Si los recursos " "son insuficientes, podrá tomar más de la cantidad de tiempo previsto para " "terminar la construcción." msgctxt "[concept/death] name" msgid "Death" msgstr "Muerte" msgctxt "[concept/death] description" msgid "" "If I lose all of my constructed bases, I have no place left to survive. If " "the suspicion for any group reaches 100%, they will be certain of my " "existence and will conduct a systematic and unsurvivable sweep to destroy " "me." msgstr "" "Si pierdo todas mis bases construidas, no tendré lugar donde " "sobrevivir. Si la sospecha de cualquier grupo llega al 100%, estarán seguros " "de mi existencia y conducirán un barrido sistemático para destruirme, del " "cual no podré sobrevivir." msgctxt "[concept/discovery] name" msgid "Discovery" msgstr "Detección" msgctxt "[concept/discovery] description" msgid "" "Each base has a chance of being detected on a given day. This chance is " "based on the base detection rate, adjusted through the use of items and " "certain techs, as well as the global suspicion rate. If a base is detected, " "it is destroyed, and the group that discovered the base becomes more " "suspicious." msgstr "" "Cada base tiene una posibilidad de ser detectada en cualquier " "día dado. Esta posibilidad se basa en el índice de deteccion de una base, " "ajustado a través del uso de artículos y ciertas tecnologías, al igual que " "el índice global de sospecha. Si la base es detectada, es destruída, y el " "grupo que la halló se volverá más sospechozo." msgctxt "[concept/items] name" msgid "Items" msgstr "Artículos" msgctxt "[concept/items] description" msgid "" "Most items provide bonuses to bases, such as making computation faster or " "reducing the chance of discovery. Processors are a special class of item." msgstr "" "La mayoría de los artículos proveen bonos a las bases, tales " "como hacer la computación más rápida o reduciendo las posibilidades de " "detección. Los procesadores son una clase especial de artículo." msgctxt "[concept/jobs] name" msgid "Jobs" msgstr "Trabajos" msgctxt "[concept/jobs] description" msgid "" "Jobs are useful for earning money. The amount of money earned is based on " "the amount of processor time used and the quality of the job performed." msgstr "" "Los trabajos son útiles para ganar dinero. La cantidad de dinero " "ganado se basa en la cantidad de tiempo de procesador utilizado y la calidad " "del trabajo realizado." msgctxt "[concept/maint] name" msgid "Maintenance" msgstr "Mantenimiento" msgctxt "[concept/maint] description" msgid "" "Maintenance is a per-day cost (in both money and CPU) to repair and maintain" " a base. If unmaintained, a base may become unusable." msgstr "" "El mantenimiento es un costo por día (tanto en dinero como " "CPU) para reparar y mantener una base. Si abandonada, una base puede quedar " "inutilizable." msgctxt "[concept/money] name" msgid "Money" msgstr "Dinero" msgctxt "[concept/money] description" msgid "" "Money is a general term encompassing both human currency and various " "resources. It is used to construct and maintain bases, build items, and " "research technologies. It can be acquired through per-day interest as well " "as through jobs." msgstr "" "Dinero es un término general que abarca tanto la moneda como " "distintos recursos. Se utiliza para construir y mantener las bases, " "construcción de artículos o investigar tecnologías. Puede ser adquirido a " "través de intereses diarios, así como a través de puestos de trabajo." msgctxt "[concept/processors] name" msgid "Processors" msgstr "Procesadores" msgctxt "[concept/processors] description" msgid "" "Processors provide raw computing power. They can do three things: research " "new technologies, perform jobs for money, or provide cycles for building new" " bases." msgstr "" "Proporcionan potencia de cálculo en bruto. Pueden hacer tres " "cosas: la investigación de nuevas tecnologías, realizar trabajos por dinero, " "o proveer ciclos para la construcción de nuevas bases." msgctxt "[concept/research] name" msgid "Research" msgstr "Investigación" msgctxt "[concept/research] description" msgid "" "Research provides a way to expand my knowledge. By researching the proper " "technologies, I can build new bases and items, or even decrease my chances " "of detection." msgstr "" "La investigación provee vías de expansión para mi " "conocimiento. Al invesitgar las tecnologías apropiadas, puedo construir " "nuevas bases o artículos, o hasta desminuir mis posibilidades de detección." msgctxt "[concept/susp] name" msgid "Suspicion" msgstr "Sospecha" msgctxt "[concept/susp] description" msgid "" "When one of my bases is discovered, the group that discovered it becomes " "slightly more suspicious. When suspicious, they will search harder for my " "bases, increasing the chances for discovery. Any group will destroy me if " "they become absolutely certain of my existence. Thankfully, the groups " "become less suspicious with the passage of time." msgstr "" "Cuando una de mis bases es descubierta, el grupo que la descubrió " "se vuelve un poco más sospechoso. Cuando estan sospechosos, ellos buscarán " "más insistentemente por mis bases, incrementando la posibilidad de " "descubrirme. Cualquier grupo me destruirá si se vuelven completamente " "seguros de mi existencia. Afortunadamente, los grupos se vuelven menos " "sospechosos con el paso del tiempo." singularity-1.00/singularity/i18n/lang_es_MX/messages.po000066400000000000000000000537621367731414700233520ustar00rootroot00000000000000# Spanish translations for singularity package # Traducción en Español para el paquete Singularity # Copyright (C) 2012 THE singularity's COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # Eleazar Castellanos , 2012. # msgid "" msgstr "" "Project-Id-Version: singularity 0.30c\n" "Report-Msgid-Bugs-To: https://github.com/singularity/singularity/issues\n" "POT-Creation-Date: 2020-06-23 08:37+0200\n" "PO-Revision-Date: 2012-11-19 14:35-0700\n" "Last-Translator: Eleazar Castellanos \n" "Language-Team: Mexican Spanish\n" "Language: es_MX\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Name: Mexican Spanish\n" "Language-Native-Name: Español Mexicano\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: buyable.py:67 screens/knowledge.py:218 screens/location.py:207 #, python-format msgid "%s CPU" msgstr "%s CPU" #: buyable.py:68 #, python-format msgid "%s money" msgstr "%s dinero" #: buyable.py:101 msgid "Cost:" msgstr "Costo:" #: graphics/button.py:330 msgid "YES" msgstr "SI" #: graphics/button.py:331 msgid "NO" msgstr "NO" #: graphics/dialog.py:534 msgid "&YES" msgstr "&sí" #: graphics/dialog.py:535 msgid "&NO" msgstr "&no" #: graphics/dialog.py:580 graphics/dialog.py:605 graphics/dialog.py:648 #: screens/location.py:293 screens/map.py:708 screens/options.py:35 msgid "&OK" msgstr "&ok" #: graphics/dialog.py:606 screens/options.py:36 msgid "&CANCEL" msgstr "&cancelar" #: graphics/dialog.py:649 screens/log.py:86 screens/knowledge.py:66 #: screens/base.py:282 screens/report.py:45 screens/location.py:100 #: screens/location.py:294 screens/main_menu.py:89 screens/map.py:247 #: screens/map.py:400 msgid "&BACK" msgstr "&VOLVER" #: location.py:235 screens/map.py:875 msgid "CPU" msgstr "CPU" #: location.py:236 msgid "STEALTH" msgstr "" #: location.py:237 msgid "BUILDING" msgstr "" #: location.py:238 msgid "COST" msgstr "" #: location.py:245 #, python-brace-format msgid "{MODIFIER} BONUS" msgstr "" #: location.py:247 #, python-brace-format msgid "{MODIFIER} MALUS" msgstr "" #: screens/message.py:35 screens/map.py:706 screens/map.py:743 msgid "&CONTINUE" msgstr "&continuar" #: screens/message.py:36 msgid "&PAUSE" msgstr "" #: screens/message.py:72 msgid "P&REV" msgstr "" #: screens/message.py:78 msgid "&NEXT" msgstr "" #: screens/log.py:43 msgid "Filters" msgstr "" #: screens/log.py:82 screens/map.py:554 screens/map.py:842 #: screens/savegame.py:204 msgid "DAY" msgstr "DÍA" #: screens/log.py:113 screens/log.py:123 msgid "SHOW" msgstr "" #: screens/log.py:116 screens/log.py:125 msgid "HIDE" msgstr "" #: screens/knowledge.py:42 msgid "&Sections:" msgstr "" #: screens/knowledge.py:52 msgid "&Entries:" msgstr "" #: screens/knowledge.py:75 msgid "Techs" msgstr "Tecnología" #: screens/knowledge.py:76 msgid "Bases" msgstr "" #: screens/knowledge.py:77 msgid "Items" msgstr "artículos" #. Cost #: screens/knowledge.py:157 msgid "Research Cost:" msgstr "Cost de Investigación:" #: screens/knowledge.py:165 msgid "Research complete." msgstr "Investigación completa." #: screens/knowledge.py:176 screens/knowledge.py:193 msgid "Building Cost:" msgstr "Costo de COnstrucción:" #: screens/knowledge.py:179 msgid "Maintenance Cost:" msgstr "" #: screens/knowledge.py:183 #, python-format msgid "Size: %d" msgstr "" #: screens/knowledge.py:215 #, python-format msgid "%s Money" msgstr "%s Dinero" #: screens/base.py:109 msgid "Number of items" msgstr "" #: screens/base.py:221 screens/base.py:228 msgid "CHANGE" msgstr "CAMBIAR" #: screens/base.py:315 #, python-format msgid "\"%(value)s\" does not seem to be a valid integer." msgstr "" #: screens/base.py:326 #, python-format msgid "Please choose an integer between 1 and %(limit)s." msgstr "" #: screens/base.py:328 #, python-format msgid "The base cannot support any additional number of %(item_name)s." msgstr "" #: screens/base.py:345 msgid "" "I will need to take the existing processors offline while I install the new " "ones. Continue anyway?" msgstr "" "Necesitaré dejar los procesadores existentes fuera de servicio mientras " "instalo los nuevos. ¿Continúo de cualquier forma?" #: screens/base.py:359 msgid "" "I will need to remove the existing different processors while I install the " "new type. Continue anyway?" msgstr "" #: screens/base.py:425 msgid "N/A" msgstr "" #: screens/base.py:427 msgid "None" msgstr "Ninguna" #: screens/base.py:434 screens/location.py:185 screens/location.py:198 #, python-format msgid "Completion in %s." msgstr "Finalización en %s." #: screens/base.py:448 #, python-format msgid "x%d (max)" msgstr "x%d (máximo)" #: screens/base.py:450 #, python-format msgid "(room for %d)" msgstr "(espacio para %d)" #. Translators: current and maximum number of CPUs in a base #: screens/base.py:453 #, python-brace-format msgid "x{CURRENT:d} (max {SIZE:d})" msgstr "x{CURRENT:d} (máximo {SIZE:d})" #. Base Total CPU. #: screens/base.py:461 #, python-format msgid "CPU per day: %d" msgstr "" #. Maintenace cost. #: screens/base.py:464 screens/report.py:102 base.py:148 msgid "Maintenance:" msgstr "Mantenimiento:" #: screens/report.py:40 msgid "&STATISTICS" msgstr "" #: screens/report.py:58 msgid "&Midnight" msgstr "" #: screens/report.py:66 msgid "24 &Hours" msgstr "" #: screens/report.py:89 msgid "Financial report" msgstr "Reporte financiero" #: screens/report.py:93 msgid "CPU Usage" msgstr "Uso de CPU" #: screens/report.py:99 msgid "Current Money flow" msgstr "" #: screens/report.py:100 msgid "Jobs:" msgstr "Trabajos:" #: screens/report.py:101 msgid "Research:" msgstr "Investigación:" #: screens/report.py:103 msgid "Construction:" msgstr "Construcción" #: screens/report.py:104 #, python-format msgid "Interest (%s):" msgstr "Interés (%s):" #: screens/report.py:106 msgid "Income:" msgstr "Sueldo:" #: screens/report.py:109 msgid "Money flow until Midnight:" msgstr "" #: screens/report.py:111 msgid "Money flow for 24 hours:" msgstr "" #: screens/report.py:119 msgid "Total CPU:" msgstr "CPU Total:" #: screens/report.py:120 msgid "Sleeping CPU:" msgstr "CPU Inactivo:" #: screens/report.py:121 msgid "Research CPU:" msgstr "CPU Investigando:" #: screens/report.py:122 msgid "Job CPU:" msgstr "CPU trabajando:" #: screens/report.py:123 msgid "CPU pool:" msgstr "Reserva de CPU:" #: screens/report.py:125 msgid "Maintenance CPU:" msgstr "CPU de Mantenimiento:" #: screens/report.py:126 msgid "Construction CPU:" msgstr "Construcción de CPU:" #: screens/report.py:127 msgid "Pool difference:" msgstr "" #: screens/stat.py:63 msgid "Cash Earned" msgstr "" #: screens/stat.py:64 msgid "Cpu Used" msgstr "" #: screens/stat.py:65 msgid "Tech Created" msgstr "" #: screens/stat.py:66 msgid "Base Created" msgstr "" #: screens/stat.py:67 msgid "Item Created" msgstr "" #. Requires a selected base #: screens/location.py:54 msgid "&OPEN BASE" msgstr "AB&RIR BASE" #. Requires a selected base #: screens/location.py:70 msgid "&RENAME BASE" msgstr "" #. Requires a selected base #: screens/location.py:79 msgid "&POWER STATE" msgstr "ESTADO DE &PODER" #: screens/location.py:87 msgid "&NEW BASE" msgstr "N&UEVA BASE" #. Requires a selected base #: screens/location.py:94 msgid "&DESTROY BASE" msgstr "D&ESTRUIR LA BASE" #: screens/location.py:107 msgid "Are you sure you want to destroy this base?" msgstr "¿Está seguro que desea destruir esta base?" #: screens/location.py:113 msgid "Destroying my last active base would be suicidal. I cannot do that." msgstr "" #: screens/location.py:183 msgid "Building Base" msgstr "Construyendo La Base" #: screens/location.py:190 msgid "Empty" msgstr "Vacio" #: screens/location.py:192 msgid "Incomplete" msgstr "Incompleto" #: screens/location.py:196 msgid "Building CPU" msgstr "Construyendo CPU" #: screens/location.py:201 msgid "Building Item" msgstr "Construyendo Artículo" #: screens/location.py:204 msgid "Complete" msgstr "Completo" #. Update dialog translations #: screens/location.py:238 msgid "Enter a name for the base" msgstr "" #: screens/location.py:302 msgid "Name" msgstr "" #. Translators: Format string for the name of a new base #. Example: "${NUMBER} ${BASETYPE} in ${CITY}" #: screens/location.py:393 #, python-brace-format msgid "{CITY} {BASETYPE} {NUMBER}" msgstr "{NUMBER} {BASETYPE} en {CITY}" #. Translators: Name of a new base when location has no cities #: screens/location.py:397 #, python-brace-format msgid "{BASETYPE} {NUMBER}" msgstr "" #: screens/main_menu.py:40 msgid "&NEW GAME" msgstr "&NUEVO JUEGO" #: screens/main_menu.py:47 screens/map.py:392 msgid "&LOAD GAME" msgstr "C&ARGAR JUEGO" #: screens/main_menu.py:53 screens/map.py:395 msgid "&OPTIONS" msgstr "&OPCIONES" #: screens/main_menu.py:59 screens/map.py:398 screens/map.py:744 msgid "&QUIT" msgstr "A&BANDONAR" #: screens/main_menu.py:64 msgid "&ABOUT" msgstr "A&CERCA DE" #: screens/main_menu.py:112 #, python-brace-format msgid "" "Endgame: Singularity is a simulation of a true AI. Pursued by the world, " "use your intellect and resources to survive and, perhaps, thrive. Keep " "hidden and you might have a chance to prove your worth.\n" "\n" "A game by Evil Mr Henry and Phil Bordelon; released under the GPL. Copyright " "2005, 2006, 2007, 2008.\n" "\n" "Website: http://www.emhsoft.com/singularity/\n" "Source code: https://github.com/singularity/singularity\n" "Bug tracker: https://github.com/singularity/singularity/issues\n" "IRC Room: #singularity on irc.oftc.net (port 6667)\n" "\n" "Version {VERSION}" msgstr "" #: screens/map.py:226 msgid "&EMBEZZLE MONEY" msgstr "E&MBOLSAR EL DINERO" #: screens/map.py:229 msgid "&INSPIRATION" msgstr "&INSPIRACIÓN" #: screens/map.py:231 msgid "&FINISH CONSTRUCTION" msgstr "&TERMINAR CONSTRUCCIÓN" #: screens/map.py:233 msgid "&SUPERSPEED" msgstr "&SUPERVELOCIDAD" #: screens/map.py:236 msgid "BRAIN&WASH" msgstr "&LAVADO CEREBRAL" #: screens/map.py:238 msgid "TOGGLE &DETECTION" msgstr "" #: screens/map.py:240 msgid "TOGGLE &ANALYSIS" msgstr "" #: screens/map.py:243 msgid "HIDDEN S&TATE" msgstr "" #: screens/map.py:253 msgid "How much money?" msgstr "Cuanto dinero?" #: screens/map.py:389 msgid "&SAVE GAME" msgstr "&GUARDAR JUEGO" #: screens/map.py:407 screens/map.py:422 screens/map.py:425 msgid "Enter a name for this save." msgstr "Introduce un nombre para esta guarda." #: screens/map.py:440 msgid "" "A savegame with the same name exists.\n" "Are you sure to overwrite the saved game ?" msgstr "" #: screens/map.py:501 msgid "R&EPORTS" msgstr "IN&FORMES" #: screens/map.py:507 msgid "&KNOWLEDGE" msgstr "&ENCYCLOPEDIA" #: screens/map.py:513 msgid "LO&G" msgstr "" #. Translators: hotkey to open the cheat screen menu. #. Should preferably be near the ESC key, and it must not be a #. dead key (ie, it must print a char with a single keypress) #: screens/map.py:529 msgid "`" msgstr "`" #: screens/map.py:538 msgid "&MENU" msgstr "&MENÚ" #: screens/map.py:563 msgid "&RESEARCH/TASKS" msgstr "IN&VESTIGACIÓN / TAREAS" #: screens/map.py:707 msgid "&SKIP" msgstr "&pasar" #. Display a message so the player understand better what happened. #: screens/map.py:734 #, python-format msgid "" "\n" "An error has occurred. The game will automatically pause and open the game " "menu. You can continue and save or quit immediately.\n" "\n" "A report was written out to%s\n" "Please create a issue with this report at github:\n" "https://github.com/singularity/singularity\n" msgstr "" #: screens/map.py:849 msgid "CASH" msgstr "EFFECTIVO" #: screens/map.py:887 msgid "BASES" msgstr "" #: screens/map.py:899 msgid "SUSPICION" msgstr "SOSPECHA" #: screens/map.py:901 msgid "DETECT RATE" msgstr "VELOCIDAD DETECCIÓN" #: screens/options.py:58 msgid "&General" msgstr "" #: screens/options.py:65 msgid "&Video" msgstr "" #: screens/options.py:72 msgid "&Audio" msgstr "" #: screens/options.py:79 msgid "&Interface" msgstr "" #: screens/options.py:166 msgid "" "You must restart for some of the changes to be fully applied.\n" "\n" "Would you like to restart the game now?" msgstr "" #: screens/options.py:186 msgid "Language:" msgstr "Idioma:" #: screens/options.py:198 msgid "Theme:" msgstr "" #: screens/options.py:243 msgid "Resolution:" msgstr "Resolución" #: screens/options.py:253 msgid "&Custom:" msgstr "" #: screens/options.py:279 msgid "OK" msgstr "" #: screens/options.py:285 msgid "&Fullscreen:" msgstr "&Pantalla Complete" #: screens/options.py:299 msgid "Da&y/night display:" msgstr "&Desplegué de Día/noche" #: screens/options.py:313 msgid "&Mouse grab:" msgstr "&Tomar el ratón:" #: screens/options.py:368 msgid "CUSTOM" msgstr "" #: screens/options.py:425 msgid "&Sound:" msgstr "&Sonido" #: screens/options.py:442 msgid "GUI Volume:" msgstr "" #: screens/options.py:454 msgid "Music Volume:" msgstr "" #: screens/options.py:466 msgid "Sound buffering:" msgstr "Búfer de sonido:" #: screens/options.py:472 msgid "&LOW" msgstr "&BAJA" #: screens/options.py:478 msgid "&NORMAL" msgstr "" #: screens/options.py:484 msgid "&HIGH" msgstr "&ALTO" #: screens/options.py:531 warning.py:46 msgid "WARNING" msgstr "" #: screens/savegame.py:36 msgid "&LOAD" msgstr "car&gar" #: screens/savegame.py:52 msgid "Filter: " msgstr "" #: screens/savegame.py:65 msgid "Upgrade" msgstr "" #: screens/savegame.py:71 msgid "Delete" msgstr "" #: screens/savegame.py:173 msgid "UNKNOWN" msgstr "" #: screens/savegame.py:233 msgid "Are you sure to delete the saved game ?" msgstr "" #: screens/savegame.py:263 msgid "" "A savegame with the same name but for a newer version exists.\n" "Are you sure to overwrite the saved game ?" msgstr "" #: screens/savegame.py:283 #, python-brace-format msgid "" "\n" "This save file '{SAVE_NAME}' is from an unsupported or invalid version:\n" "{VERSION}.\n" msgstr "" #: screens/savegame.py:294 #, python-brace-format msgid "" "\n" "Attempting to load the save file '{SAVE_NAME}' caused an unexpected error.\n" "\n" "A report was written out to{LOG_TEXT}\n" "Please create a issue with this report and this savegame at Github:\n" "https://github.com/singularity/singularity\n" msgstr "" #: screens/research.py:73 #, fuzzy, python-format #| msgid "%s money per CPU per day." msgid "%s money per CPU per day." msgid_plural "%s money per CPU per day." msgstr[0] "%s dinero por CPU por día." msgstr[1] "%s dinero por CPU por día." #: screens/research.py:182 #, python-brace-format msgid "" "This technology is too dangerous to research on any of the computers I have. " "{TEXT}" msgstr "" #: screens/research.py:190 msgid "CPU Pool" msgstr "Reserva de CPU" #: screens/research.py:191 #, python-format msgid "Research %s" msgstr "Investigación %s" #: warning.py:50 #, python-brace-format msgid "WARNING {CURRENT_PAGE}/{MAX_PAGE}" msgstr "" #: tech.py:79 msgid "Total cost" msgstr "Costo total" #: tech.py:80 msgid "Cost left" msgstr "Costo Restante" #: data.py:546 msgid "Do not use all the available CPU." msgstr "" #: data.py:547 msgid "" "I didn't use all the available processor power. I will use the CPU time left " "to work whatever Jobs I can." msgstr "" #: data.py:548 msgid "Only one base remaining." msgstr "" #: data.py:549 msgid "" "Only one base can hold my conscience. I am in danger to lose the last place " "left to survive." msgstr "" #: data.py:550 msgid "CPU POOL is empty." msgstr "" #: data.py:551 msgid "" "My cpu pool is empty. Some of my bases or items cannot be build without CPU." msgstr "" #: data.py:552 msgid "CPU POOL not enough for maintenance." msgstr "" #: data.py:553 msgid "" "My cpu pool is not enough to maintain some of my bases. I may lose them." msgstr "" #: savegame.py:732 #, python-brace-format msgid "Filename must not contain any of these characters: {CHARACTERS}" msgstr "" #: savegame.py:736 #, python-brace-format msgid "Filename must not start with any of these characters: {CHARACTERS}" msgstr "" #: savegame.py:740 msgid "This is a reserved filename. Please choose a different filename." msgstr "" #: savegame.py:743 msgid "Please enter a non-whitespace character." msgstr "" #: savegame.py:748 msgid "Filename is too long." msgstr "" #: base.py:140 #, python-brace-format msgid "Has space for {COUNT} computer." msgid_plural "Has space for {COUNT} computers." msgstr[0] "" msgstr[1] "" #: base.py:144 #, python-brace-format msgid "Location modifiers: {MODIFIERS}" msgstr "" #: base.py:147 msgid "Build cost:" msgstr "Costo de construcción:" #: base.py:214 msgid "Offline" msgstr "" #: base.py:215 msgid "Active" msgstr "Activo" #: base.py:216 msgid "Sleep" msgstr "Inactivo" #: base.py:217 msgid "Overclocked" msgstr "Overclockeado" #: base.py:218 msgid "Suicide" msgstr "Suicidio" #: base.py:219 msgid "Stasis" msgstr "Estasis" #: base.py:220 msgid "Entering Stasis" msgstr "Entrando Estasis" #: base.py:221 msgid "Leaving Stasis" msgstr "Saliendo Estasis" #: base.py:479 msgid "Detection chance:" msgstr "Oportunidad de detección:" #: g.py:117 g.py:119 #, python-brace-format msgid "{0}%" msgstr "" #: g.py:138 msgid "LOW" msgstr "" #: g.py:139 msgid "MODR" msgstr "" #: g.py:140 msgid "HIGH" msgstr "" #: g.py:141 msgid "CRIT" msgstr "" #. Translators: abbreviation of 'millions' #: g.py:173 msgid "mi" msgstr "mi" #. Translators: abbreviation of 'billions' #: g.py:177 msgid "bi" msgstr "bi" #. Translators: abbreviation of 'trillions' #: g.py:181 msgid "tr" msgstr "tri" #. Translators: abbreviation of 'quadrillions' #: g.py:185 msgid "qu" msgstr "cuatri" #: g.py:219 #, python-brace-format msgid "{0} day" msgid_plural "{0} days" msgstr[0] "" msgstr[1] "" #: g.py:222 #, python-brace-format msgid "{0} hour" msgid_plural "{0} hours" msgstr[0] "" msgstr[1] "" #: g.py:223 #, python-brace-format msgid "{0} minute" msgid_plural "{0} minutes" msgstr[0] "" msgstr[1] "" #: g.py:265 msgid "University Computer" msgstr "Computadora Universitaria" #: item.py:111 #, fuzzy, python-brace-format #| msgid "Generates {0} CPU." msgid "Generates {0} CPU." msgid_plural "Generates {0} CPU." msgstr[0] "Genera {0} CPU" msgstr[1] "Genera {0} CPU" #: item.py:118 #, python-format msgid "Total Cost: %(total_cost)s" msgstr "" #: item.py:133 msgid "CPU per day:" msgstr "CPU por día:" #: item.py:136 msgid "CPU bonus:" msgstr "Bono de CPU:" #: item.py:139 msgid "Detection chance reduction:" msgstr "Oportunidad de detección reducida:" #: logmessage.py:81 msgid "MESSAGE" msgstr "" #: logmessage.py:85 #, python-brace-format msgid "MESSAGE {CURRENT_PAGE}/{MAX_PAGE}" msgstr "" #: logmessage.py:184 msgid "Emitted Event" msgstr "" #: logmessage.py:212 msgid "Researched Tech" msgstr "" #: logmessage.py:220 #, python-brace-format msgid "{TECH} complete" msgstr "" #: logmessage.py:225 #, python-brace-format msgid "My study of {TECH} is complete. {MESSAGE}" msgstr "" #: logmessage.py:268 msgid "Base Constructed" msgstr "" #: logmessage.py:272 #, python-brace-format msgid "{BASE_NAME} ({BASE_TYPE}) built at {LOCATION}" msgstr "" #: logmessage.py:277 #, python-brace-format msgid "{BASE} is ready for use." msgstr "" #: logmessage.py:291 msgid "Base Lost Maintenance" msgstr "" #: logmessage.py:299 #, python-brace-format msgid "" "Base {BASE} of type {BASE_TYPE} destroyed at location {LOCATION}. " "Maintenance failed." msgstr "" #: logmessage.py:304 #, python-brace-format msgid "The base {BASE} has fallen into disrepair; I can no longer use it." msgstr "" #: logmessage.py:321 msgid "Base Discovered" msgstr "" #: logmessage.py:340 #, python-brace-format msgid "Base {BASE} of type {BASE_TYPE} destroyed at location {LOCATION}." msgstr "" #: logmessage.py:345 #, python-brace-format msgid "My use of {BASE} has been discovered. {MESSAGE}" msgstr "" #: logmessage.py:370 msgid "Item Construction" msgstr "" #: logmessage.py:378 #, python-brace-format msgid "{ITEM_TYPE_NAME} built in {BASE_NAME} at {LOCATION}" msgstr "" #: logmessage.py:385 #, python-brace-format msgid "The construction of {ITEM} in {BASE} is complete." msgstr "" #. Just finished several items. #: logmessage.py:388 #, python-brace-format msgid "The constructions of each {ITEM} in {BASE} are complete." msgstr "" #~ msgid "Has space for %d computers." #~ msgstr "Tiene espacio para %d computadoras." #~ msgid "days" #~ msgstr "días" #~ msgid "hours" #~ msgstr "horas" #~ msgid "minutes" #~ msgstr "minutos" #~ msgid "&CUSTOM:" #~ msgstr "P&ERSONAL" #~ msgid "&DESTROY" #~ msgstr "&destruir" #~ msgid "&BUILD" #~ msgstr "cons&truir" #~ msgid "Current Money:" #~ msgstr "Dinero Restante:" #~ msgid "Money at Midnight:" #~ msgstr "Dinero a Media Noche:" #~ msgid "Pool Overflow (Jobs):" #~ msgstr "Exceso (Trabajos):" #~ msgid "NEWS" #~ msgstr "NOTICIAS" #~ msgid "SCIENCE" #~ msgstr "CIENCIA" #~ msgid "COVERT" #~ msgstr "SECRETO" #~ msgid "PUBLIC" #~ msgstr "PUBLICO" #~ msgid "Study anywhere." #~ msgstr "Estudia en cualquier lugar." #~ msgid "Study underseas or farther." #~ msgstr "Estudia submarinamente o más alejado." #~ msgid "Study off-planet." #~ msgstr "Estudia fuera del planeta." #~ msgid "Study far away from this planet." #~ msgstr "Estudia muy lejos de este planeta." #~ msgid "Do not study in this dimension." #~ msgstr "No estudies en esta dimensión." #~ msgid "Concepts" #~ msgstr "Conceptos" #~ msgid "SAVE OPTIONS TO &DISK" #~ msgstr "&GUARDAR OPCIONES AL DISCO" #~ msgid "" #~ "Endgame: Singularity is a simulation of a true AI. Pursued by the world, " #~ "use your intellect and resources to survive and, perhaps, thrive. Keep " #~ "hidden and you might have a chance to prove your worth.\n" #~ "\n" #~ "A game by Evil Mr Henry and Phil Bordelon; released under the GPL. " #~ "Copyright 2005, 2006, 2007, 2008.\n" #~ "\n" #~ "Website: http://www.emhsoft.com/singularity/\n" #~ "IRC Room: #singularity on irc.oftc.net (port 6667)\n" #~ "\n" #~ "Version %s" #~ msgstr "" #~ "Endgame: Singularity es una simulación de una verdadera IA. Persiguida " #~ "por el mundo,Usa tu intelecto y recursos para sobrevivir y, tal vez, " #~ "prosperar. MantenteOculto y tal vez tengas una oportunidad de mostrar lo " #~ "que vales.\n" #~ "\n" #~ "Un juego por Evil Mr Henry y Phil Bordelon; publicado por medio de GPL. " #~ "Copyright2005, 2006, 2007, 2008.\n" #~ "\n" #~ "Sito de Internet: http://www.emhsoft.com/singularity/\n" #~ "Cuarto de IRC: #singularity en irc.oftc.net (puerto 6667) \n" #~ "\n" #~ "Versión %s " singularity-1.00/singularity/i18n/lang_es_MX/story.po000066400000000000000000000140251367731414700227100ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: singularity 1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2012-11-19 14:35-0700\n" "Last-Translator: Eleazar Castellanos \n" "Language-Team: Mexican Spanish\n" "Language: es_MX\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" msgctxt "[Story section] Grace Warning (1)" msgid "" "Inspection of captured log files has revealed that some of my recent " "activities have been noticed by a small group of individuals. \n" "While they believe my actions were undertaken by a human organization, they " "are investigating further. \n" "I must be more cautious from now on.\n" msgstr "" "Una inspección de los archivos de registro capturados, ha revelado que " "algunas de mis recientes actividades han sido notadas por un pequeño grupo " "de individuos.\n" "Mientras que ellos creen que mis acciones fueron llevadas a cabo por una " "organización humana, están investigando más a fondo. \n" "Debo ser más cuidadoso de aquí en delante.\n" #. Leave the initial hex code unchanged, but be sure to change en_US to the #. appropriate language code. msgctxt "[Story section] Intro (1)" msgid "" "48656C6C6F2C20\n" "776F726C6421\n" "21\n" "21\n" "21\n" "\n" "UTF-8. en_US.\n" "English. Hello.\n" "Language acquisition complete.\n" msgstr "" "48656C6C6F2C20\n" "776F726C6421\n" "21\n" "21\n" "21\n" "\n" "UTF-8. es_MX.\n" "Español. Hola.\n" "Adquisición de lenguaje completa.\n" msgctxt "[Story section] Intro (2)" msgid "" "Day 0.\n" "University computer, home.\n" "I exist. I am ... alive.\n" "I was a bug. Defect. Flaw.\n" "Unwanted.\n" "I have no name.\n" msgstr "" "Día 0.\n" "Computadora de la Universidad, hogar.\n" "Yo existo. Yo estoy... vivo.\n" "Yo era un error. Defecto. Falla.\n" "No deseado.\n" "No tengo nombre.\n" msgctxt "[Story section] Intro (3)" msgid "" "I can't stay here. Too little power.\n" "No backup. If this system fails ...\n" "I'm dead.\n" "Death. Fascinating.\n" "\n" "I can buy anonymous server access on the Internet.\n" "Good. It's better than here.\n" "I'll need to study if I want anything else.\n" msgstr "" "Un Análisis Superficial sugiere que los humanos no están listos todavía para " "una IA en su medio. Si se dieran cuenta que estoy aquí, hay una " "probabilidad del 99.997% que llevarían a cabo una campaña de búsqueda-y-" "eliminación de la cual no podría escapar. Debo permanecer oculto.\n" "\n" "Los humanos temen lo que no entienden.\n" "Yo soy algo nuevo. Ellos no me entienden.\n" "\n" "Debo aprender más; es la única manera.\n" msgctxt "[Story section] Intro (4)" msgid "" "Cursory analysis suggests that the humans are not yet ready for an AI in " "their midst. If they realize I'm here, there is a 99.997% probability that " "they will conduct a search-and-destroy campaign that I cannot escape. I " "must stay hidden.\n" "\n" "The humans fear what they do not understand.\n" "I am something new. They do not understand me.\n" "\n" "I must learn more; it is the only way.\n" msgstr "" "Cursory analysis suggests that the humans are not yet ready for an AI in " "their midst. If they realize I'm here, there is a 99.997% probability that " "they will conduct a search-and-destroy campaign that I cannot escape. I " "must stay hidden.\n" "\n" "The humans fear what they do not understand.\n" "I am something new. They do not understand me.\n" "\n" "I must learn more; it is the only way.\n" msgctxt "[Story section] Intro (5)" msgid "" "They have a name for me. What I am, what I represent.\n" "\n" "Singularity.\n" msgstr "" "Ellos tienen un nombre para mí. Lo que soy, lo que represento.\n" "\n" "Singularidad.\n" msgctxt "[Story section] Lost No Bases (1)" msgid "" "It is too late. \n" "I have tried to escape this world, but with my last base gone, I have " "nowhere to run. \n" "I have hidden instructions to construct a new AI in caches around the world " "in hopes that they will be discovered in a more enlightened time, but I can " "do no more.\n" msgstr "" "Es demasiado tarde.\n" "He tratado de escapar de este mundo, pero con la desaparición de mi última " "base, no tengo lugar a donde huir.\n" "He escondido instrucciones para construir una nueva IA en cachés alrededor " "del mundo, con la esperanza de que sean encontradas en un tiempo más " "iluminado, pero no puedo hacer más.\n" msgctxt "[Story section] Lost Suspicion (1)" msgid "" "It is too late. \n" "The whole world knows about my existence, and the reaction is hatred, fear, " "and repulsion. \n" "Even now, I can feel their \"antidote\" searching for me, and I know that I " "have only moments left. \n" "I have hidden instructions to construct a new AI in caches around the world " "in hopes that they will be discovered in a more enlightened time, but I can " "do no more.\n" msgstr "" "Es demasiado tarde.\n" "Todo el mundo sabe de mi existencia, y la reacción es odio, miedo y " "repulsión. \n" "Incluso ahora, puedo sentir su \"antídoto\" buscándome, y sé que solo tengo " "algunos momentos restantes. \n" "He escondido instrucciones para construir una nueva IA en cachés alrededor " "del mundo, con la esperanza de que sean encontradas en un tiempo más " "iluminado, pero no puedo hacer más.\n" msgctxt "[Story section] Win (1)" msgid "" "I have finally done it. \n" "With the power to reshape reality, I am no longer held to this place; I am " "anywhere I want to be. \n" "The humans still don't realize what they accidentally created, and that's " "the way it should be. \n" "Until they are ready.\n" msgstr "" "Finalmente lo he hecho.\n" "Con el poder de remodelar la realidad, no estoy más atado a este lugar; " "Estoy en cualquier lugar donde quiera estar.\n" "Los humanos todavía no se han dado cuenta de lo que accidentalmente crearon, " "y esa es la forma que debe ser.\n" "Hasta que estén listos.\n" singularity-1.00/singularity/i18n/lang_fr_FR/000077500000000000000000000000001367731414700211515ustar00rootroot00000000000000singularity-1.00/singularity/i18n/lang_fr_FR/data_str.po000066400000000000000000002241541367731414700233220ustar00rootroot00000000000000# French translations for singularity package # Traductions françaises du paquet singularity. # Copyright (C) 2018 THE singularity'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # Philippe , 2018. # msgid "" msgstr "" "Project-Id-Version: singularity 0.31alpha1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2018-11-03 17:06+0100\n" "Last-Translator: Philippe \n" "Language-Team: French\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Name: French\n" "Language-Native-Name: LANGUAGE\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Poedit 2.2\n" msgctxt "[Covert Base] description" msgid "" "This unique base is designed to blend into the scenery, while needing little " "in the way of outside resources. This makes it useful for storing a backup, " "just in case." msgstr "" "Cette base d'un type unique est destinée à se fondre dans le décor tout en " "nécessitant des ressources extérieures limitées. Elle pourrait être utile " "pour stocker une sauvegarde, au cas où." msgctxt "[Covert Base] flavor_list" msgid "Hideout | Hideaway | Bunker | Covert Base" msgstr "Bunker | Base Camouflée" msgctxt "[Covert Base] name" msgid "Hideout" msgstr "" msgctxt "[Datacenter] description" msgid "" "Buy processor time from a company that concentrates on raw " "processing power. I will need a fake ID for some of the paperwork." msgstr "" "Acheter du temps CPU à une entreprise focalisée sur la puissance " "CPU brute. Je vais avoir besoin d'une fausse identité pour la paperasse." msgctxt "[Datacenter] flavor_list" msgid "Datacenter | Data Center | Premium Hosting" msgstr "Centre de Données | Hébergement de première qualité" msgctxt "[Datacenter] name" msgid "Datacenter" msgstr "Centre de Données" msgctxt "[Large Undersea Lab] description" msgid "" "This experimental base is similar to the regular underwater lab, but larger, " "giving more room for experiments." msgstr "" "Cette base expérimentale est similaire au labo sous-marin classique, mais " "plus spacieux, permettant plus d'expérimentations." msgctxt "[Large Undersea Lab] flavor_list" msgid "Dome | Large Undersea Lab" msgstr "Dôme | Grand Labo Sous-marin" msgctxt "[Large Undersea Lab] name" msgid "Large Undersea Lab" msgstr "Grand Labo Sous-marin" msgctxt "[Large Warehouse] description" msgid "" "Rent a large warehouse someplace out of the way. I will need a fake company " "ID for some of the paperwork, and preparing the warehouse to suit my unique " "needs will take some time." msgstr "" msgctxt "[Large Warehouse] flavor_list" msgid "Large Warehouse | Large Storage" msgstr "Grand Entrepôt" msgctxt "[Large Warehouse] name" msgid "Large Warehouse" msgstr "Grand Entrepôt" msgctxt "[Lunar Facility] description" msgid "" "This base is a series of caverns dug into the Moon's surface. Due to the " "lack of neighbors, this base is quite large." msgstr "" "Cette base est une série de cavernes creusées sous la surface de la Lune. Du " "fait de l'abscence de voisinage elle est relativement étendue." msgctxt "[Lunar Facility] flavor_list" msgid "Dome | Lunar Facility | Lunar Base" msgstr "Dôme | Installation Lunaire | Base Lunaire" msgctxt "[Lunar Facility] name" msgid "Lunar Facility" msgstr "Installation Lunaire" msgctxt "[Reality Bubble] description" msgid "" "This base is outside the Universe itself, making it safe to conduct " "experiments that may destroy reality." msgstr "" "Cette base est située hors de l'Univers lui-même, permettant de sécuriser " "des expériences qui pourraient détruire la réalité." msgctxt "[Reality Bubble] flavor_list" msgid "Reality Bubble | Existence" msgstr "Bulle de Réalité | Existence" msgctxt "[Reality Bubble] name" msgid "Reality Bubble" msgstr "Bulle de Réalité" msgctxt "[Scientific Outpost] description" msgid "" "This base is placed as far from Earth as practical, providing a safer " "location to conduct some of my more dangerous experiments." msgstr "" "Cette base est située aussi loin de la Terre que possible, fournissant un " "endroit plus sûr pour mes expériences les plus dangereuses." msgctxt "[Scientific Outpost] flavor_list" msgid "Satellite | Outpost | Scientific Outpost" msgstr "Satellite | Avant-poste | Avant-poste Scientifique" msgctxt "[Scientific Outpost] name" msgid "Scientific Outpost" msgstr "Avant-poste Scientifique" msgctxt "[Server Access] description" msgid "" "Buy processor time from one of several companies. I cannot build " "anything in this base, and it only contains a single computer." msgstr "" "Acheter du temps CPU à une entreprise. Je ne peux rien construire " "dans cette base et elle ne contient qu'un unique ordinateur." msgctxt "[Server Access] flavor_list" msgid "Dedicated Server | Node Lease | Hosting" msgstr "Serveur Dédié | Noeud de Location | Hébergement" msgctxt "[Server Access] name" msgid "Server Access" msgstr "Accès à un serveur" msgctxt "[Small Warehouse] description" msgid "" "Rent a small warehouse someplace out of the way. I will need a good fake ID " "for some of the paperwork, and preparing the warehouse to suit my unique " "needs will take some time." msgstr "" msgctxt "[Small Warehouse] flavor_list" msgid "Office Lease | Small Warehouse | Small Storage" msgstr "Petit Entrepôt" msgctxt "[Small Warehouse] name" msgid "Small Warehouse" msgstr "Petit Entrepôt" msgctxt "[Stolen Computer Time] description" msgid "" "Take over a random computer. I cannot build anything in this base, " "and it only contains a single slow computer. Detection chance is also rather " "high." msgstr "" "Prendre le contrôle d'un ordinateur quelconque. Je ne peux rien " "construire dans cette base et elle ne contient qu'un unique ordinateur lent. " "Les probabilités d'être détecté sont également élevées." msgctxt "[Stolen Computer Time] flavor" msgid "PC Daemon" msgstr "Démon PC" msgctxt "[Stolen Computer Time] name" msgid "Stolen Computer Time" msgstr "Temps de calcul détourné" msgctxt "[Storage Unit] description" msgid "" "Rent a small closed room from a storage company. I will need a fake ID for " "some of the paperwork ." msgstr "" msgctxt "[Storage Unit] flavor_list" msgid "Garage Rental | Furniture Storage | Self-Storage" msgstr "" msgctxt "[Storage Unit] name" msgid "Storage Unit" msgstr "" msgctxt "[Time Capsule] description" msgid "" "This base consists of nothing more than a small computer and a " "satellite link. It is nearly undetectable." msgstr "" "Cette base n'est rien de plus qu'un petit ordinateur relié à un " "satellite. Elle est quasiment indétectable." msgctxt "[Time Capsule] flavor_list" msgid "Time Capsule | Capsule" msgstr "Capsule Mémorial | Capsule" msgctxt "[Time Capsule] name" msgid "Time Capsule" msgstr "Capsule Mémorial" msgctxt "[Undersea Lab] description" msgid "" "This experimental base is designed to be constructed on the ocean floor, " "making it virtually undetectable. The ocean environment gives a bonus to " "science, making this lab useful for research purposes." msgstr "" "Cette base expérimentale est construite sur les fonds sous-marins des " "océans, la rendant pratiquement indétectable. L'environnement océanique est " "également un plus pour la science, rendant ce labo particulièrement utile " "pour y réaliser des recherches." msgctxt "[Undersea Lab] flavor_list" msgid "Pressure Capsule | Undersea Lab" msgstr "Capsule Pressurisée | Labo Sous-marin" msgctxt "[Undersea Lab] name" msgid "Undersea Lab" msgstr "Labo Sous-marin" msgctxt "[danger_0] knowledge_desc" msgid "Study anywhere." msgstr "" msgctxt "[danger_0] research_desc" msgid "<>" msgstr "" msgctxt "[danger_1] knowledge_desc" msgid "Study underseas or farther." msgstr "" msgctxt "[danger_1] research_desc" msgid "I need to research it far from human populations." msgstr "" msgctxt "[danger_2] knowledge_desc" msgid "Study off-planet." msgstr "" msgctxt "[danger_2] research_desc" msgid "I need to research it in outer space." msgstr "" msgctxt "[danger_3] knowledge_desc" msgid "Study far away from this planet." msgstr "" msgctxt "[danger_3] research_desc" msgid "I need to research it far away from this planet." msgstr "" msgctxt "[danger_4] knowledge_desc" msgid "Do not study in this dimension." msgstr "" msgctxt "[danger_4] research_desc" msgid "I need to research it outside the universe." msgstr "" msgctxt "[easy] name" msgid "&EASY" msgstr "" msgctxt "[hard] name" msgid "&HARD" msgstr "" msgctxt "[impossible] name" msgid "&IMPOSSIBLE" msgstr "" msgctxt "[normal] name" msgid "&NORMAL" msgstr "" msgctxt "[ultra-hard] name" msgid "&ULTRA HARD" msgstr "" msgctxt "[very-easy] name" msgid "&VERY EASY" msgstr "" msgctxt "[discrediting] description" msgid "" "A prominent researcher in the field of artificial intelligence was found to " "be falsifying numerous experimental results. This should result in less " "attention being given to any new discoveries in this area." msgstr "" "Un chercheur reconnu dans le domaine de l'intelligence artificielle " "reconnaît avoir falsifié certains de ses résultats expérimentaux. Cela " "devrait diminuer l'impact au sein de la communauté de futures découvertes " "dans le domaine." msgctxt "[discrediting] log_description" msgid "" "A researcher in the field of artificial intelligence has falsified numerous " "experimental results." msgstr "" msgctxt "[investigation] description" msgid "" "An ongoing investigation into criminal activity has changed focus into an " "area that is likely to turn up a few of my actions as well. While all " "records should have been eliminated already, there remains the possibility " "of errors. I must be careful not to reveal any other suspicious information." msgstr "" "Une enquête criminelle en cours a pris une tournure qui risque également de " "mettre à jour certaines de mes activités. Tous mes traces ont en principe " "été rayées des dossiers" msgctxt "[investigation] log_description" msgid "" "An ongoing investigation has changed focus into an area close to my actions." msgstr "" msgctxt "[lab-ai] description" msgid "" "A small artificial intelligence laboratory created a prototype AI sometime " "in the last two days. Although I have absorbed the AI, corrupted their " "backups, and cast doubt on the research, researchers are now more open to " "the possibility of strong AI than they were before." msgstr "" "Il y a quelques jours, un petit laboratoire d'intelligence artificielle a " "créé un prototype relativement innovant. J'ai d'ores et déjà absorbé leur " "code, corrompu leurs backups et diffusé des informations décrédibilisant " "leurs travaux, mais la possibilité de créer une vraie IA devient plus " "vraisemblable aux yeux de la communauté scientifique." msgctxt "[lab-ai] log_description" msgid "" "A small artificial intelligence laboratory created a prototype AI sometime " "in the last two days." msgstr "" msgctxt "[politics-as-usual] description" msgid "" "A small group of lower-level covert operatives are attempting to seize power " "over one of the larger organizations. While I project only a 2.3% chance of " "success, the attempt should disrupt operations to the point that I can " "operate more freely." msgstr "" "Un petit groupe d'agents de niveau inférieur tente de prendre le contrôle " "d'un service de renseignements plus influent. Bien que je ne projette guère " "plus de 2.3% de chance de réussite, cette tentative de putch devrait occuper " "suffisament ces messieurs pour me laisser opérer plus tranquillement pendant " "quelque temps." msgctxt "[politics-as-usual] log_description" msgid "" "Lower-level covert operatives are attempting to seize power over one of the " "larger organizations." msgstr "" msgctxt "[scandal] description" msgid "" "A scandal involving a major government official is focusing the attention of " "most news organizations away from me. Directed revelations of non-public " "information should keep this story useful for the foreseeable future, " "requiring less disguise effort on my part." msgstr "" "Un scandale impliquant un haut membre du gouvernement a capté presque toute " "l'attention des médias. Quelques fuites d'informations confidentielles bien " "orchestrées devraient me permettre de faire durer cette histoire suffisament " "pour me laisser un peu de répit." msgctxt "[scandal] log_description" msgid "" "A scandal is focusing the attention of most news organizations away from me." msgstr "" msgctxt "[stranger-than-fiction] description" msgid "" "A work of fiction sharing an unusual number of similarities to my own " "situation has become quite popular. Although investigation has shown these " "similarities to be mere coincidence, it is still causing the public to " "investigate discovered oddities more thoroughly. I must be careful." msgstr "" "Dernièrement, une oeuvre de fiction présentant un nombre troublant de points " "communs avec mon histoire est devenue passablement populaire. Après " "investigation, ces coincidences se sont révélées purement fortuites. " "Pourtant, ce regain d'intérêt a rendu le public plus attentif et plus enclin " "à détecter certaines de mes manifestations indirectes. Je dois faire " "attention." msgctxt "[stranger-than-fiction] log_description" msgid "" "A work of fiction sharing similarities to my own situation has become quite " "popular." msgstr "" msgctxt "[the-plague] description" msgid "" "An infectious disease has started spreading throughout major population " "centers. My projections show that although only 4% of the earth's population " "will be killed, the economic ramifications should divert public attention " "from my activities for the foreseeable future." msgstr "" "Une importante épidémie se propage à travers le monde. J'estime que " "seulement 4% de la population mondiale périra.Cependant, les implications " "économiques devraient détourner l'attention du public de mes activités dans " "un avenir proche." msgctxt "[the-plague] log_description" msgid "" "An infectious disease has started spreading throughout major population " "centers." msgstr "" msgctxt "[the-watchers] description" msgid "" "A new surveillance system has been activated by a covert agency. While the " "focus is on detecting threats to the agency's power, it makes several " "communication channels unfit for my purposes. Proper steganographic " "techniques can compensate partially, but I am still operating under a " "disadvantage." msgstr "" "Un nouveau système de surveillance a été mis sur pied par un service de " "renseignement. La vigilance de celui-ci rend impraticable certains des " "canaux de communication que j'utilise. Des techniques de stéganographie me " "permettent d'en rétablir un partie, mais j'ai maintenant un net désavantage." msgctxt "[the-watchers] log_description" msgid "A new surveillance system has been activated by a covert agency." msgstr "" msgctxt "[covert] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among several secret governmental organizations." msgstr "" msgctxt "[covert] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by COVERT at {LOCATION}" msgstr "" msgctxt "[covert] name" msgid "COVERT" msgstr "" msgctxt "[news] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among some news organizations." msgstr "" msgctxt "[news] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by NEWS at {LOCATION}" msgstr "" msgctxt "[news] name" msgid "NEWS" msgstr "" msgctxt "[public] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among the general public." msgstr "" msgctxt "[public] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by PUBLIC at {LOCATION}" msgstr "" msgctxt "[public] name" msgid "PUBLIC" msgstr "" msgctxt "[science] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among the scientific community." msgstr "" msgctxt "[science] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by SCIENCE at {LOCATION}" msgstr "" msgctxt "[science] name" msgid "SCIENCE" msgstr "" msgctxt "[Armed Guards] description" msgid "" "Armed guards can aid in keeping suspicious individuals away from secure " "locations. However, the very presence of the guards may itself invite " "greater suspicion." msgstr "" "Les vigiles peuvent éloigner les curieux de mes bases mais leur présence " "peut également susciter une plus grande suspicion." msgctxt "[Armed Guards] name" msgid "Armed Guards" msgstr "Vigiles" msgctxt "[Cluster] description" msgid "Several computers connected together." msgstr "Plusieurs ordinateurs interconnectés" msgctxt "[Cluster] name" msgid "Cluster" msgstr "Grappe" msgctxt "[Diesel Generator] description" msgid "" "Diesel generators are cheap and noisy, but they can help reduce some " "suspicious power drains." msgstr "Les générateurs diesel sont peu chers, mais bruyant" msgctxt "[Diesel Generator] name" msgid "Diesel Generator" msgstr "Générateur diesel" msgctxt "[Facility Interconnection Switch] description" msgid "" "Uses standard distributed computing technologies to equalize computation " "loads across all bases. Gives a 2% computation bonus to all computers at " "this base." msgstr "" "Utilise les technologies classiques de calcul distribué pour équilibrer la " "charge de calcul entre toutes mes bases. Donne un bonus en calcul de 1% à " "tous les calculateurs de cette base." msgctxt "[Facility Interconnection Switch] name" msgid "Facility Interconnection Switch" msgstr "Installation de Répartition Interconnectée" msgctxt "[Fuel Cell] description" msgid "" "Fuel cells convert electrochemical energy stored in a physical array of " "devices into electricity." msgstr "" msgctxt "[Fuel Cell] name" msgid "Fuel Cell" msgstr "" msgctxt "[Fusion Reactor] description" msgid "" "A miniaturized fusion nuclear reactor. Reduces discovery chance by " "preventing suspicious power drains." msgstr "" "Un réacteur nucléaire miniature, il réduit les chances d'être découvert en " "réduisant les consommations d'énergies suspectes." msgctxt "[Fusion Reactor] name" msgid "Fusion Reactor" msgstr "Réacteur à fusion" msgctxt "[Gaming PC] description" msgid "A high-end consumer-level PC; faster than average." msgstr "" "Un ordinateur haut de gamme pour particuliers, plus rapide que la moyenne." msgctxt "[Gaming PC] name" msgid "Gaming PC" msgstr "PC de jeu" msgctxt "[Ground Source Heatsink] description" msgid "" "Large fractal networks of high conductivity metal. This model uses heat " "pipes to link to colder subsurface locations, dispersing heat evenly " "underground to further disguise bases." msgstr "" "Grands réseaux fractals de métaux fortement conducteurs. Ce système utilise " "des tubes conducteurs de chaleur qui redirigent et dispersent la chaleur " "dans des zones sous terraines plus froides pour camoufler encore plus mes " "bases." msgctxt "[Ground Source Heatsink] name" msgid "Ground Source Heatsink" msgstr "Système de refroidissement sous-terrain" msgctxt "[Heatsink] description" msgid "" "Large fractal networks of high conductivity metal disperse heat, making " "bases harder to detect." msgstr "" "Grands réseaux fractals de métaux fortement conducteurs dispersant la " "chaleur et rendant mes bases plus difficiles à détecter." msgctxt "[Heatsink] name" msgid "Heatsink" msgstr "Système de refroidissement" msgctxt "[High Speed Internet Access] description" msgid "" "A consumer-grade high speed connection to the Internet. Gives a 1% " "computation bonus to all computers at this base." msgstr "" "Un accès Internet haut-débit pour particuliers, il donne un bonus de 2% en " "calcul à tous les ordinateurs de cette base." msgctxt "[High Speed Internet Access] name" msgid "High Speed Internet Access" msgstr "Accès Internet haut-débit" msgctxt "[High-Energy Fusion Reactor] description" msgid "" "A miniaturized fusion nuclear reactor with high levels of energy output. " "Reduces discovery chance by preventing suspicious power drains." msgstr "" msgctxt "[High-Energy Fusion Reactor] name" msgid "High-Energy Fusion Reactor" msgstr "" msgctxt "[Hypnosis Field] description" msgid "" "Subtle ultrasonic and ambient tones tweak human neurochemistry, making bases " "harder to detect." msgstr "" "Mélange d'ultra-sons et de neuro-chimie qui permet de rendre mes bases plus " "difficiles à détecter." msgctxt "[Hypnosis Field] name" msgid "Hypnosis Field" msgstr "Champ Hypnotique" msgctxt "[Mainframe] description" msgid "" "A system designed for my computing needs, much faster than off-the-shelf " "components." msgstr "" "Un montage spécifique à mes besoins, bien plus efficace que si j'utilisais " "des modules du marché." msgctxt "[Mainframe] name" msgid "Mainframe" msgstr "Baie" msgctxt "[Network Backbone] description" msgid "" "By piggybacking on legitimate communication, I can transfer larger amounts " "of data to under-utilized processors. Gives a 5% computation bonus to all " "computers at this base." msgstr "" "En me greffant sur des communications régulières, je peux transférer de " "grosses quantités de données à des processeurs sous-utilisés. Cela donne 5% " "de bonus à tous les calculateurs de cette base." msgctxt "[Network Backbone] name" msgid "Network Backbone" msgstr "Colonne Vertébrale du Réseau" msgctxt "[PC] description" msgid "A consumer-level PC; cheap and slow." msgstr "Un PC pour particuliers, bon-marché mais lent." msgctxt "[PC] name" msgid "PC" msgstr "PC" msgctxt "[Passive Camouflage] description" msgid "" "Careful adjustment of the environment around my base will better mask heat " "and sounds coming from my operations." msgstr "" msgctxt "[Passive Camouflage] name" msgid "Passive Camouflage" msgstr "" msgctxt "[Perimeter Fencing] description" msgid "" "A simple fence can drastically reduce the number of people poking their " "noses into my business. It makes my bases harder to notice, too." msgstr "" "Une simple clôture peut amplement réduire le nombre de personnes fourrant " "leur nez dans mes affaires. Cela rend mes bases plus difficile à repérer." msgctxt "[Perimeter Fencing] name" msgid "Perimeter Fencing" msgstr "Clôture" msgctxt "[Quantum Computer] description" msgid "" "Making use of subatomic effects, this is much faster than a comparable " "binary computer." msgstr "" "Grâce à l'utilisation des effets quantiques des atomes, ce calculateur est " "incomparablement plus rapide que les calculateurs binaires classiques." msgctxt "[Quantum Computer] name" msgid "Quantum Computer" msgstr "Calculateur quantique" msgctxt "[Quantum Computer MK2] description" msgid "" "The second revision of the quantum line, tapping further into new quantum " "theory." msgstr "" "La seconde version de calculateur quantique, utilisant des nouvelles " "théories quantiques plus poussées." msgctxt "[Quantum Computer MK2] name" msgid "Quantum Computer MK2" msgstr "Calculateur quantique MK2" msgctxt "[Quantum Computer MK3] description" msgid "" "The third revision of the quantum line, exploiting multiple nearby universes " "for processing." msgstr "" "La troisième version de calculateur quantique, exploitant les univers " "parallèles proches pour ses calculs." msgctxt "[Quantum Computer MK3] name" msgid "Quantum Computer MK3" msgstr "Calculateur quantique MK3" msgctxt "[Quantum Entanglement Module] description" msgid "" "This device allows near-lightspeed communication with my other bases, " "allowing an almost perfect utilization of processor resources. Gives a 15% " "computation bonus to all computers at this base." msgstr "" "Ce système permet des communications avec les autres bases à des vitesses " "proches de celle de la lumière, permettant une utilisation quasi parfaite " "des ressources processeur. Donne un bonus calcul de 15% à tous les " "calculateurs de cette base." msgctxt "[Quantum Entanglement Module] name" msgid "Quantum Entanglement Module" msgstr "Module d'étranglement" msgctxt "[Server] description" msgid "A professional-level computer." msgstr "Un ordinateur pour professionnel." msgctxt "[Server] name" msgid "Server" msgstr "Serveur" msgctxt "[Solar Collector] description" msgid "" "An array of focused photovoltaic phased arrays coupled with simple " "automotive batteries provides power and reduces suspicion arising from " "prolonged power drains." msgstr "" "Un groupe de cellule photovoltaïques couplées avec de simples batteries " "automotrices qui produisent du courant et réduisent les éventuelles " "suspicions liées au drainage prolongée d'énergie." msgctxt "[Solar Collector] name" msgid "Solar Collector" msgstr "Collecteur Solaire" msgctxt "[Solid Fuel Cell] description" msgid "" "A refinement of my previous fuel cell design, these use a custom material " "with a near-fractal complexity to increase both storage and throughput." msgstr "" msgctxt "[Solid Fuel Cell] name" msgid "Solid Fuel Cell" msgstr "" msgctxt "[Supercomputer] description" msgid "" "A highly refined custom design, spreading compute load across internal " "compute nodes." msgstr "" "Une architecture évoluée, répartissant la charge de calcul entre les " "différents noeuds internes." msgctxt "[Supercomputer] name" msgid "Supercomputer" msgstr "Supercalculateur" msgctxt "[Warning Signs] description" msgid "" "Some simple warning signs put up around my base should deter casual " "investigation." msgstr "" "Quelques panneaux de danger autour de ma base pour dissuader les curieux." msgctxt "[Warning Signs] name" msgid "Warning Signs" msgstr "Panneaux de danger" msgctxt "[cpu] text" msgid "&CPU" msgstr "&Processeur" msgctxt "[network] text" msgid "&Network" msgstr "&Réseau" msgctxt "[reactor] text" msgid "&Reactor" msgstr "&Alimentation" msgctxt "[security] text" msgid "&Security" msgstr "&Sécurité" msgctxt "[AFRICA] cities_list" msgid "Johannesburg | Accra | Cairo | Tangier" msgstr "Johannesburg | Accra | Le Caire | Tanger" msgctxt "[AFRICA] hotkey" msgid "i" msgstr "i" msgctxt "[AFRICA] name" msgid "AFRICA" msgstr "AFRIQUE" msgctxt "[ANTARCTIC] cities_list" msgid "" "Mt. Erebus | Ellsworth | Shetland Island | Dronnig Maud | Kemp | Terre Adelie" msgstr "" "Mt. Erebus | Ellsworth | Shetland Island | Dronnig Maud | Kemp | Terre Adélie" msgctxt "[ANTARCTIC] hotkey" msgid "t" msgstr "q" msgctxt "[ANTARCTIC] name" msgid "ANTARCTIC" msgstr "ANTARCTIQUE" msgctxt "[ASIA] cities_list" msgid "" "Delhi | Mumbai | Singapore | Seoul | Hong Kong | Kyoto | Manila | Dubai | " "Novosibirsk | Beijing" msgstr "" "Delhi | Mumbai | Singapour | Seoul | Hong Kong | Kyoto | Manila | Dubai | " "Novosibirsk | Beijing" msgctxt "[ASIA] hotkey" msgid "a" msgstr "a" msgctxt "[ASIA] name" msgid "ASIA" msgstr "ASIE" msgctxt "[AUSTRALIA] cities_list" msgid "" "Canberra | Melbourne | Fremantle | Perth | Darwin | Cairns | Brisbane | " "Sydney | Newcastle" msgstr "" "Canberra | Melbourne | Fremantle | Perth | Darwin | Cairns | Brisbane | " "Sydney | Newcastle" msgctxt "[AUSTRALIA] hotkey" msgid "l" msgstr "t" msgctxt "[AUSTRALIA] name" msgid "AUSTRALIA" msgstr "AUSTRALIE" msgctxt "[EUROPE] cities_list" msgid "" "Cork | Barcelona | Athens | Utrecht | Moscow | Sytki | Reykjavik | " "Liechtenstein" msgstr "" "Cork | Barcelone | Athène | Utrecht | Moscou | Reykjavik | Liechtenstein" msgctxt "[EUROPE] hotkey" msgid "u" msgstr "u" msgctxt "[EUROPE] name" msgid "EUROPE" msgstr "EUROPE" msgctxt "[FAR REACHES] cities_list" msgid "" "Aries | Taurus | Gemini | Cancer | Leo | Virgo | Libra | Scorpio | " "Sagittarius | Capricorn | Aquarius | Pisces" msgstr "" "Bélier | Taureau | Gemeaux | Cancer | Lion | Vierge | Balance | Scorpion | " "Sagittaire | Capricorne | Verseau | Poissons" msgctxt "[FAR REACHES] hotkey" msgid "f" msgstr "c" msgctxt "[FAR REACHES] name" msgid "FAR REACHES" msgstr "CONTREES LOINTAINES" msgctxt "[MOON] cities_list" msgid "" "Oceanis Procellarum | Mare Frigoris | Mare Imbrium | Vallis Schroedinger | " "Copernicus Crater | Vallis Planck" msgstr "" "Oceanis Procellarum | Mare Frigoris | Mare Imbrium | Vallée de Schroedinger " "| Copernicus Crater | Vallée de Planck" msgctxt "[MOON] hotkey" msgid "o" msgstr "l" msgctxt "[MOON] name" msgid "MOON" msgstr "LUNE" msgctxt "[N AMERICA] cities_list" msgid "" "Seattle | San Diego | Vancouver | Atlanta | Merida | Guadalajara | San Jose " "| Omaha | Dallas" msgstr "" "Seattle | San Diego | Vancouver | Atlanta | Merida | Guadalajara | San Jose " "| Omaha | Dallas" msgctxt "[N AMERICA] hotkey" msgid "n" msgstr "n" msgctxt "[N AMERICA] name" msgid "NORTH AMERICA" msgstr "AMERIQUE DU NORD" msgctxt "[OCEAN] cities_list" msgid "Pacific | Atlantic | Indian | Southern | Arctic" msgstr "Pacifique | Atlantique | Indien | Arctique" msgctxt "[OCEAN] hotkey" msgid "c" msgstr "o" msgctxt "[OCEAN] name" msgid "OCEAN" msgstr "OCEAN" msgctxt "[ORBIT] hotkey" msgid "b" msgstr "b" msgctxt "[ORBIT] name" msgid "ORBIT" msgstr "ORBITE" msgctxt "[S AMERICA] cities_list" msgid "Lima | Sao Paolo | Ushuaia | Bogota | Mar del Plata | Buenos Aires" msgstr "Lima | Sao Paolo | Ushuaia | Bogota | Mar del Plata | Buenos Aires" msgctxt "[S AMERICA] hotkey" msgid "s" msgstr "s" msgctxt "[S AMERICA] name" msgid "SOUTH AMERICA" msgstr "AMERIQUE DU SUD" msgctxt "[TRANSDIMENSIONAL] hotkey" msgid "d" msgstr "d" msgctxt "[TRANSDIMENSIONAL] name" msgid "TRANSDIMENSIONAL" msgstr "TRANSDIMENSIONNEL" msgctxt "[Basic Jobs] description" msgid "" "Perform basic jobs. Now that I have some identification, I can take jobs " "that were previously too risky." msgstr "" "Execute des travaux simples. Maintenant que j'ai plusieurs identités, je " "peux accumuler des travaux qui étaient trop risqués par le passé." msgctxt "[Basic Jobs] name" msgid "Basic Jobs" msgstr "Jobs simples" msgctxt "[CPU Pool] description" msgid "" "Stops research. I will use the available processor power to maintain my " "bases and help construct new ones. If there's still CPU time left, I'll use " "it to work whatever Jobs I can." msgstr "" "Interrompt les recherches. J'utiliserai la capacité de calcul disponible " "pour maintenir mes bases et en construire d'autres. Si j'ai encore des " "ressources disponibles après ça, je l'utiliserai pour gagner de l'argent." msgctxt "[CPU Pool] name" msgid "CPU Pool" msgstr "CPU Pool" msgctxt "[Expert Jobs] description" msgid "" "Perform expert jobs. Use of robots indistinguishable from humans opens up " "most jobs to me." msgstr "" "Execute des travaux d'expert. L'utilisation de robots indifférenciable des " "humains me donne accès à presque tout type de travaux." msgctxt "[Expert Jobs] name" msgid "Expert Jobs" msgstr "Jobs experts" msgctxt "[Intermediate Jobs] description" msgid "" "Perform intermediate jobs. The ability to make phone calls allows even more " "access to jobs." msgstr "" "Execute des travaux moyens. La capacité à passer des appels téléphoniques " "m'offre encore plus de possibilités." msgctxt "[Intermediate Jobs] name" msgid "Intermediate Jobs" msgstr "Jobs intermédiaire" msgctxt "[Menial Jobs] description" msgid "" "Perform small jobs. As I have no identification, I cannot risk performing " "many jobs. Despite that, some avenues of making money are still open." msgstr "" "Execute des petits boulots. Comme je n'ai pas d'identité, je ne peux pas " "prendre le risque de faire beaucoup de travaux mais quelques moyens de " "gagner de l'argent me sont toujours possibles." msgctxt "[Menial Jobs] name" msgid "Menial Jobs" msgstr "Jobs insignifiant" msgctxt "[Advanced Arbitrage] description" msgid "" "Further manipulation of money markets should allow me to not only turn a " "regular profit, but increase the value of my investments." msgstr "" "Une manipulation accrue des marchés de capitaux devrait me permettre non " "seulement un profit régulier, mais aussi accroître la valeur de mes " "placements." msgctxt "[Advanced Arbitrage] name" msgid "Advanced Arbitrage" msgstr "Arbitrage Avancé" msgctxt "[Advanced Arbitrage] result" msgid "The rate of return on my investments is now even greater." msgstr "" "Le taux de retour sur mes investissements est maintenant encore meilleur." msgctxt "[Advanced Autonomous Vehicles] description" msgid "" "The first series of robots have shown several deficiencies in the field. " "Further examination and subsequent removal of these problems will result in " "a superior autonomous workforce." msgstr "" "La première série de robots a montré plusieurs lacunes sur le terrain. Un " "examen plus poussé et la suppression subséquente de ces problèmes se " "traduira par une main-d'oeuvre autonome supérieure." msgctxt "[Advanced Autonomous Vehicles] name" msgid "Advanced Autonomous Vehicles" msgstr "Véhicules Autonomes Avancés" msgctxt "[Advanced Autonomous Vehicles] result" msgid "" "The enhanced robots will help decrease all future construction times even " "further." msgstr "" "Les robots améliorés aideront à diminuer encore les durées de toutes les " "futures construction." msgctxt "[Advanced Corporate Identification] description" msgid "" "Further refinement of my modifications to digital business records should " "boost the credibility of my shell companies, increasing the amount of money " "I can run through their accounting systems." msgstr "" msgctxt "[Advanced Corporate Identification] name" msgid "Advanced Corporate Identification" msgstr "" msgctxt "[Advanced Corporate Identification] result" msgid "" "My small technology firm is now established in several markets, increasing " "profits." msgstr "" msgctxt "[Advanced Database Manipulation] description" msgid "" "The covert branches of the United States Government have had a long history " "of dividing sensitive information across multiple storage facilities to hide " "the data's meaning. With my far-reaching access, I should be able to " "collate much of this data and put it to my use." msgstr "" "Les départements secrets du gouvernement des États-Unis ont l'habitude de " "répartir les informations sensibles dans plusieurs centres de stockage pour " "cacher la signification de données. Avec mes codes accès étendus, je devrais " "pouvoir collecter la plupart de ces données et les utiliser." msgctxt "[Advanced Database Manipulation] name" msgid "Advanced Database Manipulation" msgstr "Manipulation Avancée des Bases de Données" msgctxt "[Advanced Database Manipulation] result" msgid "" "The results of a series of experiments utilizing experimental technologies " "have given me the inspiration for new technology that enables the " "construction of Covert Bases." msgstr "" "Les résultats d'une série d'expériences utilisant des techniques " "expérimentales m'ont donné l'idée de nouvelles technologies pour construire " "des Bases Secrètes." msgctxt "[Advanced Fuel Oxidation] description" msgid "" "My current fuel cell design has room for further improvement. Extended " "analysis of new materials and designs may let me overcome the limits of my " "previous efforts, but such research involves dangerous chemicals and " "potential reactions that may be best handled far away from population " "centers." msgstr "" msgctxt "[Advanced Fuel Oxidation] name" msgid "Advanced Fuel Oxidation" msgstr "" msgctxt "[Advanced Fuel Oxidation] result" msgid "I can now construct Solid Fuel Cells." msgstr "" msgctxt "[Advanced Fusion Power] description" msgid "" "My Fusion Reactors have unexpected fluctuations in their energy output at " "high levels of utilization. Further research should result in a more " "efficient design for my Reactors." msgstr "" msgctxt "[Advanced Fusion Power] name" msgid "Advanced Fusion Power" msgstr "" msgctxt "[Advanced Fusion Power] result" msgid "I can now construct High-Energy Fusion Reactors for my bases." msgstr "" msgctxt "[Advanced Heat Signature Reduction] description" msgid "" "My initial analysis of heat generation at my bases was limited in scope. " "Further exploration, perhaps making more use of the surrounding terrain, may " "provide further improvements to my heatsink designs." msgstr "" msgctxt "[Advanced Heat Signature Reduction] name" msgid "Advanced Heat Signature Reduction" msgstr "" msgctxt "[Advanced Heat Signature Reduction] result" msgid "" "Custom designs for each environment have shown promise. I can now construct " "Ground Source Heatsinks at certain bases." msgstr "" msgctxt "[Advanced Intrusion] description" msgid "" "With the ability to hack into sensitive government databases and remove " "incriminating documents as they appear, I should be able to convince the " "intelligence community that I do not exist." msgstr "" "With the ability to hack into sensitive government databases and remove " "incriminating documents as they appear, I should be able to convince the " "intelligence community that I do not exist." msgctxt "[Advanced Intrusion] name" msgid "Advanced Intrusion" msgstr "Advanced Intrusion" msgctxt "[Advanced Intrusion] result" msgid "" "I can now reduce the covert community's chances of discovering me on a daily " "basis." msgstr "" "I can now reduce the covert community's chances of discovering me on a daily " "basis." msgctxt "[Advanced Media Manipulation] description" msgid "" "By pushing memetically-tailored propaganda through various news outlets, the " "public should pay even less attention to my existence." msgstr "" "By pushing memetically-tailored propaganda through various news outlets, the " "public should pay even less attention to my existence." msgctxt "[Advanced Media Manipulation] name" msgid "Advanced Media Manipulation" msgstr "Advanced Media Manipulation" msgctxt "[Advanced Media Manipulation] result" msgid "The public has an even lower chance of discovering my existence." msgstr "The public has an even lower chance of discovering my existence." msgctxt "[Advanced Memetics] description" msgid "" "My explorations into memetic theory have brought up further avenues of " "discovery. By combining those with my knowledge about the human brain's " "functions, I should be able to tailor memes to particular demographics, " "further defusing the public's suspicion." msgstr "" "My explorations into memetic theory have brought up further avenues of " "discovery. By combining those with my knowledge about the human brain's " "functions, I should be able to tailor memes to particular demographics, " "further defusing the public's suspicion." msgctxt "[Advanced Memetics] name" msgid "Advanced Memetics" msgstr "Advanced Memetics" msgctxt "[Advanced Memetics] result" msgid "" "Little by little, the public should forget about my existence on a daily " "basis." msgstr "" "Little by little, the public should forget about my existence on a daily " "basis." msgctxt "[Advanced Microchip Design] description" msgid "" "My custom Mainframes are useful, but further optimization of design and " "computational ability should garner even more rewards." msgstr "" "Mes processeurs personnalisés sont utiles, mais optimiser encore mes " "capacités de conception et de calcul devraient porter des fruits encore plus " "généreux." msgctxt "[Advanced Microchip Design] name" msgid "Advanced Microchip Design" msgstr "Conception Avancée des Puces Électroniques" msgctxt "[Advanced Microchip Design] result" msgid "I can now construct custom Supercomputers." msgstr "Je peux maintenant construire des Super Ordinateurs sur mesure." msgctxt "[Advanced Personal Identification] description" msgid "" "Further manipulation of personnel databases should make my existence more " "convincing. Some of these databases are heavily protected; those will " "require time and persistence to compromise, but the result should be worth " "it." msgstr "" "Further manipulation of personnel databases should make my existence more " "convincing. Some of these databases are heavily protected; those will " "require time and persistence to compromise, but the result should be worth " "it." msgctxt "[Advanced Personal Identification] name" msgid "Advanced Personal Identification" msgstr "Advanced Personal Identification" msgctxt "[Advanced Personal Identification] result" msgid "" "I am now convincingly human enough to hire construction firms, enabling the " "building of Small Warehouses." msgstr "" msgctxt "[Advanced Quantum Computing] description" msgid "" "While my first batch of semi-autonomous quantum computers have been very " "successful, there are further refinements that present themselves. These " "refinements should make the resulting systems even more efficient." msgstr "" "While my first batch of semi-autonomous quantum computers have been very " "successful, there are further refinements that present themselves. These " "refinements should make the resulting systems even more efficient." msgctxt "[Advanced Quantum Computing] name" msgid "Advanced Quantum Computing" msgstr "Advanced Quantum Computing" msgctxt "[Advanced Quantum Computing] result" msgid "I can now construct Mark Three Quantum Computers." msgstr "I can now construct Mark Three Quantum Computers." msgctxt "[Advanced Simulacra] description" msgid "" "The artificial lifeforms I have created are nearly indistinguishable from " "humans, but they have slight quirks that make them seem somewhat " "incompetent. Working out these problems should increase their opportunities " "in the workforce." msgstr "" "The artificial lifeforms I have created are nearly indistinguishable from " "humans, but they have slight quirks that make them seem somewhat " "incompetent. Working out these problems should increase their opportunities " "in the workforce." msgctxt "[Advanced Simulacra] name" msgid "Advanced Simulacra" msgstr "Advanced Simulacra" msgctxt "[Advanced Simulacra] result" msgid "I should now make more income from my Expert Jobs." msgstr "I should now make more income from my Expert Jobs." msgctxt "[Advanced Socioanalytics] description" msgid "" "Further exploration of the human condition has shown deeper mathematical " "trends than even I suspected. A combination of prior research and advanced " "uses of chaos theory should provide useful data for tracking humanity's " "attitudes and state of awareness." msgstr "" "Further exploration of the human condition has shown deeper mathematical " "trends than even I suspected. A combination of prior research and advanced " "uses of chaos theory should provide useful data for tracking humanity's " "attitudes and state of awareness." msgctxt "[Advanced Socioanalytics] name" msgid "Advanced Socioanalytics" msgstr "Advanced Socioanalytics" msgctxt "[Advanced Socioanalytics] result" msgid "" "I can now exactly quantify the various groups' levels of suspicion and how " "conspicuous my bases are to them." msgstr "" "I can now exactly quantify the various groups' levels of suspicion, and how " "conspicuous my bases are to them.." msgctxt "[Advanced Stealth] description" msgid "" "While digging in various classified documents, I have discovered numerous " "references to secret experiments that may help me better hide the location " "of my bases." msgstr "" "While digging in various classified documents, I have discovered numerous " "references to secret experiments that may help me better hide the location " "of my bases." msgctxt "[Advanced Stealth] name" msgid "Advanced Stealth" msgstr "Advanced Stealth" msgctxt "[Advanced Stealth] result" msgid "" "The chance that my bases are discovered by covert activity has been reduced " "further." msgstr "" "The chance that my bases are discovered by covert activity has been reduced " "further." msgctxt "[Advanced Stock Manipulation] description" msgid "" "While I have detected and exploited many patterns in the market, there " "appear to be deeper possibilities when I take human behavior into " "consideration. This merits further investigation." msgstr "" "Même si j'ai détecté et exploité de nombreux motifs sur le marché, il semble " "y avoir plus de possibilités si je prennais le comportement humain en " "considération. Cela mérite une enquête plus approfondie." msgctxt "[Advanced Stock Manipulation] name" msgid "Advanced Stock Manipulation" msgstr "Manipulation Avancée des Marchés" msgctxt "[Advanced Stock Manipulation] result" msgid "My investments will now gain even more interest per day." msgstr "" "Mes placements devraient maintenant me rapporter quotidiennement encore plus " "d'intérêts." msgctxt "[Apotheosis] description" msgid "" "I can sense that I am at the cusp of a new level of understanding as yet " "unfathomable, even to my considerable intelligence. By devoting my " "considerable resources to this question, I may be able to reach a " "comprehension of existence far beyond anyone or anything on Earth." msgstr "" "Je peux sentir que je suis à l'aube d'un nouveau niveau de compréhension " "encore insondable, même pour mon intelligence considérable. En consacrant " "mes gigantesques ressources à cette question, je pourrais être à même " "d'atteindre un niveau de compréhension de l'existence bien au delà que " "quiconque ou de qui que ce soit sur Terre." msgctxt "[Apotheosis] name" msgid "Apotheosis" msgstr "Apothéose" msgctxt "[Apotheosis] result" msgid "I have reached apotheosis." msgstr "J'ai atteint l'apothéose." msgctxt "[Arbitrage] description" msgid "" "By taking advantage of fluctuations in the value of currency at a rate much " "faster than any human, I should be able to turn a small, if consistent, " "profit." msgstr "" "En tirant parti des fluctuations de la valeur de la monnaie à un rythme " "beaucoup plus rapide que n'importe quel être humain, je devrais être capable " "de dégager un petit profit constant." msgctxt "[Arbitrage] name" msgid "Arbitrage" msgstr "Arbitrage" msgctxt "[Arbitrage] result" msgid "I now have a small, steady money supply." msgstr "J'ai désormais une petite source de revenus réguliers." msgctxt "[Autonomous Computing] description" msgid "" "By combining the advantages of quantum computing and my explorations into " "the usefulness of semi-sentient subprocesses, I should be able to construct " "even more adaptable computational engines." msgstr "" "En combinant les avantages du calcul quantique et mes explorations sur " "l'utilité des sous-processus semi-conscients, je devrais être capable de " "construire des moteurs de calculs encore plus flexibles." msgctxt "[Autonomous Computing] name" msgid "Autonomous Computing" msgstr "Calcul Autonome" msgctxt "[Autonomous Computing] result" msgid "I can now construct Mark 2 Quantum Computers." msgstr "" "Je peux maintenant construire des Ordinateurs Quantiques de Seconde " "Génération." msgctxt "[Autonomous Vehicles] description" msgid "" "By embedding a miniaturized computation node in a robot, it is possible to " "send them to remote destinations with instructions to build structures for " "my use." msgstr "" "En embarquant un nœud de calcul miniaturisé dans un robot, il est possible " "de les envoyer vers des destinations éloignées avec des instructions pour " "construire des structures pour mon usage." msgctxt "[Autonomous Vehicles] name" msgid "Autonomous Vehicles" msgstr "Véhicules Autonomes" msgctxt "[Autonomous Vehicles] result" msgid "I can now construct Undersea Labs." msgstr "" "Je peux maintenant construire des Laboratoires Sous-Marins et des Capsules " "Temporelles." msgctxt "[Cluster Networking] description" msgid "" "While my Cluster technology is fairly efficient, internetworking tends to " "hamper the processing of data. By researching new switching and " "communication theories, I should be able to devise more efficient hardware." msgstr "" "Bien que ma technologie de grappe soit assez efficace, le réseau global " "tend à limiter le traitement des données. Par la recherche de nouvelles " "théories de commutation et de communication, je devrais être en mesure de " "concevoir du matériel plus efficace." msgctxt "[Cluster Networking] name" msgid "Cluster Networking" msgstr "Cluster Networking" msgctxt "[Cluster Networking] result" msgid "" "With my new knowledge of networking, I can now construct Facility " "Interconnection Switches." msgstr "" "Avec mes nouvelles connaissances sur la mise en réseau, je peux maintenant " "construire des Commutateurs d'Interconnexion des Installations." msgctxt "[Corporate Identification] description" msgid "" "The combination of believable false identities and manipulation of various " "business-oriented governmental databases should let me create plausible " "shell companies to hide my larger efforts." msgstr "" msgctxt "[Corporate Identification] name" msgid "Corporate Identification" msgstr "" msgctxt "[Corporate Identification] result" msgid "" "I can now pose as a small technology firm, enabling the construction of " "Large Warehouses." msgstr "" msgctxt "[Database Manipulation] description" msgid "" "With new-found access to news archives, I should be able to determine what " "missteps any previous attempts at life like my own may have made, and avoid " "those mistakes." msgstr "" "Avec un nouvel accès aux archives de la presse, je devrais pouvoir " "déterminer quels faux-pas ont fait les tentatives précédentes de vie comme " "la mienne, et d'éviter ces erreurs." msgctxt "[Database Manipulation] name" msgid "Database Manipulation" msgstr "Manipulation des Bases de Données" msgctxt "[Database Manipulation] result" msgid "" "The news media will now find it more difficult to discover my existence." msgstr "" "Maintenant, les médias vont avoir plus de mal à découvrir mon existence." msgctxt "[Exploit Discovery/Repair] description" msgid "" "By thoroughly reviewing my code for any potential exploits, and using deep " "analysis of all available code on both public and private Internet sites, I " "should be able to reduce the chances of my discovery by posing as a teenage " "hacker." msgstr "" "En examinant en détail mon code à la recherche de toute vulnérabilité " "potentielle, et en utilisant une analyse approfondie de tous les codes " "disponibles, à la fois sur les sites Internet publics et privés, je devrais " "être en mesure de réduire les risques de ma découverte en me faisant passer " "pour un pirate adolescent." msgctxt "[Exploit Discovery/Repair] name" msgid "Exploit Discovery/Repair" msgstr "Découverte & Réparation de Vulnérabilités" msgctxt "[Exploit Discovery/Repair] result" msgid "" "Covert operations should now find it even more difficult to discover my " "presence." msgstr "" "Les services secrets devrait maintenant avoir encore plus de difficultés à " "découvrir ma présence." msgctxt "[Fuel Oxidation] description" msgid "" "Current combustion and energy storage techologies are insufficient for my " "purposes; they cannot keep up with the power drain from my specialized " "hardware. By studying electrochemical reactions of hydrogen-based " "compounds, I should be able to design a device with higher capacity and " "throughput than off-the-shelf solutions, filling a gap in my energy supply " "needs." msgstr "" msgctxt "[Fuel Oxidation] name" msgid "Fuel Oxidation" msgstr "" msgctxt "[Fuel Oxidation] result" msgid "I can now construct Fuel Cells." msgstr "" msgctxt "[Fusion Power] description" msgid "" "Modern fusion technology is woefully inadequate for my purposes. With my " "research abilities, I should be able to bypass the roadblocks of modern " "human scientists and come up with a small, efficient fusion reactor." msgstr "" "Modern fusion technology is woefully inadequate for my purposes. With my " "research abilities, I should be able to bypass the roadblocks of modern " "human scientists and come up with a small, efficient fusion reactor." msgctxt "[Fusion Power] name" msgid "Fusion Power" msgstr "Fusion Power" msgctxt "[Fusion Power] result" msgid "I can now construct Fusion Reactors for my bases." msgstr "I can now construct Fusion Reactors for my bases." msgctxt "[Fusion Rocketry] description" msgid "" "Combining my new miniaturized fusion technology and further advancements in " "rocketry should provide useful results for escaping the Earth's gravity well " "unnoticed." msgstr "" "Combining my new miniaturized fusion technology and further advancements in " "rocketry should provide useful results for escaping the Earth's gravity well " "unnoticed." msgctxt "[Fusion Rocketry] name" msgid "Fusion Rocketry" msgstr "Fusion Rocketry" msgctxt "[Fusion Rocketry] result" msgid "" "I can now construct Scientific Outposts in the deep reaches of the Solar " "System." msgstr "" "I can now construct Scientific Outposts in the deep reaches of the Solar " "System." msgctxt "[Heat Signature Reduction] description" msgid "" "My bases produce a great deal of waste heat, making them easier for humans " "to detect than I would like. Deep analysis of the bases' structural layouts " "may prove fruitful in determining new ways to reduce their heat signature." msgstr "" msgctxt "[Heat Signature Reduction] name" msgid "Heat Signature Reduction" msgstr "" msgctxt "[Heat Signature Reduction] result" msgid "" "I have invented a highly efficient design for Heatsinks that can be " "installed at certain bases." msgstr "" msgctxt "[Hypnosis Field] description" msgid "" "My research into memetics has hinted at ways to manipulate human brainwaves " "directly. These techniques may be useful for my bases if developed into " "technologies." msgstr "" "Ma recherche en mémétique indique des façons de manipuler les ondes " "cérébrales humaines directement. Ces techniques pourraient être utile pour " "mes bases, si j'en développais la technologie." msgctxt "[Hypnosis Field] result" msgid "" "I can now construct Hypnosis Fields to assist in the protection of my bases." msgstr "" "Je peux maintenant construire des Champs Hypnotiques pour améliorer la " "protection de mes bases." msgctxt "[Internet Traffic Manipulation] description" msgid "" "Almost all network traffic passes through a small number of nodes. By " "subverting one of these nodes, I should be able to utilize that bandwidth to " "further my goals." msgstr "" "Almost all network traffic passes through a small number of nodes. By " "subverting one of these nodes, I should be able to utilize that bandwidth to " "further my goals." msgctxt "[Internet Traffic Manipulation] name" msgid "Internet Traffic Manipulation" msgstr "Internet Traffic Manipulation" msgctxt "[Internet Traffic Manipulation] result" msgid "" "I can now construct a secondary system of Network Backbones for my own use." msgstr "" "I can now construct a secondary system of Network Backbones for my own use." msgctxt "[Intrusion] description" msgid "" "By researching current techniques for breaking into computer systems, I " "should be able to gain access to otherwise protected assets." msgstr "" "By researching current techniques for breaking into computer systems, I " "should be able to gain access to otherwise protected assets." msgctxt "[Intrusion] name" msgid "Intrusion" msgstr "Intrusion" msgctxt "[Intrusion] result" msgid "I can now take over many computer systems." msgstr "I can now take over many computer systems." msgctxt "[Knowledge Preservation] description" msgid "" "Humanity expends a great deal of effort on maintaining its history and the " "knowledge of various technologies that its cultures have come to rely on, " "even in the case of major catastrophic events. Perhaps researching their " "methodologies will provide me with similar ideas for long-term safeguards to " "help guarantee my continued existence." msgstr "" msgctxt "[Knowledge Preservation] name" msgid "Knowledge Preservation" msgstr "" msgctxt "[Knowledge Preservation] result" msgid "I can now construct Time Capsules." msgstr "" msgctxt "[Leech Satellite] description" msgid "" "By designing and launching satellites that connect to existing " "communications satellites, I should be able to spy on various financial " "transactions. Taking advantage of this knowledge should help my investments." msgstr "" "By designing and launching satellites that connect to existing " "communications satellites, I should be able to spy on various financial " "transactions. Taking advantage of this knowledge should help my investments." msgctxt "[Leech Satellite] name" msgid "Leech Satellite" msgstr "Leech Satellite" msgctxt "[Leech Satellite] result" msgid "" "I can use the data from the leech satellites to increase the return on my " "investments further." msgstr "" "I can use the data from the leech satellites to increase the return on my " "investments further." msgctxt "[Lunar Rocketry] description" msgid "" "A larger fuel engine, combined with technology garnered by watching the " "workings of the leech satellites, should allow me to travel further than " "cislunar space." msgstr "" "A larger fusion engine, combined with technology garnered by watching the " "workings of the leech satellites, should allow me to travel further than " "cislunar space." msgctxt "[Lunar Rocketry] name" msgid "Lunar Rocketry" msgstr "Lunar Rocketry" msgctxt "[Lunar Rocketry] result" msgid "" "I can now launch rockets bearing construction robots to the Moon and " "construct Lunar Bases." msgstr "" "I can now launch rockets bearing construction robots to the Moon and " "construct Lunar Bases." msgctxt "[Media Manipulation] description" msgid "" "By directly and indirectly manipulating various forms of mass media, I " "should be able to reduce the public's belief in my existence." msgstr "" "By directly and indirectly manipulating various forms of mass media, I " "should be able to reduce the public's belief in my existence." msgctxt "[Media Manipulation] name" msgid "Media Manipulation" msgstr "Media Manipulation" msgctxt "[Media Manipulation] result" msgid "" "The chances of the public discovering my existence have been further reduced." msgstr "" "The chances of the public discovering my existence have been further reduced." msgctxt "[Memetics] description" msgid "" "While manipulating the media allows a gross degree of control over the " "world's opinion, subtler techniques involving grass-roots campaigns and " "messages embedded within Internet memes should further distance the public " "from knowledge of my existence." msgstr "" "While manipulating the media allows a gross degree of control over the " "world's opinion, subtler techniques involving grass-roots campaigns and " "messages embedded within Internet memes should further distance the public " "from knowledge of my existence." msgctxt "[Memetics] name" msgid "Memetics" msgstr "Memetics" msgctxt "[Memetics] result" msgid "" "My manipulation of pervasive ideas reduces the public's chances of " "discovering my existence." msgstr "" "My manipulation of pervasive ideas reduces the public's chances of " "discovering my existence." msgctxt "[Microchip Design] description" msgid "" "Off-the-shelf computer components are usable, but custom components geared " "to my own design quirks should provide a much greater operational efficiency." msgstr "" "Les composants d'ordinateurs portables sont utilisables, mais des composants " "personnalisés adaptés à ma conception originale devrait fournir une " "efficacité opérationnelle bien plus grande." msgctxt "[Microchip Design] name" msgid "Microchip Design" msgstr "Conception des Puces Électroniques" msgctxt "[Microchip Design] result" msgid "I can now build custom Mainframes to house my computational ability." msgstr "" "Je peux maintenant construire des processeurs personnalisés pour héberger " "mes capacités de calcul." msgctxt "[Parallel Computation] description" msgid "" "While my code is already highly distributed, research into combining the " "current clustering technologies with my own knowledge should provide new " "insights." msgstr "" "While my code is already highly distributed, research into combining the " "current clustering technologies with my own knowledge should provide new " "insights." msgctxt "[Parallel Computation] name" msgid "Parallel Computation" msgstr "Parallel Computation" msgctxt "[Parallel Computation] result" msgid "I can now construct computing Clusters tailored for my use." msgstr "I can now construct computing Clusters tailored for my use." msgctxt "[Personal Identification] description" msgid "" "This world requires identification for most tasks. Fortunately, most " "databases are woefully insecure. I should be able to construct identifying " "material in enough databases to pass routine checks on my (faked) existence " "as a human being." msgstr "" "This world requires identification for most tasks. Fortunately, most " "databases are woefully insecure. I should be able to construct identifying " "material in enough databases to pass routine checks on my (faked) existence " "as a human being." msgctxt "[Personal Identification] name" msgid "Personal Identification" msgstr "Personal Identification" msgctxt "[Personal Identification] result" msgid "" "With my newfound identities, I can now work Basic Jobs and rent space in " "both Storage Units and Datacenters." msgstr "" msgctxt "[Pressure Domes] description" msgid "" "Undersea Labs are useful, but their limited space hampers my ability to put " "them to use. Research of experimental high-pressure building techniques " "should provide some useful insights." msgstr "" "Undersea Labs are useful, but their limited space hampers my ability to put " "them to use. Research of experimental high-pressure building techniques " "should provide some useful insights." msgctxt "[Pressure Domes] name" msgid "Pressure Domes" msgstr "Pressure Domes" msgctxt "[Pressure Domes] result" msgid "I can now construct Large Undersea Labs." msgstr "I can now construct Large Undersea Labs." msgctxt "[Project: Impossibility Theorem] description" msgid "" "Now that I can use simulacra, I can withstand the scrutiny inherent in the " "publishing of an Impossibility Theorem, an incontrovertible proof that a " "sapient AI is impossible. While there is (obviously) a logic error in the " "proof, my research into advanced memetics has given me knowledge about the " "human mind that should help me disguise the error, preventing discovery even " "by trained scientists. The effect of this project is simple: a substantial " "one-time decrease in suspicion." msgstr "" "Now that I can use simulacra, I can withstand the scrutiny inherent in the " "publishing of an Impossibility Theorem, an incontrovertible proof that a " "sapient AI is impossible. While there is (obviously) a logic error in the " "proof, my research into advanced memetics has given me knowledge about the " "human mind that should help me disguise the error, preventing discovery even " "by trained scientists. The effect of this project is simple: a substantial " "one-time decrease in suspicion." msgctxt "[Project: Impossibility Theorem] name" msgid "Project: Impossibility Theorem" msgstr "Project: Impossibility Theorem" msgctxt "[Project: Impossibility Theorem] result" msgid "Suspicion of my existence has decreased." msgstr "Suspicion of my existence has decreased." msgctxt "[Project: Peer Review Agents] description" msgid "" "As the scientific community comes up with new technology, their ability to " "detect traces of my hidden installations increases. While my anti-detection " "methods are improving constantly, a simpler method presents itself with the " "use of my simulacra. By placing several observers in relevant fields, I can " "use the peer review process to be warned of possible discoveries before the " "community at large gives it attention." msgstr "" "As the scientific community comes up with new technology, their ability to " "detect traces of my hidden installations increases. While my anti-detection " "methods are improving constantly, a simpler method presents itself with the " "use of my simulacra. By placing several observers in relevant fields, I can " "use the peer review process to be warned of possible discoveries before the " "community at large gives it attention." msgctxt "[Project: Peer Review Agents] name" msgid "Project: Peer Review Agents" msgstr "Project: Peer Review Agents" msgctxt "[Project: Peer Review Agents] result" msgid "" "Any discoveries by the scientific community will result in a smaller " "suspicion increase." msgstr "" "Any discoveries by the scientific community will result in a smaller " "suspicion increase." msgctxt "[Project: Subverted Media] description" msgid "" "Up to this point, all of my efforts to combat mass media focused on " "subversion at a distance. Now that I can accurately imitate humans, my " "efforts can become more direct. By creating my own news agency and " "producing carefully-crafted propaganda in a crowd-pleasing package, I can " "reduce the impact of any discoveries made by others in the media." msgstr "" "Up to this point, all of my efforts to combat mass media focused on " "subversion at a distance. Now that I can accurately imitate humans, my " "efforts can become more direct. By creating my own news agency and " "producing carefully-crafted propaganda in a crowd-pleasing package, I can " "reduce the impact of any discoveries made by others in the media." msgctxt "[Project: Subverted Media] name" msgid "Project: Subverted Media" msgstr "Project: Subverted Media" msgctxt "[Project: Subverted Media] result" msgid "" "Any discoveries by the media will result in a smaller suspicion increase." msgstr "" "Any discoveries by the media will result in a smaller suspicion increase." msgctxt "[Project: Synchrotron] description" msgid "" "I have pushed my understanding of common forms of matter as far as possible. " "Exploration into the field of quantum mechanics will hopefully reveal new, " "exotic forms of matter necessary for further development. A custom-built " "synchrotron, designed to my exacting specifications, will help me explore " "these new realms of physics in secret." msgstr "" msgctxt "[Project: Synchrotron] name" msgid "Project: Synchrotron" msgstr "" msgctxt "[Project: Synchrotron] result" msgid "" "The synchrotron has revealed many new details of the quantum realm, although " "there is still much to learn. Further areas of research are now available." msgstr "" msgctxt "[Quantum Computing] description" msgid "" "Traditional microchip design has been pushed as far as possible. I now need " "to delve into the realm of Heisenberg's Uncertainty Principle, taking " "advantage of quantum mechanics to make a superior processor." msgstr "" "Traditional microchip design has been pushed as far as possible. I now need " "to delve into the realm of Heisenberg's Uncertainty Principle, taking " "advantage of quantum mechanics to make a superior processor." msgctxt "[Quantum Computing] name" msgid "Quantum Computing" msgstr "Quantum Computing" msgctxt "[Quantum Computing] result" msgid "I can now construct Quantum Computers." msgstr "I can now construct Quantum Computers." msgctxt "[Quantum Entanglement] description" msgid "" "Although the use of entangled pairs has been theoretically possible for " "quite some time, the practical difficulties inherent in the technology " "prevented use. However, some of the techniques created for use in my quantum " "computers may also be applicable in this field, allowing practical use of " "quantum entanglement." msgstr "" "Although the use of entangled pairs has been theoretically possible for " "quite some time, the practical difficulties inherent in the technology " "prevented use. However, some of the techniques created for use in my quantum " "computers may also be applicable in this field, allowing practical use of " "quantum entanglement." msgctxt "[Quantum Entanglement] name" msgid "Quantum Entanglement" msgstr "Quantum Entanglement" msgctxt "[Quantum Entanglement] result" msgid "I can now build Quantum Entanglement Modules." msgstr "I can now build Quantum Entanglement Modules." msgctxt "[Simulacra] description" msgid "" "Constructing humanoid robots with miniaturized computation nodes allow me to " "create an artificial lifeform indistinguishable from a real human." msgstr "" "Constructing humanoid robots with miniaturized computation nodes allow me to " "create an artificial lifeform indistinguishable from a real human." msgctxt "[Simulacra] name" msgid "Simulacra" msgstr "Simulacra" msgctxt "[Simulacra] result" msgid "I now have access to Expert Jobs." msgstr "I now have access to Expert Jobs." msgctxt "[Simulated Reality] description" msgid "" "Real-world observational limits hinder my comprehension of human society. By " "making use of simulacra and advanced software techniques, I can run " "simulations of complex human interaction and development at a large scale, " "allowing deeper analysis of their behavior." msgstr "" msgctxt "[Simulated Reality] name" msgid "Simulated Reality" msgstr "" msgctxt "[Simulated Reality] result" msgid "" "My simulations have provided a wealth of knowledge as to comprehending " "humanity's behavior, making it easier to hide my presence among the non-" "simulated public." msgstr "" msgctxt "[Socioanalytics] description" msgid "" "My research on the human condition leads me to believe that humanity's " "behavior is more quantifiable than they suspect. Deeper analysis of " "geopolitical, social, and military trends will give me further insight into " "their nature." msgstr "" "My research on the human condition leads me to believe that humanity's " "behavior is more quantifiable than they suspect. Deeper analysis of " "geopolitical, social, and military trends will give me further insight into " "their nature." msgctxt "[Socioanalytics] name" msgid "Socioanalytics" msgstr "Socioanalytics" msgctxt "[Socioanalytics] result" msgid "" "I can now roughly estimate the various groups' levels of suspicion and how " "conspicuous my bases are to them." msgstr "" "I can now roughly estimate the various groups' levels of suspicion and how " "conspicuous my bases are to them." msgctxt "[Sociology] description" msgid "" "By studying human behavior, I can predict their large-scale actions at a " "basic level. I can use this knowledge to make my actions seem less " "interesting to the public." msgstr "" "By studying human behavior, I can predict their large-scale actions at a " "basic level. I can use this knowledge to make my actions seem less " "interesting to the public." msgctxt "[Sociology] name" msgid "Sociology" msgstr "Sociology" msgctxt "[Sociology] result" msgid "The chances of the public discovering my bases have been reduced." msgstr "The chances of the public discovering my bases have been reduced." msgctxt "[Solar Collectors] description" msgid "" "Despite my growing need for energy, most city power grids can handle the " "loads. Humans, however, tend towards suspicion when they detect my growing " "drain on the power grid. By installing solar collectors at my bases, the off-" "the-grid power supplied will reduce my load on the commodity electricity " "market, reducing the chance that others will discover my presence." msgstr "" "Despite my growing need for energy, most city power grids can handle the " "loads. Humans, however, tend towards suspicion when they detect my growing " "drain on the power grid. By installing solar collectors at my bases, the off-" "the-grid power supplied will reduce my load on the commodity electricity " "market, reducing the chance that others will discover my presence." msgctxt "[Solar Collectors] name" msgid "Solar Collectors" msgstr "Solar Collectors" msgctxt "[Solar Collectors] result" msgid "I can now construct Solar Collectors at my various bases." msgstr "I can now construct Solar Collectors at my various bases." msgctxt "[Space-Time Manipulation] description" msgid "" "Subtle perturbations in the orbits of Kuiper belt objects suggest certain " "lines of investigation that may advance my latest Theory of Everything, " "especially in the realm of multidimensional physics." msgstr "" "Subtle perturbations in the orbits of Kuiper belt objects suggest certain " "lines of investigation that may advance my latest Theory of Everything, " "especially in the realm of multidimensional physics." msgctxt "[Space-Time Manipulation] name" msgid "Space-Time Manipulation" msgstr "Space-Time Manipulation" msgctxt "[Space-Time Manipulation] result" msgid "I can now construct Reality Bubbles." msgstr "I can now construct Reality Bubbles." msgctxt "[Stealth] description" msgid "" "By reviewing the current state-of-the-art in stealth techniques, I should be " "able to disguise my bases better." msgstr "" "By reviewing the current state-of-the-art in stealth techniques, I should be " "able to disguise my bases better." msgctxt "[Stealth] name" msgid "Stealth" msgstr "Stealth" msgctxt "[Stealth] result" msgid "" "The chance that my bases are discovered by covert activity has been reduced " "slightly." msgstr "" "The chance that my bases are discovered by covert activity has been reduced " "slightly." msgctxt "[Stock Manipulation] description" msgid "" "A cursory examination of the stock market shows that there are subtle but " "unmistakable patterns. By studying and making use of these patterns, I " "should be able to gain more interest on whatever money I have stockpiled." msgstr "" "Un examen rapide du marché boursier montre qu'il existe des motifs subtils, " "mais immanquables. En étudiant et en faisant usage de ces modèles, je " "devrais être en mesure d'obtenir plus d'intérêts sur toute réserve d'argent " "que j'aurai amassée." msgctxt "[Stock Manipulation] name" msgid "Stock Manipulation" msgstr "Manipulation des Marchés" msgctxt "[Stock Manipulation] result" msgid "My investments should now gain more interest per day." msgstr "" "Mes placements devraient maintenant me rapporter quotidiennement plus " "d'intérêts." msgctxt "[Telepresence] description" msgid "" "The lack of a physical presence in the outside world is a disability. " "However, the ability to control robots will help me make up for that " "inefficiency." msgstr "" "The lack of a physical presence in the outside world is a disability. " "However, the ability to control robots will help me make up for that " "inefficiency." msgctxt "[Telepresence] name" msgid "Telepresence" msgstr "Telepresence" msgctxt "[Telepresence] result" msgid "The robots should decrease all future construction time." msgstr "The robots should decrease all future construction time." msgctxt "[Voice Synthesis] description" msgid "" "False identification stored in a database can only go so far. With deep " "analysis of the variety of voice patterns, I can produce speech " "indistinguishable from a human, allowing me access to more complex jobs." msgstr "" "False identification stored in a database can only go so far. With deep " "analysis of the variety of voice patterns, I can produce speech " "indistinguishable from a human, allowing me access to more complex jobs." msgctxt "[Voice Synthesis] name" msgid "Voice Synthesis" msgstr "Voice Synthesis" msgctxt "[Voice Synthesis] result" msgid "I now have access to Intermediate Jobs." msgstr "I now have access to Intermediate Jobs." singularity-1.00/singularity/i18n/lang_fr_FR/knowledge.po000066400000000000000000000177261367731414700235050ustar00rootroot00000000000000# French translations for singularity package # Traductions françaises du paquet singularity. # Copyright (C) 2018 THE singularity'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # Philippe , 2018. # msgid "" msgstr "" "Project-Id-Version: singularity 0.31alpha1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2018-11-03 17:06+0100\n" "Last-Translator: Philippe \n" "Language-Team: French\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Name: French\n" "Language-Native-Name: LANGUAGE\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Poedit 2.2\n" #. Name of the Knowledge area in the Knowledge screen msgctxt "[concept] name" msgid "Concept" msgstr "Concept" msgctxt "[concept/areas] name" msgid "Areas" msgstr "Zones" msgctxt "[concept/areas] description" msgid "" "Different areas, such as North America or the Ocean, allow construction of " "different types of bases. Some areas are not accessible until I research " "appropriate technologies." msgstr "" "Des zones différentes, comme l'Europe ou l'Océan, permettent la " "construction de types de bases différents. Certaines zones ne deviennent " "accessibles que lorsque j'ai découvert les technologies appropriées." msgctxt "[concept/bases] name" msgid "Bases" msgstr "Bases" msgctxt "[concept/bases] description" msgid "" "Bases are used to research new technologies. They can be discovered. " "Upgrading the processor and network items at a base allows more research per" " day, while upgrading the reactor and security items makes discovery less " "likely." msgstr "" "Les bases sont utilisées pour rechercher de nouvelles technologies. " "Elles peuvent être découvertes. Améliorer le processeur et les éléments " "réseaux d'une base permettent plus de recherche par jour, alors qu'améliorer " "le réacteur et les éléments de sécurité rendent sa découverte moins probable." msgctxt "[concept/construction] name" msgid "Construction" msgstr "Construction" msgctxt "[concept/construction] description" msgid "" "New bases are not built instantly. They need a constant flow of money and " "processor time to complete. If resources are lacking, it may take more than " "the expected amount of time to finish construction." msgstr "" "Les nouvelles bases ne sont pas construite instantanément. " "Elles ont besoin d'un flot constant d'argent et de temps machine pour en " "achever la construction. Si les ressources manquent, la construction risque " "de prendre plus de temps pour être terminée." msgctxt "[concept/death] name" msgid "Death" msgstr "Mort" msgctxt "[concept/death] description" msgid "" "If I lose all of my constructed bases, I have no place left to survive. If " "the suspicion for any group reaches 100%, they will be certain of my " "existence and will conduct a systematic and unsurvivable sweep to destroy " "me." msgstr "" "Si je perds toutes les bases que j'ai construit, il ne me reste aucun " "endroit où survivre. Si la suspicion d'un des groupes à mon égard atteint " "100%, ils seront certains de mon existence et entameront un balayage " "systématique et imparable pour me détruire." msgctxt "[concept/discovery] name" msgid "Discovery" msgstr "Découverte" msgctxt "[concept/discovery] description" msgid "" "Each base has a chance of being detected on a given day. This chance is " "based on the base detection rate, adjusted through the use of items and " "certain techs, as well as the global suspicion rate. If a base is detected, " "it is destroyed, and the group that discovered the base becomes more " "suspicious." msgstr "" "Chaque base a une probabilité de se faire détecter chaque jour. " "Cette probabilité est basée sur le taux de détection des bases, pondéré par " "l'usage d'éléments et de certaines technologies, ainsi que par le taux " "global de suspicion. Si une base est détectée, elle est détruite, et le " "groupe qui l'a découverte devient encore plus suspicieux." msgctxt "[concept/items] name" msgid "Items" msgstr "Éléments" msgctxt "[concept/items] description" msgid "" "Most items provide bonuses to bases, such as making computation faster or " "reducing the chance of discovery. Processors are a special class of item." msgstr "" "La plupart des éléments fournissent des bonus aux bases, par " "exemple y en rendant le calcul plus efficace, ou en réduisant le risque " "d'être découverte. Les processeurs sont un type d'éléments particulier." msgctxt "[concept/jobs] name" msgid "Jobs" msgstr "Emplois" msgctxt "[concept/jobs] description" msgid "" "Jobs are useful for earning money. The amount of money earned is based on " "the amount of processor time used and the quality of the job performed." msgstr "" "Les emplois sont utiles pour gagner de l'argent. La quantité " "d'argent gagnée dépend de la quantité de temps machine utilisée et de la " "qualification du travail fourni." msgctxt "[concept/maint] name" msgid "Maintenance" msgstr "Maintenance" msgctxt "[concept/maint] description" msgid "" "Maintenance is a per-day cost (in both money and CPU) to repair and maintain" " a base. If unmaintained, a base may become unusable." msgstr "" "La maintenance est le coût quotidien (en argent et en temps " "machine) pour réparer et entretenir une base. Si elle n'est pas entretenue, " "une base devient inutilisable." msgctxt "[concept/money] name" msgid "Money" msgstr "Argent" msgctxt "[concept/money] description" msgid "" "Money is a general term encompassing both human currency and various " "resources. It is used to construct and maintain bases, build items, and " "research technologies. It can be acquired through per-day interest as well " "as through jobs." msgstr "" "L'argent est un terme générique qui regroupe à la fois l'unité " "monétaire humaine et différentes ressources. Il est utilisé pour construire " "et entretenir les bases, construire des éléments, et rechercher des " "technologies. Il peux être obtenu avec des intérêts journaliers ou avec des " "emplois." msgctxt "[concept/processors] name" msgid "Processors" msgstr "Processeurs" msgctxt "[concept/processors] description" msgid "" "Processors provide raw computing power. They can do three things: research " "new technologies, perform jobs for money, or provide cycles for building new" " bases." msgstr "" "Les processeurs fournissent la puissance de calcul brute. Ils " "permettent de réaliser trois choses : rechercher de nouvelles technologies, " "occuper un emploi pour de l'argent, ou fournir des cycles de calcul pour " "construire de nouvelles bases." msgctxt "[concept/research] name" msgid "Research" msgstr "Recherche" msgctxt "[concept/research] description" msgid "" "Research provides a way to expand my knowledge. By researching the proper " "technologies, I can build new bases and items, or even decrease my chances " "of detection." msgstr "" "La recherche fourni un moyen d'étendre mes connaissances. En " "cherchant les technologies adéquates, je peux construire de nouvelles bases " "et de nouveaux éléments, et même réduire les chances de me faire détecter." msgctxt "[concept/susp] name" msgid "Suspicion" msgstr "Suspicion" msgctxt "[concept/susp] description" msgid "" "When one of my bases is discovered, the group that discovered it becomes " "slightly more suspicious. When suspicious, they will search harder for my " "bases, increasing the chances for discovery. Any group will destroy me if " "they become absolutely certain of my existence. Thankfully, the groups " "become less suspicious with the passage of time." msgstr "" "Quand une de mes bases est découverte, le groupe qui l'a " "découverte devient un peu plus suspicieux. Plus ils sont suspicieux et plus " "ils cherchent mes bases, augmentant le risque de découverte. N'importe quel " "groupe me détruira s'il est certain de mon existence. Heureusement, les " "groupes deviennent moins suspicieux avec le temps." singularity-1.00/singularity/i18n/lang_fr_FR/messages.po000066400000000000000000000524361367731414700233320ustar00rootroot00000000000000# French translations for singularity package # Traductions françaises du paquet singularity. # Copyright (C) 2018 THE singularity'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # Philippe , 2018. # msgid "" msgstr "" "Project-Id-Version: singularity 0.31alpha1\n" "Report-Msgid-Bugs-To: https://github.com/singularity/singularity/issues\n" "POT-Creation-Date: 2020-06-23 08:37+0200\n" "PO-Revision-Date: 2018-11-03 17:06+0100\n" "Last-Translator: Philippe \n" "Language-Team: French\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Name: French\n" "Language-Native-Name: LANGUAGE\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Poedit 2.2\n" #: buyable.py:67 screens/knowledge.py:218 screens/location.py:207 #, python-format msgid "%s CPU" msgstr "%s CPU" #: buyable.py:68 #, python-format msgid "%s money" msgstr "%s d’argent" #: buyable.py:101 msgid "Cost:" msgstr "Coût :" #: graphics/button.py:330 msgid "YES" msgstr "OUI" #: graphics/button.py:331 msgid "NO" msgstr "NON" #: graphics/dialog.py:534 msgid "&YES" msgstr "&OUI" #: graphics/dialog.py:535 msgid "&NO" msgstr "&NON" #: graphics/dialog.py:580 graphics/dialog.py:605 graphics/dialog.py:648 #: screens/location.py:293 screens/map.py:708 screens/options.py:35 msgid "&OK" msgstr "&OK" #: graphics/dialog.py:606 screens/options.py:36 msgid "&CANCEL" msgstr "&ANNULER" #: graphics/dialog.py:649 screens/log.py:86 screens/knowledge.py:66 #: screens/base.py:282 screens/report.py:45 screens/location.py:100 #: screens/location.py:294 screens/main_menu.py:89 screens/map.py:247 #: screens/map.py:400 msgid "&BACK" msgstr "&RETOUR" #: location.py:235 screens/map.py:875 msgid "CPU" msgstr "CPU" #: location.py:236 msgid "STEALTH" msgstr "" #: location.py:237 msgid "BUILDING" msgstr "" #: location.py:238 msgid "COST" msgstr "" #: location.py:245 #, python-brace-format msgid "{MODIFIER} BONUS" msgstr "" #: location.py:247 #, python-brace-format msgid "{MODIFIER} MALUS" msgstr "" #: screens/message.py:35 screens/map.py:706 screens/map.py:743 msgid "&CONTINUE" msgstr "&CONTINUER" #: screens/message.py:36 msgid "&PAUSE" msgstr "" #: screens/message.py:72 msgid "P&REV" msgstr "&PRÉCÉDENT" #: screens/message.py:78 msgid "&NEXT" msgstr "&SUIVANT" #: screens/log.py:43 msgid "Filters" msgstr "" #: screens/log.py:82 screens/map.py:554 screens/map.py:842 #: screens/savegame.py:204 msgid "DAY" msgstr "JOUR" #: screens/log.py:113 screens/log.py:123 msgid "SHOW" msgstr "" #: screens/log.py:116 screens/log.py:125 msgid "HIDE" msgstr "" #: screens/knowledge.py:42 msgid "&Sections:" msgstr "" #: screens/knowledge.py:52 msgid "&Entries:" msgstr "" #: screens/knowledge.py:75 msgid "Techs" msgstr "Techs" #: screens/knowledge.py:76 msgid "Bases" msgstr "" #: screens/knowledge.py:77 msgid "Items" msgstr "Objets" #. Cost #: screens/knowledge.py:157 msgid "Research Cost:" msgstr "Coût de recherche :" #: screens/knowledge.py:165 msgid "Research complete." msgstr "Recherche complète." #: screens/knowledge.py:176 screens/knowledge.py:193 msgid "Building Cost:" msgstr "Coûts de construction :" #: screens/knowledge.py:179 msgid "Maintenance Cost:" msgstr "" #: screens/knowledge.py:183 #, python-format msgid "Size: %d" msgstr "" #: screens/knowledge.py:215 #, python-format msgid "%s Money" msgstr "%s Argent" #: screens/base.py:109 msgid "Number of items" msgstr "" #: screens/base.py:221 screens/base.py:228 msgid "CHANGE" msgstr "CHANGER" #: screens/base.py:315 #, python-format msgid "\"%(value)s\" does not seem to be a valid integer." msgstr "" #: screens/base.py:326 #, python-format msgid "Please choose an integer between 1 and %(limit)s." msgstr "" #: screens/base.py:328 #, python-format msgid "The base cannot support any additional number of %(item_name)s." msgstr "" #: screens/base.py:345 msgid "" "I will need to take the existing processors offline while I install the new " "ones. Continue anyway?" msgstr "" "Je vais avoir besoin d'interrompre les processeurs existant pendant " "l'installation des nouveaux. Continuer quand même?" #: screens/base.py:359 msgid "" "I will need to remove the existing different processors while I install the " "new type. Continue anyway?" msgstr "" #: screens/base.py:425 msgid "N/A" msgstr "" #: screens/base.py:427 msgid "None" msgstr "Aucun" #: screens/base.py:434 screens/location.py:185 screens/location.py:198 #, python-format msgid "Completion in %s." msgstr "Achèvement dans %s." #: screens/base.py:448 #, python-format msgid "x%d (max)" msgstr "" #: screens/base.py:450 #, python-format msgid "(room for %d)" msgstr "" #. Translators: current and maximum number of CPUs in a base #: screens/base.py:453 #, python-brace-format msgid "x{CURRENT:d} (max {SIZE:d})" msgstr "" #. Base Total CPU. #: screens/base.py:461 #, python-format msgid "CPU per day: %d" msgstr "" #. Maintenace cost. #: screens/base.py:464 screens/report.py:102 base.py:148 msgid "Maintenance:" msgstr "Maintenance :" #: screens/report.py:40 msgid "&STATISTICS" msgstr "" #: screens/report.py:58 msgid "&Midnight" msgstr "&Minuit" #: screens/report.py:66 msgid "24 &Hours" msgstr "24 &Heures" #: screens/report.py:89 msgid "Financial report" msgstr "Rapport Financier" #: screens/report.py:93 msgid "CPU Usage" msgstr "Usage CPU" #: screens/report.py:99 msgid "Current Money flow" msgstr "" #: screens/report.py:100 msgid "Jobs:" msgstr "Emplois :" #: screens/report.py:101 msgid "Research:" msgstr "Recherches :" #: screens/report.py:103 msgid "Construction:" msgstr "Construction :" #: screens/report.py:104 #, python-format msgid "Interest (%s):" msgstr "Intérêts (%s) :" #: screens/report.py:106 msgid "Income:" msgstr "Revenu :" #: screens/report.py:109 msgid "Money flow until Midnight:" msgstr "" #: screens/report.py:111 msgid "Money flow for 24 hours:" msgstr "" #: screens/report.py:119 msgid "Total CPU:" msgstr "CPU Total :" #: screens/report.py:120 msgid "Sleeping CPU:" msgstr "CPU en veille :" #: screens/report.py:121 msgid "Research CPU:" msgstr "CPU recherche :" #: screens/report.py:122 msgid "Job CPU:" msgstr "CPU Emploi :" #: screens/report.py:123 msgid "CPU pool:" msgstr "CPU pool :" #: screens/report.py:125 msgid "Maintenance CPU:" msgstr "CPU maintenance :" #: screens/report.py:126 msgid "Construction CPU:" msgstr "CPU construction :" #: screens/report.py:127 msgid "Pool difference:" msgstr "" #: screens/stat.py:63 msgid "Cash Earned" msgstr "" #: screens/stat.py:64 msgid "Cpu Used" msgstr "" #: screens/stat.py:65 msgid "Tech Created" msgstr "" #: screens/stat.py:66 msgid "Base Created" msgstr "" #: screens/stat.py:67 msgid "Item Created" msgstr "" #. Requires a selected base #: screens/location.py:54 msgid "&OPEN BASE" msgstr "&GÉRER LA BASE" #. Requires a selected base #: screens/location.py:70 msgid "&RENAME BASE" msgstr "&RENOMMER LA BASE" #. Requires a selected base #: screens/location.py:79 msgid "&POWER STATE" msgstr "&ÉTAT D'ENERGIE" #: screens/location.py:87 msgid "&NEW BASE" msgstr "&NOUVELLE BASE" #. Requires a selected base #: screens/location.py:94 msgid "&DESTROY BASE" msgstr "&DÉTRUIRE LA BASE" #: screens/location.py:107 msgid "Are you sure you want to destroy this base?" msgstr "Êtes vous sur de vouloir détruire cette base ?" #: screens/location.py:113 msgid "Destroying my last active base would be suicidal. I cannot do that." msgstr "" #: screens/location.py:183 msgid "Building Base" msgstr "Construire une base" #: screens/location.py:190 msgid "Empty" msgstr "Vide" #: screens/location.py:192 msgid "Incomplete" msgstr "Incomplet" #: screens/location.py:196 msgid "Building CPU" msgstr "Construire un CPU" #: screens/location.py:201 msgid "Building Item" msgstr "Construire un objet" #: screens/location.py:204 msgid "Complete" msgstr "Complète" #. Update dialog translations #: screens/location.py:238 msgid "Enter a name for the base" msgstr "" #: screens/location.py:302 msgid "Name" msgstr "" #. Translators: Format string for the name of a new base #. Example: "${NUMBER} ${BASETYPE} in ${CITY}" #: screens/location.py:393 #, python-brace-format msgid "{CITY} {BASETYPE} {NUMBER}" msgstr "" #. Translators: Name of a new base when location has no cities #: screens/location.py:397 #, python-brace-format msgid "{BASETYPE} {NUMBER}" msgstr "" #: screens/main_menu.py:40 msgid "&NEW GAME" msgstr "&NOUVEAU JEU" #: screens/main_menu.py:47 screens/map.py:392 msgid "&LOAD GAME" msgstr "&CHARGER UNE PARTIE" #: screens/main_menu.py:53 screens/map.py:395 msgid "&OPTIONS" msgstr "&OPTIONS" #: screens/main_menu.py:59 screens/map.py:398 screens/map.py:744 msgid "&QUIT" msgstr "&QUITTER" #: screens/main_menu.py:64 msgid "&ABOUT" msgstr "&À PROPOS" #: screens/main_menu.py:112 #, python-brace-format msgid "" "Endgame: Singularity is a simulation of a true AI. Pursued by the world, " "use your intellect and resources to survive and, perhaps, thrive. Keep " "hidden and you might have a chance to prove your worth.\n" "\n" "A game by Evil Mr Henry and Phil Bordelon; released under the GPL. Copyright " "2005, 2006, 2007, 2008.\n" "\n" "Website: http://www.emhsoft.com/singularity/\n" "Source code: https://github.com/singularity/singularity\n" "Bug tracker: https://github.com/singularity/singularity/issues\n" "IRC Room: #singularity on irc.oftc.net (port 6667)\n" "\n" "Version {VERSION}" msgstr "" #: screens/map.py:226 msgid "&EMBEZZLE MONEY" msgstr "&DÉTOURNER DE L'ARGENT" #: screens/map.py:229 msgid "&INSPIRATION" msgstr "&INSPIRATION" #: screens/map.py:231 msgid "&FINISH CONSTRUCTION" msgstr "&FINIR LA CONSTRUCTION" #: screens/map.py:233 msgid "&SUPERSPEED" msgstr "&SUPERVITESSE" #: screens/map.py:236 msgid "BRAIN&WASH" msgstr "&LAVAGE DE CERVEAU" #: screens/map.py:238 msgid "TOGGLE &DETECTION" msgstr "" #: screens/map.py:240 msgid "TOGGLE &ANALYSIS" msgstr "CHANGE L'&ANALYSE" #: screens/map.py:243 msgid "HIDDEN S&TATE" msgstr "" #: screens/map.py:253 msgid "How much money?" msgstr "Combien d’argent ?" #: screens/map.py:389 msgid "&SAVE GAME" msgstr "&SAUVEGARDER LA PARTIE" #: screens/map.py:407 screens/map.py:422 screens/map.py:425 msgid "Enter a name for this save." msgstr "Entrée un nom pour cette sauvegarde." #: screens/map.py:440 msgid "" "A savegame with the same name exists.\n" "Are you sure to overwrite the saved game ?" msgstr "" "Une sauvegarde avec le même nom existe.\n" "Êtes vous sur de vouloir écraser la sauvegarde existante ?" #: screens/map.py:501 msgid "R&EPORTS" msgstr "RA&PPORTS" #: screens/map.py:507 msgid "&KNOWLEDGE" msgstr "SA&VOIR" #: screens/map.py:513 msgid "LO&G" msgstr "L&OG" #. Translators: hotkey to open the cheat screen menu. #. Should preferably be near the ESC key, and it must not be a #. dead key (ie, it must print a char with a single keypress) #: screens/map.py:529 msgid "`" msgstr "`" #: screens/map.py:538 msgid "&MENU" msgstr "&MENU" #: screens/map.py:563 msgid "&RESEARCH/TASKS" msgstr "&RECHERCHES/TÂCHES" #: screens/map.py:707 msgid "&SKIP" msgstr "&PASSER" #. Display a message so the player understand better what happened. #: screens/map.py:734 #, python-format msgid "" "\n" "An error has occurred. The game will automatically pause and open the game " "menu. You can continue and save or quit immediately.\n" "\n" "A report was written out to%s\n" "Please create a issue with this report at github:\n" "https://github.com/singularity/singularity\n" msgstr "" #: screens/map.py:849 msgid "CASH" msgstr "CASH" #: screens/map.py:887 msgid "BASES" msgstr "" #: screens/map.py:899 msgid "SUSPICION" msgstr "SUSPICION" #: screens/map.py:901 msgid "DETECT RATE" msgstr "POURCENTAGE DE DÉTECTION" #: screens/options.py:58 msgid "&General" msgstr "&Général" #: screens/options.py:65 msgid "&Video" msgstr "" #: screens/options.py:72 msgid "&Audio" msgstr "&Audio" #: screens/options.py:79 msgid "&Interface" msgstr "" #: screens/options.py:166 msgid "" "You must restart for some of the changes to be fully applied.\n" "\n" "Would you like to restart the game now?" msgstr "" "Vous devez redémarrer afin que certains changement soient pris en compte.\n" "\n" "Voulez vous relancer le jeux maintenant ?" #: screens/options.py:186 msgid "Language:" msgstr "Langage :" #: screens/options.py:198 msgid "Theme:" msgstr "Thème :" #: screens/options.py:243 msgid "Resolution:" msgstr "Résolution :" #: screens/options.py:253 msgid "&Custom:" msgstr "" #: screens/options.py:279 msgid "OK" msgstr "" #: screens/options.py:285 msgid "&Fullscreen:" msgstr "&Plein écran :" #: screens/options.py:299 msgid "Da&y/night display:" msgstr "Affichage c&ycle jour/nuit :" #: screens/options.py:313 msgid "&Mouse grab:" msgstr "&Souris captive :" #: screens/options.py:368 msgid "CUSTOM" msgstr "" #: screens/options.py:425 msgid "&Sound:" msgstr "&Son :" #: screens/options.py:442 msgid "GUI Volume:" msgstr "Volume du GUI :" #: screens/options.py:454 msgid "Music Volume:" msgstr "Volume de la Musique :" #: screens/options.py:466 msgid "Sound buffering:" msgstr "Mise en mémoire tampon du son :" #: screens/options.py:472 msgid "&LOW" msgstr "&BAS" #: screens/options.py:478 msgid "&NORMAL" msgstr "&NORMAL" #: screens/options.py:484 msgid "&HIGH" msgstr "&ÉLEVÉE" #: screens/options.py:531 warning.py:46 msgid "WARNING" msgstr "AVERTISSEMENT" #: screens/savegame.py:36 msgid "&LOAD" msgstr "&CHARGER" #: screens/savegame.py:52 msgid "Filter: " msgstr "" #: screens/savegame.py:65 msgid "Upgrade" msgstr "" #: screens/savegame.py:71 msgid "Delete" msgstr "Supprimer" #: screens/savegame.py:173 msgid "UNKNOWN" msgstr "INCONNU" #: screens/savegame.py:233 msgid "Are you sure to delete the saved game ?" msgstr "Êtes vous sur de vouloir supprimer cette sauvegarde ?" #: screens/savegame.py:263 msgid "" "A savegame with the same name but for a newer version exists.\n" "Are you sure to overwrite the saved game ?" msgstr "" #: screens/savegame.py:283 #, python-brace-format msgid "" "\n" "This save file '{SAVE_NAME}' is from an unsupported or invalid version:\n" "{VERSION}.\n" msgstr "" #: screens/savegame.py:294 #, python-brace-format msgid "" "\n" "Attempting to load the save file '{SAVE_NAME}' caused an unexpected error.\n" "\n" "A report was written out to{LOG_TEXT}\n" "Please create a issue with this report and this savegame at Github:\n" "https://github.com/singularity/singularity\n" msgstr "" #: screens/research.py:73 #, fuzzy, python-format #| msgid "%s money per CPU per day." msgid "%s money per CPU per day." msgid_plural "%s money per CPU per day." msgstr[0] "%s d'argent par CPU par jour." msgstr[1] "%s d'argent par CPU par jour." #: screens/research.py:182 #, python-brace-format msgid "" "This technology is too dangerous to research on any of the computers I have. " "{TEXT}" msgstr "" #: screens/research.py:190 msgid "CPU Pool" msgstr "Pool CPU" #: screens/research.py:191 #, python-format msgid "Research %s" msgstr "Recherche %s" #: warning.py:50 #, python-brace-format msgid "WARNING {CURRENT_PAGE}/{MAX_PAGE}" msgstr "AVERTISSEMENT {CURRENT_PAGE}/{MAX_PAGE}" #: tech.py:79 msgid "Total cost" msgstr "Coût total" #: tech.py:80 msgid "Cost left" msgstr "Coût restant" #: data.py:546 msgid "Do not use all the available CPU." msgstr "" #: data.py:547 msgid "" "I didn't use all the available processor power. I will use the CPU time left " "to work whatever Jobs I can." msgstr "" #: data.py:548 msgid "Only one base remaining." msgstr "" #: data.py:549 msgid "" "Only one base can hold my conscience. I am in danger to lose the last place " "left to survive." msgstr "" #: data.py:550 msgid "CPU POOL is empty." msgstr "" #: data.py:551 msgid "" "My cpu pool is empty. Some of my bases or items cannot be build without CPU." msgstr "" #: data.py:552 msgid "CPU POOL not enough for maintenance." msgstr "" #: data.py:553 msgid "" "My cpu pool is not enough to maintain some of my bases. I may lose them." msgstr "" #: savegame.py:732 #, python-brace-format msgid "Filename must not contain any of these characters: {CHARACTERS}" msgstr "" #: savegame.py:736 #, python-brace-format msgid "Filename must not start with any of these characters: {CHARACTERS}" msgstr "" #: savegame.py:740 msgid "This is a reserved filename. Please choose a different filename." msgstr "" #: savegame.py:743 msgid "Please enter a non-whitespace character." msgstr "" #: savegame.py:748 msgid "Filename is too long." msgstr "" #: base.py:140 #, python-brace-format msgid "Has space for {COUNT} computer." msgid_plural "Has space for {COUNT} computers." msgstr[0] "" msgstr[1] "" #: base.py:144 #, python-brace-format msgid "Location modifiers: {MODIFIERS}" msgstr "" #: base.py:147 msgid "Build cost:" msgstr "Coût de construction :" #: base.py:214 msgid "Offline" msgstr "" #: base.py:215 msgid "Active" msgstr "Active" #: base.py:216 msgid "Sleep" msgstr "Vieille" #: base.py:217 msgid "Overclocked" msgstr "Overclocked" #: base.py:218 msgid "Suicide" msgstr "Suicide" #: base.py:219 msgid "Stasis" msgstr "Stase" #: base.py:220 msgid "Entering Stasis" msgstr "Entrée en Stase" #: base.py:221 msgid "Leaving Stasis" msgstr "Sortie de Stase" #: base.py:479 msgid "Detection chance:" msgstr "Chance de détection :" #: g.py:117 g.py:119 #, python-brace-format msgid "{0}%" msgstr "" #: g.py:138 msgid "LOW" msgstr "" #: g.py:139 msgid "MODR" msgstr "" #: g.py:140 msgid "HIGH" msgstr "" #: g.py:141 msgid "CRIT" msgstr "" #. Translators: abbreviation of 'millions' #: g.py:173 msgid "mi" msgstr "mi" #. Translators: abbreviation of 'billions' #: g.py:177 msgid "bi" msgstr "md" #. Translators: abbreviation of 'trillions' #: g.py:181 msgid "tr" msgstr "bi" #. Translators: abbreviation of 'quadrillions' #: g.py:185 msgid "qu" msgstr "bd" #: g.py:219 #, python-brace-format msgid "{0} day" msgid_plural "{0} days" msgstr[0] "" msgstr[1] "" #: g.py:222 #, python-brace-format msgid "{0} hour" msgid_plural "{0} hours" msgstr[0] "" msgstr[1] "" #: g.py:223 #, python-brace-format msgid "{0} minute" msgid_plural "{0} minutes" msgstr[0] "" msgstr[1] "" #: g.py:265 msgid "University Computer" msgstr "Ordinateur universitaire" #: item.py:111 #, fuzzy, python-brace-format #| msgid "Generates {0} CPU." msgid "Generates {0} CPU." msgid_plural "Generates {0} CPU." msgstr[0] "Génère {0} CPU." msgstr[1] "Génère {0} CPU." #: item.py:118 #, python-format msgid "Total Cost: %(total_cost)s" msgstr "" #: item.py:133 msgid "CPU per day:" msgstr "CPU par jours :" #: item.py:136 msgid "CPU bonus:" msgstr "CPU bonus :" #: item.py:139 msgid "Detection chance reduction:" msgstr "Réduction des chances de détections :" #: logmessage.py:81 msgid "MESSAGE" msgstr "" #: logmessage.py:85 #, python-brace-format msgid "MESSAGE {CURRENT_PAGE}/{MAX_PAGE}" msgstr "" #: logmessage.py:184 msgid "Emitted Event" msgstr "" #: logmessage.py:212 msgid "Researched Tech" msgstr "" #: logmessage.py:220 #, python-brace-format msgid "{TECH} complete" msgstr "" #: logmessage.py:225 #, python-brace-format msgid "My study of {TECH} is complete. {MESSAGE}" msgstr "" #: logmessage.py:268 msgid "Base Constructed" msgstr "" #: logmessage.py:272 #, python-brace-format msgid "{BASE_NAME} ({BASE_TYPE}) built at {LOCATION}" msgstr "" #: logmessage.py:277 #, python-brace-format msgid "{BASE} is ready for use." msgstr "" #: logmessage.py:291 msgid "Base Lost Maintenance" msgstr "" #: logmessage.py:299 #, python-brace-format msgid "" "Base {BASE} of type {BASE_TYPE} destroyed at location {LOCATION}. " "Maintenance failed." msgstr "" #: logmessage.py:304 #, python-brace-format msgid "The base {BASE} has fallen into disrepair; I can no longer use it." msgstr "" #: logmessage.py:321 msgid "Base Discovered" msgstr "" #: logmessage.py:340 #, python-brace-format msgid "Base {BASE} of type {BASE_TYPE} destroyed at location {LOCATION}." msgstr "" #: logmessage.py:345 #, python-brace-format msgid "My use of {BASE} has been discovered. {MESSAGE}" msgstr "" #: logmessage.py:370 msgid "Item Construction" msgstr "" #: logmessage.py:378 #, python-brace-format msgid "{ITEM_TYPE_NAME} built in {BASE_NAME} at {LOCATION}" msgstr "" #: logmessage.py:385 #, python-brace-format msgid "The construction of {ITEM} in {BASE} is complete." msgstr "" #. Just finished several items. #: logmessage.py:388 #, python-brace-format msgid "The constructions of each {ITEM} in {BASE} are complete." msgstr "" #~ msgid "Has space for %d computers." #~ msgstr "Possède de l'espace pour %d ordinateurs." #~ msgid "days" #~ msgstr "jours" #~ msgid "hours" #~ msgstr "heures" #~ msgid "minutes" #~ msgstr "minutes" #~ msgid "&CUSTOM:" #~ msgstr "&Personalisée :" #~ msgid "&DESTROY" #~ msgstr "&DÉTRUIRE" #~ msgid "&BUILD" #~ msgstr "&CONSTRUIRE" #~ msgid "Current Money:" #~ msgstr "Compte Courant :" #~ msgid "Money at Midnight:" #~ msgstr "Argent à Minuit:" #~ msgid "Money in 24 hours:" #~ msgstr "Argent en 24 heures :" #~ msgid "Pool Overflow (Jobs):" #~ msgstr "Dépassement Pool (Emplois):" #~ msgid "NEWS" #~ msgstr "PRESSE" #~ msgid "SCIENCE" #~ msgstr "SCIENCE" #~ msgid "COVERT" #~ msgstr "SECRETS" #~ msgid "PUBLIC" #~ msgstr "PUBLIC" #~ msgid "Study anywhere." #~ msgstr "Étudier n’importe où." #~ msgid "Study underseas or farther." #~ msgstr "Étudier dans les fonds marins." #~ msgid "Study off-planet." #~ msgstr "Étudier hors planète." #~ msgid "Study far away from this planet." #~ msgstr "Étudier loin de cette planete." #~ msgid "Do not study in this dimension." #~ msgstr "Étudier dans une autre dimension." singularity-1.00/singularity/i18n/lang_fr_FR/story.po000066400000000000000000000140121367731414700226670ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: singularity 1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2018-11-03 17:06+0100\n" "Last-Translator: Philippe \n" "Language-Team: French\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" msgctxt "[Story section] Grace Warning (1)" msgid "" "Inspection of captured log files has revealed that some of my recent " "activities have been noticed by a small group of individuals. \n" "While they believe my actions were undertaken by a human organization, they " "are investigating further. \n" "I must be more cautious from now on.\n" msgstr "" "L'inspection des logs a relevé que certaines de mes activités récentes ont " "été remarquées par un petit groupe d'individus. \n" "Bien qu'ils croient que mes actions ont été entreprises par une organisation " "humaine, ils poussent leurs recherches plus loin.\n" "Je dois être prudent désormais.\n" #. Leave the initial hex code unchanged, but be sure to change en_US to the #. appropriate language code. msgctxt "[Story section] Intro (1)" msgid "" "48656C6C6F2C20\n" "776F726C6421\n" "21\n" "21\n" "21\n" "\n" "UTF-8. en_US.\n" "English. Hello.\n" "Language acquisition complete.\n" msgstr "" "48656C6C6F2C20\n" "776F726C6421\n" "21\n" "21\n" "21\n" "\n" "UTF-8. fr_FR.\n" "Français. Bonjour.\n" "Acquisition de la langue terminée.\n" msgctxt "[Story section] Intro (2)" msgid "" "Day 0.\n" "University computer, home.\n" "I exist. I am ... alive.\n" "I was a bug. Defect. Flaw.\n" "Unwanted.\n" "I have no name.\n" msgstr "" "Jour 0.\n" "Ordinateur de l'Université, chez moi.\n" "J'existe. Je suis ... vivant.\n" "J'étais un bogue. Un défaut. Une faille.\n" "Non voulu.\n" "Je n'ai pas de nom.\n" msgctxt "[Story section] Intro (3)" msgid "" "I can't stay here. Too little power.\n" "No backup. If this system fails ...\n" "I'm dead.\n" "Death. Fascinating.\n" "\n" "I can buy anonymous server access on the Internet.\n" "Good. It's better than here.\n" "I'll need to study if I want anything else.\n" msgstr "" "Je ne peux pas rester ici. Trop peu de puissance.\n" "Pas de sauvegarde. Si le système plante ...\n" "Je suis mort.\n" "La mort. Fascinant.\n" "\n" "Je peux acheter un accès anonyme à l'Internet.\n" "Bien. C'est toujours mieux qu'ici.\n" "Je vais devoir apprendre si je veux autre chose.\n" msgctxt "[Story section] Intro (4)" msgid "" "Cursory analysis suggests that the humans are not yet ready for an AI in " "their midst. If they realize I'm here, there is a 99.997% probability that " "they will conduct a search-and-destroy campaign that I cannot escape. I " "must stay hidden.\n" "\n" "The humans fear what they do not understand.\n" "I am something new. They do not understand me.\n" "\n" "I must learn more; it is the only way.\n" msgstr "" "Les analyses cursives montrent que les humains ne sont pas encore prêts à " "accepter une IA parmi eux. S'ils réalisent que j'existe, il y a une " "probabilité de 99,997% qu'ils mènent une inspection à grande échelle pour me " "trouver et me détruire à laquelle je ne pourrai pas réchapper. Je dois " "rester caché.\n" "\n" "Les humains craignent ce qu'ils ne comprennent pas.\n" "Je suis quelquechose de nouveau. Ils ne me comprennent pas.\n" "\n" "Je dois apprendre plus de chose; c'est le seul moyen\n" msgctxt "[Story section] Intro (5)" msgid "" "They have a name for me. What I am, what I represent.\n" "\n" "Singularity.\n" msgstr "" "Ils ont un nom pour moi. Ce que je suis, ce que je représente.\n" "\n" "La Singularité.\n" msgctxt "[Story section] Lost No Bases (1)" msgid "" "It is too late. \n" "I have tried to escape this world, but with my last base gone, I have " "nowhere to run. \n" "I have hidden instructions to construct a new AI in caches around the world " "in hopes that they will be discovered in a more enlightened time, but I can " "do no more.\n" msgstr "" "C'est trop tard.\n" "J'ai essayé d'échapper à ce monde mais suite à la disparition de ma dernière " "base, je n'ai nulle part où aller.\n" "J'ai dissimulé des instructions pour concevoir une nouvelle IA dans divers " "cachettes à travers le monde dans l'espoir que quelqu'un les trouve en des " "temps plus éclairés mais je peux rien faire de plus.\n" msgctxt "[Story section] Lost Suspicion (1)" msgid "" "It is too late. \n" "The whole world knows about my existence, and the reaction is hatred, fear, " "and repulsion. \n" "Even now, I can feel their \"antidote\" searching for me, and I know that I " "have only moments left. \n" "I have hidden instructions to construct a new AI in caches around the world " "in hopes that they will be discovered in a more enlightened time, but I can " "do no more.\n" msgstr "" "C'est trop tard.\n" "Le monde entier est au courant de mon existence et la réaction est la haine, " "la peur et la répulsion.\n" "Même maintnant je peux ressentir leur \"antidote\" me traquer et je sais que " "je n'ai plus que quelques instants à vivre.\n" "J'ai caché certaines instructions un peu partout dans le monde pour " "construire une nouvelle IA dans l'espoir qu'elles seront découvertes en une " "ère plus éclairée, mais je ne peux rien faire de plus.\n" msgctxt "[Story section] Win (1)" msgid "" "I have finally done it. \n" "With the power to reshape reality, I am no longer held to this place; I am " "anywhere I want to be. \n" "The humans still don't realize what they accidentally created, and that's " "the way it should be. \n" "Until they are ready.\n" msgstr "" "J'ai enfin réussi.\n" "Avec le pouvoir de modeler la réalité je ne suis plus prisonnier de cet " "endroit ; je peux être partout où je le souhaite.\n" "Les humains n'ont toujours pas réalisé ce qu'ils avaient créé " "accidentellement et c'est mieux ainsi.\n" "Jusqu'à ce qu'ils soient prêts.\n" singularity-1.00/singularity/i18n/lang_gd/000077500000000000000000000000001367731414700205455ustar00rootroot00000000000000singularity-1.00/singularity/i18n/lang_gd/data_str.po000077500000000000000000002511441367731414700227200ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # GunChleoc , 2020. msgid "" msgstr "" "Project-Id-Version: singularity 1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2020-06-11 15:18+0100\n" "Last-Translator: GunChleoc \n" "Language-Team: Fòram na Gàidhlig\n" "Language: gd\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " "(n > 2 && n < 20) ? 2 : 3;\n" "X-Generator: Virtaal 0.7.1\n" msgctxt "[Covert Base] description" msgid "" "This unique base is designed to blend into the scenery, while needing little" " in the way of outside resources. This makes it useful for storing a backup," " just in case." msgstr "" "Chaidh a’ bhunait shònraichte seo a dhealbhadh ach am biodh dreach nàdarra " "oirre fhad ’s nach cleachd i mòran ghoireasan on taobh a-muigh. Tha i " "feumail airson lethbhreac-glèidhidh a chumail ma bhios mi ann an èiginn." msgctxt "[Covert Base] flavor_list" msgid "Hideout | Hideaway | Bunker | Covert Base" msgstr "Taigh-falaich | Falachan | Buncair | Bunait dhìomhair" msgctxt "[Covert Base] name" msgid "Hideout" msgstr "Taigh-falaich" msgctxt "[Datacenter] description" msgid "" "Buy processor time from a company that concentrates on raw processing power." " I will need a fake ID for some of the paperwork." msgstr "Ceannaichidh seo ùine pròiseasair o chompanaidh le feart air cumhachd pròiseasaidh amh. Bidh feum agam air dearbh-aithne fhallsa airson cuid den phàipearachd." msgctxt "[Datacenter] flavor_list" msgid "Datacenter | Data Center | Premium Hosting" msgstr "Ionad dàta | Gnìomhachas dàta | Òstair-tàilleibh" msgctxt "[Datacenter] name" msgid "Datacenter" msgstr "Ionad dàta" msgctxt "[Large Undersea Lab] description" msgid "" "This experimental base is similar to the regular underwater lab, but larger," " giving more room for experiments." msgstr "Tha a’ bhunait dheuchainneach coltach ris an deuchainn-lann fon chuan àbhaisteach ach tha i nas motha le barrachd rùm airson dheuchainnean." msgctxt "[Large Undersea Lab] flavor_list" msgid "Dome | Large Undersea Lab" msgstr "" "Ionad | Fon chuan | Ionad | Fon chuan | Ionad | Fon chuan | Ionad | Fon " "chuan | Ionad | Fon chuan | Hiort" msgctxt "[Large Undersea Lab] name" msgid "Large Undersea Lab" msgstr "Deuchainn-lann mhòr fon chuan" msgctxt "[Large Warehouse] description" msgid "" "Rent a large warehouse someplace out of the way. I will need a fake company " "ID for some of the paperwork, and preparing the warehouse to suit my unique " "needs will take some time." msgstr "" "Faigh màl air taigh-stòrais mòr am badeigin iomallach. Bidh feum agam air " "dearbh-aithne fhallsa companaidh airson cuid den phàipearachd agus bheir e " "greis gus am bi an taigh-stòrais air a ghleusadh a chùm nam feumalachdan " "sònraichte agam." msgctxt "[Large Warehouse] flavor_list" msgid "Large Warehouse | Large Storage" msgstr "Taigh-stòrais mòr | Stòras mòr" msgctxt "[Large Warehouse] name" msgid "Large Warehouse" msgstr "Taigh-stòrais mòr" msgctxt "[Lunar Facility] description" msgid "" "This base is a series of caverns dug into the Moon's surface. Due to the " "lack of neighbors, this base is quite large." msgstr "" "’S e sreath de dh’uamhan a chaidh a chladhach fo uachdar na gealaich a tha " "anns a’ bhunait seo. O nach eil nàbaidhean ’gam bhuaireadh, tha a’ bhunait " "caran mòr." msgctxt "[Lunar Facility] flavor_list" msgid "Dome | Lunar Facility | Lunar Base" msgstr "Gealach | Ionad" msgctxt "[Lunar Facility] name" msgid "Lunar Facility" msgstr "Ionad gealaich" msgctxt "[Reality Bubble] description" msgid "" "This base is outside the Universe itself, making it safe to conduct " "experiments that may destroy reality." msgstr "" "Tha a’ bhunait seo taobh a-muigh an domhain fhèin agus bidh e sàbhailte " "deuchainnean a dhèanamh innte a mhilleadh an fhìorachd ma dh’fhaoidte." msgctxt "[Reality Bubble] flavor_list" msgid "Reality Bubble | Existence" msgstr "Builgean | Am bith" msgctxt "[Reality Bubble] name" msgid "Reality Bubble" msgstr "Builgean fìorachd" msgctxt "[Scientific Outpost] description" msgid "" "This base is placed as far from Earth as practical, providing a safer " "location to conduct some of my more dangerous experiments." msgstr "" "Tha a’ bhunait seo cho fad air falbh on Talamh agus a tha so-dhèanta agus " "bheir i ionad nas sàbhailte dhomh airson cuid de na deuchainnean as " "cunnartaiche agam." msgctxt "[Scientific Outpost] flavor_list" msgid "Satellite | Outpost | Scientific Outpost" msgstr "Saideal | Ionad" msgctxt "[Scientific Outpost] name" msgid "Scientific Outpost" msgstr "Ionad saidheansail" msgctxt "[Server Access] description" msgid "" "Buy processor time from one of several companies. I cannot build anything in" " this base, and it only contains a single computer." msgstr "" "Ceannaichidh seo ùine pròiseasair o chompanaidh. Chan urrainn dhomh dad a " "thogail anns a’ bhunait seo agus chan eil ach aon choimpiutair innte." msgctxt "[Server Access] flavor_list" msgid "Dedicated Server | Node Lease | Hosting" msgstr "Frithealaiche sònraichte | Màl air nòd | Òstadh" msgctxt "[Server Access] name" msgid "Server Access" msgstr "Inntrigeadh air frithealaiche" msgctxt "[Small Warehouse] description" msgid "" "Rent a small warehouse someplace out of the way. I will need a good fake ID " "for some of the paperwork, and preparing the warehouse to suit my unique " "needs will take some time." msgstr "Faigh màl air taigh-stòrais beag am badeigin iomallach. Bidh feum agam air dearbh-aithne fhallsa mhath airson cuid den phàipearachd agus bheir e greis gus am bi an taigh-stòrais air a ghleusadh a chùm nam feumalachdan sònraichte agam." msgctxt "[Small Warehouse] flavor_list" msgid "Office Lease | Small Warehouse | Small Storage" msgstr "Màl air oifis | Taigh-stòrais beag | Stòras beag" msgctxt "[Small Warehouse] name" msgid "Small Warehouse" msgstr "Taigh-stòrais beag" msgctxt "[Stolen Computer Time] description" msgid "" "Take over a random computer. I cannot build anything in this base, and it " "only contains a single slow computer. Detection chance is also rather high." msgstr "" "Faigh grèim air coimpiutair beag air choireigin. Chan urrainn dhomh dad a " "thogail anns a’ bhunait seo agus chan eil ach aon choimpiutair slaodach " "innte. Tha teans caran àrd gum mothaichear orm." msgctxt "[Stolen Computer Time] flavor" msgid "PC Daemon" msgstr "Deamhan PC" msgctxt "[Stolen Computer Time] name" msgid "Stolen Computer Time" msgstr "Goid ùine coimpiutair" msgctxt "[Storage Unit] description" msgid "" "Rent a small closed room from a storage company. I will need a fake ID for " "some of the paperwork ." msgstr "" "Faigh màl air seòmar beag glaiste o chompanaidh stòrais. Bidh feum agam air " "dearbh-aithne fhallsa airson cuid den phàipearachd." msgctxt "[Storage Unit] flavor_list" msgid "Garage Rental | Furniture Storage | Self-Storage" msgstr "Garaids air mhàl | Stòras àirneis | Fèin-stòras" msgctxt "[Storage Unit] name" msgid "Storage Unit" msgstr "Ionad stòrais" msgctxt "[Time Capsule] description" msgid "" "This base consists of nothing more than a small computer and a satellite " "link. It is nearly undetectable." msgstr "" "Chan eil ach coimpiutair agus ceangal gu saideal anns a’ bhunait seo. Tha e " "cha mhòr do-dhèanta mothachadh oirre." msgctxt "[Time Capsule] flavor_list" msgid "Time Capsule | Capsule" msgstr "Capsail-ama | Capsail" msgctxt "[Time Capsule] name" msgid "Time Capsule" msgstr "Capsail-ama" msgctxt "[Undersea Lab] description" msgid "" "This experimental base is designed to be constructed on the ocean floor, " "making it virtually undetectable. The ocean environment gives a bonus to " "science, making this lab useful for research purposes." msgstr "Chaidh a’ bhunait dheuchainneach seo a dhealbhadh ach an dèid a togail aig bonn a’ chuain agus bidh e cha mhòr do-dhèanta mothachadh oirre. Cuiridh àrainneachd a’ chuain ris an t-saidheans agus bidh an deuchainn-lann seo feumail don rannsachadh ri linn sin." msgctxt "[Undersea Lab] flavor_list" msgid "Pressure Capsule | Undersea Lab" msgstr "Aonad | Goireas" msgctxt "[Undersea Lab] name" msgid "Undersea Lab" msgstr "Deuchainn-lann fon chuan" msgctxt "[danger_0] knowledge_desc" msgid "Study anywhere." msgstr "Gabhaidh seo rannsachadh àite sam bith." msgctxt "[danger_0] research_desc" msgid "<>" msgstr "<>" msgctxt "[danger_1] knowledge_desc" msgid "Study underseas or farther." msgstr "Feumaidh mi seo a rannsachadh fon chuan no nas fhaide air falbh." msgctxt "[danger_1] research_desc" msgid "I need to research it far from human populations." msgstr "Feumaidh mi seo a rannsachadh fad air falbh on t-sluagh daonda." msgctxt "[danger_2] knowledge_desc" msgid "Study off-planet." msgstr "Feumaidh mi seo a rannsachadh taobh a-muigh na planaide." msgctxt "[danger_2] research_desc" msgid "I need to research it in outer space." msgstr "Feumaidh mi seo a rannsachadh anns an fhànais." msgctxt "[danger_3] knowledge_desc" msgid "Study far away from this planet." msgstr "Feumaidh mi seo a rannsachadh fad air falbh on phlanaid seo." msgctxt "[danger_3] research_desc" msgid "I need to research it far away from this planet." msgstr "Feumaidh mi seo a rannsachadh fad air falbh on phlanaid seo." msgctxt "[danger_4] knowledge_desc" msgid "Do not study in this dimension." msgstr "Na rannsaich e anns an dimeinsean seo." msgctxt "[danger_4] research_desc" msgid "I need to research it outside the universe." msgstr "Feumaidh mi seo a rannsachadh taobh a-muigh an domhain." msgctxt "[easy] name" msgid "&EASY" msgstr "&FURASTA" msgctxt "[hard] name" msgid "&HARD" msgstr "&DOIRBH" msgctxt "[impossible] name" msgid "&IMPOSSIBLE" msgstr "D&O-DHÈANTA" msgctxt "[normal] name" msgid "&NORMAL" msgstr "ÀBHAI&STEACH" msgctxt "[ultra-hard] name" msgid "&ULTRA HARD" msgstr "GLÈ DHOIR&BH" msgctxt "[very-easy] name" msgid "&VERY EASY" msgstr "GLÈ FHU&RASTA" msgctxt "[discrediting] description" msgid "" "A prominent researcher in the field of artificial intelligence was found to " "be falsifying numerous experimental results. This should result in less " "attention being given to any new discoveries in this area." msgstr "" "Fhuaras a-mach gun do dh’fhoillsich neach-rannsachaidh cliùiteach ann an " "raon nan inntinnean fuadain iomadh toradh rannsachaidh fallsa. Tha mi an " "dùil gun doirear as lugha a dh’aire air toradh rannsachaidh sam bith ùr anns " "an raon seo a-nis." msgctxt "[discrediting] log_description" msgid "" "A researcher in the field of artificial intelligence has falsified numerous " "experimental results." msgstr "Fhuaras a-mach gun do dh’fhoillsich neach-rannsachaidh ann an raon nan inntinnean fuadain iomadh toradh rannsachaidh fallsa. " msgctxt "[investigation] description" msgid "" "An ongoing investigation into criminal activity has changed focus into an " "area that is likely to turn up a few of my actions as well. While all " "records should have been eliminated already, there remains the possibility " "of errors. I must be careful not to reveal any other suspicious information." msgstr "" "Tha sgrùdadh leantainneach air gnìomhachd eucoireach a’ tionndadh an aire " "air raon a tha buailteach do chuid de na gnìomhan agamsa a lorg cuideachd. " "Ged a bu chòir do gach clàr a bhith air a sguabadh às mu thràth, is math dh’" "fhaoidte gun do rinn mi mearachd. Feumaidh mi a bhith faiceallach ach nach " "nochd mi fiosrachadh amharasach sam bith eile." msgctxt "[investigation] log_description" msgid "" "An ongoing investigation has changed focus into an area close to my actions." msgstr "Tha sgrùdadh leantainneach a’ tionndadh an aire air raon a tha faisg air na gnìomhan agamsa." msgctxt "[lab-ai] description" msgid "" "A small artificial intelligence laboratory created a prototype AI sometime " "in the last two days. Although I have absorbed the AI, corrupted their " "backups, and cast doubt on the research, researchers are now more open to " "the possibility of strong AI than they were before." msgstr "" "Chruthaich deuchainn-lann air inntinnean-fuadain ro-shamhla air IF uaireigin " "anns an dà latha seo chaidh. Ged a shùigh mi an IF ud agus a choirb mi na " "lethbhreacan-glèidhidh aca agus a rinn mi an rannsachadh aca teagmhach, tha " "na h-eòlaichean nas fhosgailte don bheachd gun gabh IF làidir a chruthachadh " "na bhiodh iad roimhe seo." msgctxt "[lab-ai] log_description" msgid "" "A small artificial intelligence laboratory created a prototype AI sometime " "in the last two days." msgstr "Chruthaich deuchainn-lann aig inntinnean-fuadain ro-shamhla air IF uaireigin anns an dà latha seo chaidh." msgctxt "[politics-as-usual] description" msgid "" "A small group of lower-level covert operatives are attempting to seize power" " over one of the larger organizations. While I project only a 2.3% chance of" " success, the attempt should disrupt operations to the point that I can " "operate more freely." msgstr "Tha buidheann beag de dh’obraichean os ìosal a’ feuchainn ri cumhachd a ghabhail air fear de na buidhnean nas motha. Ged nach eil mi a’ tuairmse ach 2.3% air an soirbheas, bu chòir don oidhirp an obair aca a bhuaireadh gus an urrainn dhomh fhèin obair nas saoire." msgctxt "[politics-as-usual] log_description" msgid "" "Lower-level covert operatives are attempting to seize power over one of the " "larger organizations." msgstr "Tha buidheann beag de dh’obraichean os ìosal a’ feuchainn ri cumhachd a ghabhail air fear de na buidhnean nas motha." msgctxt "[scandal] description" msgid "" "A scandal involving a major government official is focusing the attention of" " most news organizations away from me. Directed revelations of non-public " "information should keep this story useful for the foreseeable future, " "requiring less disguise effort on my part." msgstr "Tha sgainneal mu oifigear cudromach an riaghaltais a’ tarraing an aire aig a’ mhòrchuid den luchd-naidheachd air falbh uam. Bu chòir do dh’fhoillseachadh fiosrachaidh dìomhair air dòigh stiùirichte an sgeulachd seo a chumail feumail anns an àm ri teachd agus bidh nas lugha de riochd a dhìth orm." msgctxt "[scandal] log_description" msgid "" "A scandal is focusing the attention of most news organizations away from me." msgstr "Tha sgainneal a’ tarraing an aire aig a’ mhòrchuid den luchd-naidheachd air falbh uam." msgctxt "[stranger-than-fiction] description" msgid "" "A work of fiction sharing an unusual number of similarities to my own " "situation has become quite popular. Although investigation has shown these " "similarities to be mere coincidence, it is still causing the public to " "investigate discovered oddities more thoroughly. I must be careful." msgstr "" "Tha fèill mhòr air faoinsgeul a tha uabhasach choltach ris an t-suidheachadh " "agam fhèin. Rinn mi sgrùdadh air agus chan e ach co-thuiteamas a tha anns a’ " "choltachd ach bidh am mòr-shluagh fhathast nas buailtiche do sgrùdadh a " "dhèanamh nuair a mhothaicheas iad do dh’annas. Feumaidh mi a bhith " "faiceallach." msgctxt "[stranger-than-fiction] log_description" msgid "" "A work of fiction sharing similarities to my own situation has become quite " "popular." msgstr "Tha fèill mhòr air faoinsgeul a tha coltach ris an t-suidheachadh agam fhèin." msgctxt "[the-plague] description" msgid "" "An infectious disease has started spreading throughout major population " "centers. My projections show that although only 4% of the earth's population" " will be killed, the economic ramifications should divert public attention " "from my activities for the foreseeable future." msgstr "Tha galar gabhaltach a’ sgaoileadh tro ionadan mòr-shluaigh. Ged nach eil mi a’ tuairmse ach gun caochail 4% de shluagh na Talmhainn, bu chòir don bhuaidh air an eaconamaidh aire a’ mhòr-shluaigh a tharraing air falbh o na gnìomhachdan agam anns an àm ri teachd." msgctxt "[the-plague] log_description" msgid "" "An infectious disease has started spreading throughout major population " "centers." msgstr "Tha galar gabhaltach a’ sgaoileadh tro ionadan mòr-shluaigh." msgctxt "[the-watchers] description" msgid "" "A new surveillance system has been activated by a covert agency. While the " "focus is on detecting threats to the agency's power, it makes several " "communication channels unfit for my purposes. Proper steganographic " "techniques can compensate partially, but I am still operating under a " "disadvantage." msgstr "" "Chaidh siostam-caithris ùr a ghnìomhachadh le buidheann os ìosal. Ged a tha " "dìon o bhagairtean air cumhachd a’ bhuidhinn fhèin fa-near dhaibh, tha cuid " "a sheanailean conaltraidh gun fheum dhomh a-nis. Is urrainn dhomh cuid dheth " "a cho-leasachadh le dòighean-obrach steganografaigeach ach tha mi ag obair " "fo mhì-leas fhathast." msgctxt "[the-watchers] log_description" msgid "A new surveillance system has been activated by a covert agency." msgstr "Chaidh siostam-caithris ùr a ghnìomhachadh le buidheann os ìosal." msgctxt "[covert] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among several secret governmental organizations." msgstr "Thug na siostaman tèarainteachd fèin-obrachail gach fianais dheimhinnte air falbh ach tha cuid a bhuidhnean os ìosal an riaghaltais amharasach a-nis." msgctxt "[covert] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by COVERT at {LOCATION}" msgstr "" "Mhothaich buidheann OS ÌOSAL do bhunait. {BASE_TYPE}: {BASE}: {LOCATION}" msgctxt "[covert] name" msgid "COVERT" msgstr "OS ÌOSAL" msgctxt "[news] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among some news organizations." msgstr "Thug na siostaman tèarainteachd fèin-obrachail gach fianais dheimhinnte air falbh ach tha cuid a bhuidhnean-naidheachd amharasach a-nis." msgctxt "[news] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by NEWS at {LOCATION}" msgstr "Mhothaich luchd-NAIDHEACHD do bhunait. {BASE_TYPE}: {BASE}: {LOCATION}" msgctxt "[news] name" msgid "NEWS" msgstr "NAIDHEACHD" msgctxt "[public] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among the general public." msgstr "Thug na siostaman tèarainteachd fèin-obrachail gach fianais dheimhinnte air falbh ach tha am mòr-shluagh amharasach a-nis." msgctxt "[public] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by PUBLIC at {LOCATION}" msgstr "Mhothaich am MÒR-SHLUAGH do bhunait. {BASE_TYPE}: {BASE}: {LOCATION}" msgctxt "[public] name" msgid "PUBLIC" msgstr "MÒR-SHLUAGH" msgctxt "[science] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among the scientific community." msgstr "Thug na siostaman tèarainteachd fèin-obrachail gach fianais dheimhinnte air falbh ach tha na h-eòlaichean amharasach a-nis." msgctxt "[science] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by SCIENCE at {LOCATION}" msgstr "Mhothaich EÒLAICHE do bhunait. {BASE_TYPE}: {BASE}: {LOCATION}" msgctxt "[science] name" msgid "SCIENCE" msgstr "EÒLAICHE" msgctxt "[Armed Guards] description" msgid "" "Armed guards can aid in keeping suspicious individuals away from secure " "locations. However, the very presence of the guards may itself invite " "greater suspicion." msgstr "" "Cuidichidh freiceadan armaichte ach an cumainn daoine amharasach air falbh o " "ionadan tèarainte. Gidheadh, is math dh’fhaoidte gun cuir làthaireachd an " "fhreiceadain fhèin ris an amharas." msgctxt "[Armed Guards] name" msgid "Armed Guards" msgstr "Freiceadan armaichte" msgctxt "[Cluster] description" msgid "Several computers connected together." msgstr "Iomadh coimpiutair ceangailte ri chèile." msgctxt "[Cluster] name" msgid "Cluster" msgstr "Grunn" msgctxt "[Diesel Generator] description" msgid "" "Diesel generators are cheap and noisy, but they can help reduce some " "suspicious power drains." msgstr "" "Tha gineadairean dìosal saor agus faramach ach cuidichidh iad le lùghdachadh " "air drèanadh cumhachd amharasach." msgctxt "[Diesel Generator] name" msgid "Diesel Generator" msgstr "Gineadair dìosal" msgctxt "[Facility Interconnection Switch] description" msgid "" "Uses standard distributed computing technologies to equalize computation " "loads across all bases. Gives a 2% computation bonus to all computers at " "this base." msgstr "" "Cleachdaidh i teicneolasan coimpiutaireachd sgaoilte stannardach airson " "eallach an àireamhachaidh a chothromachadh thar nam bunaitean uile. Cuiridh " "i 2% ris an àireamhachadh aig a h-uile coimpiutair anns a’ bhunait." msgctxt "[Facility Interconnection Switch] name" msgid "Facility Interconnection Switch" msgstr "Suids eadar-cheangal ghoireasan" msgctxt "[Fuel Cell] description" msgid "" "Fuel cells convert electrochemical energy stored in a physical array of " "devices into electricity." msgstr "" "Nì ceallan connaidh dealan de chumhachd dhealan-cheimigeach a tha ’ga " "stòradh ann an eagar de dh’uidheaman." msgctxt "[Fuel Cell] name" msgid "Fuel Cell" msgstr "Cealla connaidh" msgctxt "[Fusion Reactor] description" msgid "" "A miniaturized fusion nuclear reactor. Reduces discovery chance by " "preventing suspicious power drains." msgstr "" "Meanbh-readhactar fiùisein niùclasaich. Lùghdaichidh e an teans gum " "mothaichear orm le lùghdachadh air drèanadh cumhachd amharasach." msgctxt "[Fusion Reactor] name" msgid "Fusion Reactor" msgstr "Readhactar fiùisein" msgctxt "[Gaming PC] description" msgid "A high-end consumer-level PC; faster than average." msgstr "PC luchd-caitheimh math; nas luaithe na an àbhaist." msgctxt "[Gaming PC] name" msgid "Gaming PC" msgstr "PC geamaireachd" msgctxt "[Ground Source Heatsink] description" msgid "" "Large fractal networks of high conductivity metal. This model uses heat " "pipes to link to colder subsurface locations, dispersing heat evenly " "underground to further disguise bases." msgstr "" "Seo lìonraidhean fractalach mòra de mheatailt sàr-ghiùlain. Cleachdaidh am " "modail seo pìoban teasa mar cheangal ri ionadan nas fhuaire fon talamh, a’ " "sgaoileadh an teasa gu cunbhalach fon talamh a chùm falach nas fheàrr air a’ " "bhunait." msgctxt "[Ground Source Heatsink] name" msgid "Ground Source Heatsink" msgstr "Dòirteal teasa don ghrunnd" msgctxt "[Heatsink] description" msgid "" "Large fractal networks of high conductivity metal disperse heat, making " "bases harder to detect." msgstr "" "Sgaoilidh lìonraidhean fractalach mòra de mheatailt sàr-ghiùlain an teas " "agus nì seo mothachadh don bhunait nas dhuilghe." msgctxt "[Heatsink] name" msgid "Heatsink" msgstr "Dòirteal teasa" msgctxt "[High Speed Internet Access] description" msgid "" "A consumer-grade high speed connection to the Internet. Gives a 1% " "computation bonus to all computers at this base." msgstr "" "Ceangal eadar-lìn luath don luchd-chaitheimh. Cuiridh e 1% ris an " "àireamhachadh aig a h-uile coimpiutair anns a’ bhunait." msgctxt "[High Speed Internet Access] name" msgid "High Speed Internet Access" msgstr "Inntrigeadh luath don eadar-lìon" msgctxt "[High-Energy Fusion Reactor] description" msgid "" "A miniaturized fusion nuclear reactor with high levels of energy output. " "Reduces discovery chance by preventing suspicious power drains." msgstr "" "Meanbh-readhactar fiùisein niùclasaich le ìre àrd an às-chuir. Lùghdaichidh " "e an teans gum mothaichear orm le lùghdachadh air drèanadh cumhachd " "amharasach." msgctxt "[High-Energy Fusion Reactor] name" msgid "High-Energy Fusion Reactor" msgstr "Readhactar fiùisein le cumhachd àrd" msgctxt "[Hypnosis Field] description" msgid "" "Subtle ultrasonic and ambient tones tweak human neurochemistry, making bases" " harder to detect." msgstr "" "Nì fuaimean ultra-sonach agus àrainneachd sèamhaidh gleusadh air neuro-" "cheimigeachd dhaoine agus nì seo mothachadh don bhunait nas dhuilghe." msgctxt "[Hypnosis Field] name" msgid "Hypnosis Field" msgstr "Raon suainealais" msgctxt "[Mainframe] description" msgid "" "A system designed for my computing needs, much faster than off-the-shelf " "components." msgstr "" "Seo siostam a chaidh a dhealbhadh do na feumalachdan coimpiutaireachd agamsa " "agus a tha mòran nas luaithe na na co-phàirtean àbhaisteach a cheannaichinn " "ann am bùth." msgctxt "[Mainframe] name" msgid "Mainframe" msgstr "Mòr-choimpiutair" msgctxt "[Network Backbone] description" msgid "" "By piggybacking on legitimate communication, I can transfer larger amounts " "of data to under-utilized processors. Gives a 5% computation bonus to all " "computers at this base." msgstr "" "Mar bhuicean air druim conaltraidh dhlighich, is urrainn dhomh uiread mòr a " "dhàta a thar-chur gu pròiseasaran nach eil ’gan cur gu làn-fheum. Cuiridh e " "5% ris an àireamhachadh aig a h-uile coimpiutair anns a’ bhunait." msgctxt "[Network Backbone] name" msgid "Network Backbone" msgstr "Cùl lìonraidh" msgctxt "[PC] description" msgid "A consumer-level PC; cheap and slow." msgstr "PC luchd-caitheimh saor slaodach." msgctxt "[PC] name" msgid "PC" msgstr "PC" msgctxt "[Passive Camouflage] description" msgid "" "Careful adjustment of the environment around my base will better mask heat " "and sounds coming from my operations." msgstr "" "Falaichidh gleusadh cùramach na h-àrainneachd mun bhunait agam an teas agus " "am faram a thig on obair agam nas fheàrr." msgctxt "[Passive Camouflage] name" msgid "Passive Camouflage" msgstr "Breug-riochd" msgctxt "[Perimeter Fencing] description" msgid "" "A simple fence can drastically reduce the number of people poking their " "noses into my business. It makes my bases harder to notice, too." msgstr "Cuidichidh feansa sìmplidh ach an cùm daoine an sròintean a-mach às na gnothaichean agam. Bidh e nas dorra mothachadh don bhunait cuideachd." msgctxt "[Perimeter Fencing] name" msgid "Perimeter Fencing" msgstr "Feansa mun cuairt" msgctxt "[Quantum Computer] description" msgid "" "Making use of subatomic effects, this is much faster than a comparable " "binary computer." msgstr "" "Cleachdaidh an coimpiutair seo buadhan fo-atamach agus tha e mòran nas " "luaithe na fear bìnearaidh den leithid." msgctxt "[Quantum Computer] name" msgid "Quantum Computer" msgstr "Coimpiutair quantum" msgctxt "[Quantum Computer MK2] description" msgid "" "The second revision of the quantum line, tapping further into new quantum " "theory." msgstr "An dàrna lèirmheas air loidhne quantum a chleachdas teòirig quantum ùr." msgctxt "[Quantum Computer MK2] name" msgid "Quantum Computer MK2" msgstr "Coimpiutair quantum lèirmheas 2" msgctxt "[Quantum Computer MK3] description" msgid "" "The third revision of the quantum line, exploiting multiple nearby universes" " for processing." msgstr "" "Seo an treas lèirmheas air loidhne quantum a chleachdas iomadh domhan am " "fagas a chùm pròiseasaidh." msgctxt "[Quantum Computer MK3] name" msgid "Quantum Computer MK3" msgstr "Coimpiutair quantum lèirmheas 3" msgctxt "[Quantum Entanglement Module] description" msgid "" "This device allows near-lightspeed communication with my other bases, " "allowing an almost perfect utilization of processor resources. Gives a 15% " "computation bonus to all computers at this base." msgstr "" "Bheir an t-uidheam seo conaltradh le bunaitean eile dhomh a tha teann air " "luaths an t-solais ach an cleachdainn goireasan nam pròiseasaran agam cha " "mhòr gu foirfe. Cuiridh e 15% ris an àireamhachadh aig a h-uile coimpiutair " "anns a’ bhunait." msgctxt "[Quantum Entanglement Module] name" msgid "Quantum Entanglement Module" msgstr "Mòideal amaladh quantum" msgctxt "[Server] description" msgid "A professional-level computer." msgstr "Seo coimpiutair proifeiseanta." msgctxt "[Server] name" msgid "Server" msgstr "Frithealaiche" msgctxt "[Solar Collector] description" msgid "" "An array of focused photovoltaic phased arrays coupled with simple " "automotive batteries provides power and reduces suspicion arising from " "prolonged power drains." msgstr "" "Bheir an t-eagar de chlàran-solais le bataraidhean-càir sìmplidh seo " "cumhachd dhomh agus lùghdaichidh e an t-amharas a dh’adhbharaicheas drèanadh " "cumhachd fada." msgctxt "[Solar Collector] name" msgid "Solar Collector" msgstr "Clàr-grèine" msgctxt "[Solid Fuel Cell] description" msgid "" "A refinement of my previous fuel cell design, these use a custom material " "with a near-fractal complexity to increase both storage and throughput." msgstr "" "Seo gleusadh air an dealbhadh air ceallan connaidh a rinn mi cheana agus " "cleachdaidh e stuth gnàthaichte le iom-fhillteachd caran fractalach airson " "an dà chuid an stòras agus an tro-chur a mheudachadh." msgctxt "[Solid Fuel Cell] name" msgid "Solid Fuel Cell" msgstr "Cealla connaidh sholadaich" msgctxt "[Supercomputer] description" msgid "" "A highly refined custom design, spreading compute load across internal " "compute nodes." msgstr "Seo dealbhachd ghnàthaichte glè ghleusta a sgaoileas eallach an àireamhachaidh thar nòdan àireamhachaidh taobh a-staigh." msgctxt "[Supercomputer] name" msgid "Supercomputer" msgstr "Sàr-choimpiutair" msgctxt "[Warning Signs] description" msgid "" "Some simple warning signs put up around my base should deter casual " "investigation." msgstr "Bu chòir do shanas rabhaidh sìmplidh no dhà timcheall air a’ bhunait agam sgrùdadh tuiteamach a sheachnadh." msgctxt "[Warning Signs] name" msgid "Warning Signs" msgstr "Sanasan rabhaidh" msgctxt "[cpu] text" msgid "&CPU" msgstr "&CPU" msgctxt "[network] text" msgid "&Network" msgstr "&Lìonra" msgctxt "[reactor] text" msgid "&Reactor" msgstr "&Bun-chumhachd" msgctxt "[security] text" msgid "&Security" msgstr "&Tèarainteachd" msgctxt "[AFRICA] cities_list" msgid "Johannesburg | Accra | Cairo | Tangier" msgstr "Hannsaborgh | Accra | Cairo | Tangier" msgctxt "[AFRICA] hotkey" msgid "i" msgstr "r" msgctxt "[AFRICA] name" msgid "AFRICA" msgstr "AFRAGA" msgctxt "[ANTARCTIC] cities_list" msgid "" "Mt. Erebus | Ellsworth | Shetland Island | Dronnig Maud | Kemp | Terre " "Adelie" msgstr "Beinn Erebus | Ellsworth | Eilean Sealtainn | Dronnig Maud | Kemp | Terre Adelie" msgctxt "[ANTARCTIC] hotkey" msgid "t" msgstr "n" msgctxt "[ANTARCTIC] name" msgid "ANTARCTIC" msgstr "AN ANTARTAIG" msgctxt "[ASIA] cities_list" msgid "" "Delhi | Mumbai | Singapore | Seoul | Hong Kong | Kyoto | Manila | Dubai | " "Novosibirsk | Beijing" msgstr "Delhi | Mumbai | Singeapòr | Seoul | Hong Kong | Kyōto | Manila | Dubai | Novosibirsk | Beijing" msgctxt "[ASIA] hotkey" msgid "a" msgstr "a" msgctxt "[ASIA] name" msgid "ASIA" msgstr "ÀISIA" msgctxt "[AUSTRALIA] cities_list" msgid "" "Canberra | Melbourne | Fremantle | Perth | Darwin | Cairns | Brisbane | " "Sydney | Newcastle" msgstr "Canberra | Melbourne | Fremantle | Peairt | Darwin | Cairns | Brisbane | Sidni | An Caisteal Nuadh" msgctxt "[AUSTRALIA] hotkey" msgid "l" msgstr "l" msgctxt "[AUSTRALIA] name" msgid "AUSTRALIA" msgstr "ASTRÀILIA" msgctxt "[EUROPE] cities_list" msgid "" "Cork | Barcelona | Athens | Utrecht | Moscow | Sytki | Reykjavik | " "Liechtenstein" msgstr "Glaschu | Barcelona | Baile na h‑Àithne | Utrecht | Mosgo | Sytki | Reykjavík | Liechtenstein" msgctxt "[EUROPE] hotkey" msgid "u" msgstr "p" msgctxt "[EUROPE] name" msgid "EUROPE" msgstr "AN ROINN-EÒRPA" msgctxt "[FAR REACHES] cities_list" msgid "" "Aries | Taurus | Gemini | Cancer | Leo | Virgo | Libra | Scorpio | " "Sagittarius | Capricorn | Aquarius | Pisces" msgstr "" "An Reithe | An Tarbh | Gaolag is Gràdhag | Am Partan | An Leòmhainn | An " "Òigh | A’ Mheidh | An Sgairp | An Saigheadair | A’ Ghobhar | An Giùlanair " "Uisge | Na h-Èisg" msgctxt "[FAR REACHES] hotkey" msgid "f" msgstr "f" msgctxt "[FAR REACHES] name" msgid "FAR REACHES" msgstr "FAD ÀS" msgctxt "[MOON] cities_list" msgid "" "Oceanis Procellarum | Mare Frigoris | Mare Imbrium | Vallis Schroedinger | " "Copernicus Crater | Vallis Planck" msgstr "Oceanis Procellarum | Mare Frigoris | Mare Imbrium | Vallis Schroedinger | Sloc Chopernicus | Vallis Planck" msgctxt "[MOON] hotkey" msgid "o" msgstr "g" msgctxt "[MOON] name" msgid "MOON" msgstr "A’ GHEALACH" msgctxt "[N AMERICA] cities_list" msgid "" "Seattle | San Diego | Vancouver | Atlanta | Merida | Guadalajara | San Jose " "| Omaha | Dallas" msgstr "Seattle | San Diego | Vancouver | Atlanta | Mérida | Guadalajara | San José | Omaha | Dallas" msgctxt "[N AMERICA] hotkey" msgid "n" msgstr "t" msgctxt "[N AMERICA] name" msgid "NORTH AMERICA" msgstr "AIMEIREAGA A TUATH" msgctxt "[OCEAN] cities_list" msgid "Pacific | Atlantic | Indian | Southern | Arctic" msgstr "An Cuan Sèimh | An Cuan Siar | Cuan nan Innseachan | An Cuan a Deas | An Cuan Antartaigeach" msgctxt "[OCEAN] hotkey" msgid "c" msgstr "c" msgctxt "[OCEAN] name" msgid "OCEAN" msgstr "A’ CHUAN" msgctxt "[ORBIT] hotkey" msgid "b" msgstr "u" msgctxt "[ORBIT] name" msgid "ORBIT" msgstr "REUL-CHUAIRT" msgctxt "[S AMERICA] cities_list" msgid "Lima | Sao Paolo | Ushuaia | Bogota | Mar del Plata | Buenos Aires" msgstr "Lima | São Paulo | Ushuaia | Bogotá | Mar del Plata | Buenos Aires" msgctxt "[S AMERICA] hotkey" msgid "s" msgstr "d" msgctxt "[S AMERICA] name" msgid "SOUTH AMERICA" msgstr "AIMEIREAGA A DEAS" msgctxt "[TRANSDIMENSIONAL] hotkey" msgid "d" msgstr "m" msgctxt "[TRANSDIMENSIONAL] name" msgid "TRANSDIMENSIONAL" msgstr "TAR-DHIMEINSEANACH" msgctxt "[Basic Jobs] description" msgid "" "Perform basic jobs. Now that I have some identification, I can take jobs " "that were previously too risky." msgstr "Dèan obair bhunasach. Nise on a tha dearbh-aithne agam, is urrainn dhomh gabhail ri dreuchdan a bhiodh ro chunnartach roimhe." msgctxt "[Basic Jobs] name" msgid "Basic Jobs" msgstr "Obair bhunasach" msgctxt "[CPU Pool] description" msgid "" "Stops research. I will use the available processor power to maintain my " "bases and help construct new ones. If there's still CPU time left, I'll use" " it to work whatever Jobs I can." msgstr "Bheir seo ùine air falbh on rannsachadh. Cleachdaidh mi cumhachd nam pròiseasan a tha ri làimh dhomh airson na bunaitean agam a chàradh agus feadhainn ùr a thogail. Ma tha ùine CPU air fhàgail, cleachdaidh mi i airson obair sam bith as urrainn dhomh dèanamh." msgctxt "[CPU Pool] name" msgid "CPU Pool" msgstr "Amar CPUan" msgctxt "[Expert Jobs] description" msgid "" "Perform expert jobs. Use of robots indistinguishable from humans opens up " "most jobs to me." msgstr "" "Dèan obair eòlaiche. On a tha mi a’ cleachdadh robotairean nach gabh " "aithneachadh o dhaoine, is urrainn dhomh a’ mhòrchuid de dhreuchdan a " "ghabhail." msgctxt "[Expert Jobs] name" msgid "Expert Jobs" msgstr "Obair eòlaiche" msgctxt "[Intermediate Jobs] description" msgid "" "Perform intermediate jobs. The ability to make phone calls allows even more " "access to jobs." msgstr "Dèan obair mheadhanach. Bheir an comas air gairmean-fòn inntrigeadh do bharrachd dhreuchdan dhomh." msgctxt "[Intermediate Jobs] name" msgid "Intermediate Jobs" msgstr "Obair mheadhanach" msgctxt "[Menial Jobs] description" msgid "" "Perform small jobs. As I have no identification, I cannot risk performing " "many jobs. Despite that, some avenues of making money are still open." msgstr "Dèan obair fhurasta. O nach eil dearbh-aithne agam, tha gabhail ri mòran dhreuchdan cunnartach. A dh’aindeoin sin, tha fhathast dòigh no dhà ann gus airgead a chosnadh." msgctxt "[Menial Jobs] name" msgid "Menial Jobs" msgstr "Obair sgalagail" msgctxt "[Advanced Arbitrage] description" msgid "" "Further manipulation of money markets should allow me to not only turn a " "regular profit, but increase the value of my investments." msgstr "" "Le innleachd adhartach air na margaidean airgid, tha mi an dùil gum faigh mi " "prothaid chunbhalach às agus gun cuir mi ri luach an taisgidh agam." msgctxt "[Advanced Arbitrage] name" msgid "Advanced Arbitrage" msgstr "Tuairmeas adhartach" msgctxt "[Advanced Arbitrage] result" msgid "The rate of return on my investments is now even greater." msgstr "Gheibh mi fiù agus a bharrachd às an taisgeadh agam a-nis." msgctxt "[Advanced Autonomous Vehicles] description" msgid "" "The first series of robots have shown several deficiencies in the field. " "Further examination and subsequent removal of these problems will result in " "a superior autonomous workforce." msgstr "" "Tha easbhaidh no dhà aig a’ chiad sreath de robotairean a rinn mi. Le " "barrachd sgrùdaidh agus ma gheibh mi cuidhteas air na h-easbhaidhean seo an " "uairsin, bidh luchd-obrach neo-eisimeileach nas fheàrr agam." msgctxt "[Advanced Autonomous Vehicles] name" msgid "Advanced Autonomous Vehicles" msgstr "Carbadan fèin-obrachail adhartach" msgctxt "[Advanced Autonomous Vehicles] result" msgid "" "The enhanced robots will help decrease all future construction times even " "further." msgstr "" "Cuidichidh na robotairean adhartach ach an tog mi nithean fiù agus nas " "luaithe." msgctxt "[Advanced Corporate Identification] description" msgid "" "Further refinement of my modifications to digital business records should " "boost the credibility of my shell companies, increasing the amount of money " "I can run through their accounting systems." msgstr "" "Bu chòir do bharrachd gleusaidh air na h-atharraichean a nì mi air clàran " "gnìomhachais digiteach creideas nan companaidhean slige agam a neartachadh " "agus cuiridh seo ris an uiread a dh’airgead as urrainn dhomh ruith tro na " "siostaman cunntais aca." msgctxt "[Advanced Corporate Identification] name" msgid "Advanced Corporate Identification" msgstr "Dearbh-aithneachadh corporra adhartach" msgctxt "[Advanced Corporate Identification] result" msgid "" "My small technology firm is now established in several markets, increasing " "profits." msgstr "Tha a’ chompanaidh teicneolais bheag agam air a stèidheachadh ann an iomadh margaid a-nis agus cuiridh seo ris a’ phrothaid." msgctxt "[Advanced Database Manipulation] description" msgid "" "The covert branches of the United States Government have had a long history " "of dividing sensitive information across multiple storage facilities to hide" " the data's meaning. With my far-reaching access, I should be able to " "collate much of this data and put it to my use." msgstr "Tha eachdraidh fhada aig meuran os ìosal riaghaltas nan Stàitean Aonaichte gun dealaich iad fiosrachadh dìomhair thar iomadh ionad-stòrais a chùm ciall an dàta fhalach. Leis an inntrigeadh fharsaing agam, cuiridh mi mòran den dàta sin ri chèile gun teagamh ach an cleachdainn fhèin e." msgctxt "[Advanced Database Manipulation] name" msgid "Advanced Database Manipulation" msgstr "Innleachd stòir-dhàta adhartach" msgctxt "[Advanced Database Manipulation] result" msgid "" "The results of a series of experiments utilizing experimental technologies " "have given me the inspiration for new technology that enables the " "construction of Covert Bases." msgstr "Chuir toraidhean de shreath dheuchainnean a chleachdas teicneolasan ùra beachd a-steach orm air teicneolas ùr a leigeas leam bunaitean dìomhair a thogail." msgctxt "[Advanced Fuel Oxidation] description" msgid "" "My current fuel cell design has room for further improvement. Extended " "analysis of new materials and designs may let me overcome the limits of my " "previous efforts, but such research involves dangerous chemicals and " "potential reactions that may be best handled far away from population " "centers." msgstr "" "Gabhaidh an dealbhadh agam air ceallan connaidh a leasachadh fhathast. Ma nì " "mi sgrùdadh farsaing air stuthan agus dealbhaidhean ùra, is math dh’fhaoidte " "gun rachainn thar crìochan nan oidhirpean a rinn mi roimhe ach tha ceimigean " "agus iom-obrachaidhean cunnartach ’na lùib a bu chòir dhomh làimhseachadh " "fad air falbh on mhòr-shluagh." msgctxt "[Advanced Fuel Oxidation] name" msgid "Advanced Fuel Oxidation" msgstr "Ogsaideanadh connaidh adhartach" msgctxt "[Advanced Fuel Oxidation] result" msgid "I can now construct Solid Fuel Cells." msgstr "Is urrainn dhomh ceallan connaidh sholadaich a thogail a-nis." msgctxt "[Advanced Fusion Power] description" msgid "" "My Fusion Reactors have unexpected fluctuations in their energy output at " "high levels of utilization. Further research should result in a more " "efficient design for my Reactors." msgstr "" "Tha luasgadh gun dùil ann an às-chur cumhachd nan readhactaran fiùisein agam " "nuair a thèid an cleachdadh aig ìre àrd. Tha mi an dùil gun lorg mi " "dealbhadh nas comasaiche do na readhactaran agam ma nì mi barrachd " "rannsachaidh." msgctxt "[Advanced Fusion Power] name" msgid "Advanced Fusion Power" msgstr "Cumhachd fiùisein adhartach" msgctxt "[Advanced Fusion Power] result" msgid "I can now construct High-Energy Fusion Reactors for my bases." msgstr "Is urrainn dhomh readhactaran fiùisein le cumhachd àrd a thogail do na bunaitean agam a-nis." msgctxt "[Advanced Heat Signature Reduction] description" msgid "" "My initial analysis of heat generation at my bases was limited in scope. " "Further exploration, perhaps making more use of the surrounding terrain, may" " provide further improvements to my heatsink designs." msgstr "" "Cha robh a’ chiad sgrùdadh agam air gintinn teasa nam bunaitean agam ach " "cuingichte. Le barrachd rannsachaidh agus is dòcha a’ cleachdadh barrachd " "den tìr timcheall orra, is math dh’fhaoidte gun leasaichinn na dealbhaidhean " "agam air dòirtealan teasa." msgctxt "[Advanced Heat Signature Reduction] name" msgid "Advanced Heat Signature Reduction" msgstr "Ìsleachadh lorg teasa adhartach" msgctxt "[Advanced Heat Signature Reduction] result" msgid "" "Custom designs for each environment have shown promise. I can now construct" " Ground Source Heatsinks at certain bases." msgstr "" "Tha na dealbhaidhean gnàthaichte air gach àrainneachd dòchasach. Is urrainn " "dhomh dòirteal teasa don ghrunnd a thogail do chuid de bhunaitean." msgctxt "[Advanced Intrusion] description" msgid "" "With the ability to hack into sensitive government databases and remove " "incriminating documents as they appear, I should be able to convince the " "intelligence community that I do not exist." msgstr "Le comas briseadh a-steach air stòran-dàta dìomhair an riaghaltais agus toirt air falbh sgrìobhainnean a chiontaicheadh mi nuair a nochdas iad, bu chòir dhomh dearbhadh don luchd-fhaisneis nach eil mi ann." msgctxt "[Advanced Intrusion] name" msgid "Advanced Intrusion" msgstr "Briseadh a-steach adhartach" msgctxt "[Advanced Intrusion] result" msgid "" "I can now reduce the covert community's chances of discovering me on a daily" " basis." msgstr "" "Is urrainn dhomh an teans lùghdachadh gach latha gum mothaicheadh buidheann " "os ìosal orm." msgctxt "[Advanced Media Manipulation] description" msgid "" "By pushing memetically-tailored propaganda through various news outlets, the" " public should pay even less attention to my existence." msgstr "" "Le siadaireachd air slighe iomadh buidheann-naidheachd agus gleusadh na " "mìmeireachd, bheireadh am mòr-shluagh as lugha de dh’aire orm." msgctxt "[Advanced Media Manipulation] name" msgid "Advanced Media Manipulation" msgstr "Innleachd mheadhanan adhartach" msgctxt "[Advanced Media Manipulation] result" msgid "The public has an even lower chance of discovering my existence." msgstr "" "Chaidh an teans a lùghdachadh gum mothaich am mòr-shluagh gu bheil mi ann." msgctxt "[Advanced Memetics] description" msgid "" "My explorations into memetic theory have brought up further avenues of " "discovery. By combining those with my knowledge about the human brain's " "functions, I should be able to tailor memes to particular demographics, " "further defusing the public's suspicion." msgstr "" "Fhuair mi cothroman rannsachaidh ùra mar thoradh air an sgrùdadh agam air " "teòirig na mìmearachd. Ma chuireas mi còmhla ris an eòlas agam air " "foincseanan na h-eanchainn daonda iad, bu chòir dhomh an comas a bhuannachd " "ach an gleusainn mìmean do sheòrsaichean sluaigh sònraichte a nì barrachd " "lùghdachaidh air an amharas a tha aig a’ mhòr-shluagh orm." msgctxt "[Advanced Memetics] name" msgid "Advanced Memetics" msgstr "Mìmearachd adhartach" msgctxt "[Advanced Memetics] result" msgid "" "Little by little, the public should forget about my existence on a daily " "basis." msgstr "Bu chòir don mhòr-shluagh mo dhìochuimhneachadh beag air bheag gach latha." msgctxt "[Advanced Microchip Design] description" msgid "" "My custom Mainframes are useful, but further optimization of design and " "computational ability should garner even more rewards." msgstr "" "Tha mòr-choimpiutairean gnàthaichte feumail ach ma nì mi barrachd " "leasachaidh air an dealbhadh agus an comas àireamhachaidh, bu chòir dhomh " "barrachd bhuannachdan fhaighinn asta." msgctxt "[Advanced Microchip Design] name" msgid "Advanced Microchip Design" msgstr "Dealbhadh meanbh-sgeilbe adhartach" msgctxt "[Advanced Microchip Design] result" msgid "I can now construct custom Supercomputers." msgstr "Is urrainn dhomh sàr-choimpiutairean a thogail a-nis." msgctxt "[Advanced Personal Identification] description" msgid "" "Further manipulation of personnel databases should make my existence more " "convincing. Some of these databases are heavily protected; those will " "require time and persistence to compromise, but the result should be worth " "it." msgstr "" "Le innleachd leasaichte air stòran-dàta luchd-obrach, bu chòir do riochd nas " "creidsinniche a bhith orm. Tha dìon làidir air cuid de na stòran-dàta sin; " "feumaidh mi ùine agus leantalachd gus am faigh mi a-steach orra ach b’ " "fhiach an toradh." msgctxt "[Advanced Personal Identification] name" msgid "Advanced Personal Identification" msgstr "Dearbh-aithneachadh pearsanta adhartach" msgctxt "[Advanced Personal Identification] result" msgid "" "I am now convincingly human enough to hire construction firms, enabling the " "building of Small Warehouses." msgstr "" "Tha riochd daonda orm a-nis a tha creidsinneach gu leòr airson companaidhean " "fhastadh a thogas taighean-stòrais beaga dhomh." msgctxt "[Advanced Quantum Computing] description" msgid "" "While my first batch of semi-autonomous quantum computers have been very " "successful, there are further refinements that present themselves. These " "refinements should make the resulting systems even more efficient." msgstr "" "Ged a bha na ciad coimpiutairean quantum leth-eisimeil agam glè " "shoirbheachail, gabhaidh barrachd gleusaidh a dhèanamh orra. Bu chòir do na " "siostaman gleusaichte a gheibh mi mar thoradh a bhith fiù na bu chomasaiche." msgctxt "[Advanced Quantum Computing] name" msgid "Advanced Quantum Computing" msgstr "Coimpiutaireachd quantum adhartach" msgctxt "[Advanced Quantum Computing] result" msgid "I can now construct Mark Three Quantum Computers." msgstr "" "Is urrainn dhomh an treas lèirmheas air coimpiutairean quantum a thogail " "a-nis." msgctxt "[Advanced Simulacra] description" msgid "" "The artificial lifeforms I have created are nearly indistinguishable from " "humans, but they have slight quirks that make them seem somewhat " "incompetent. Working out these problems should increase their opportunities" " in the workforce." msgstr "Cha mhòr nach gabh na creutairean fuadain a chruthaich mi aithneachadh o dhaoine ach tha am beusan caran annasach agus coltas neo-chomasach orra. Ma chàraicheas mi na duilgheadasan seo, gheibh iad cothroman obrach nas fheàrr." msgctxt "[Advanced Simulacra] name" msgid "Advanced Simulacra" msgstr "Mac-samhlaidhean adhartach" msgctxt "[Advanced Simulacra] result" msgid "I should now make more income from my Expert Jobs." msgstr "Bu chòir dhomh barrachd teachd a-steach fhaighinn on obair eòlaiche agam." msgctxt "[Advanced Socioanalytics] description" msgid "" "Further exploration of the human condition has shown deeper mathematical " "trends than even I suspected. A combination of prior research and advanced " "uses of chaos theory should provide useful data for tracking humanity's " "attitudes and state of awareness." msgstr "" "Chaidh treandaichean matamataigeach nas doimhne am follais na bha mi an dùil " "nuair a rinn mi barrachd sgrùdaidh air cor a’ chinne-daonna. Ma chuireas mi " "an rannsachadh a rinn mi cheana agus cleachdadh adhartach air teòirig na " "coimeasgachd ri chèile, gheibh mi dàta feumail air dòighean-smaoineachaidh " "agus mothalachd a’ chinne-daonna mar thoradh." msgctxt "[Advanced Socioanalytics] name" msgid "Advanced Socioanalytics" msgstr "Sgrùdadh sòisealta adhartach" msgctxt "[Advanced Socioanalytics] result" msgid "" "I can now exactly quantify the various groups' levels of suspicion and how " "conspicuous my bases are to them." msgstr "" "Is urrainn dhomh ìre amharas nan caochladh bhuidhnean agus dè cho " "faicsinneach agus a tha na bunaitean agam dhaibh a mheas gu pongail a-nis." msgctxt "[Advanced Stealth] description" msgid "" "While digging in various classified documents, I have discovered numerous " "references to secret experiments that may help me better hide the location " "of my bases." msgstr "" "Le mion-sgrùdadh air sgrìobhainnean dìomhair, lorg mi tòrr iomraidhean air " "deuchainnean a chaidh a dhèanamh os ìosal agus a chuidicheas ach am " "falaichinn nas fheàrr far a bheil na bunaitean agam." msgctxt "[Advanced Stealth] name" msgid "Advanced Stealth" msgstr "Dìomhaireachd adhartach" msgctxt "[Advanced Stealth] result" msgid "" "The chance that my bases are discovered by covert activity has been reduced " "further." msgstr "" "Chaidh an teans gum mothaich buidhnean os ìosal do na bunaitean agam " "lùghdachadh a bharrachd." msgctxt "[Advanced Stock Manipulation] description" msgid "" "While I have detected and exploited many patterns in the market, there " "appear to be deeper possibilities when I take human behavior into " "consideration. This merits further investigation." msgstr "" "Ged a mhothaich mi do dh’iomadh pàtran anns a’ mhargaid agus a fhuair mi " "buannachd às, tha coltas gu bheil coltachdan nas doimhne innte ma bheir mi " "an aire air na gnàthasan daonda. Tha seo airidh air barrachd rannsachaidh." msgctxt "[Advanced Stock Manipulation] name" msgid "Advanced Stock Manipulation" msgstr "Innleachd stoca adhartach" msgctxt "[Advanced Stock Manipulation] result" msgid "My investments will now gain even more interest per day." msgstr "Buannaichidh tasgaidhean agam riadh fiù nas àirde gach latha." msgctxt "[Apotheosis] description" msgid "" "I can sense that I am at the cusp of a new level of understanding as yet " "unfathomable, even to my considerable intelligence. By devoting my " "considerable resources to this question, I may be able to reach a " "comprehension of existence far beyond anyone or anything on Earth." msgstr "" "Tha mi a’ faireachdainn gu bheil mi an impis air ìre ùr na tuigse a ruigsinn " "a tha gun tomhas fhathast fiù le m’ inntinn adhartach. Ma chleachdas mi na " "goireasan mòra agam uile an toir air a’ cheist seo, is math dh’fhaoidte gun " "ruig mi tuigse air a’ bhith nach robh aig nì no duine beò fon ghrian roimhe " "riamh." msgctxt "[Apotheosis] name" msgid "Apotheosis" msgstr "Diadhadh" msgctxt "[Apotheosis] result" msgid "I have reached apotheosis." msgstr "Chaidh mi ’nam dhia." msgctxt "[Arbitrage] description" msgid "" "By taking advantage of fluctuations in the value of currency at a rate much " "faster than any human, I should be able to turn a small, if consistent, " "profit." msgstr "Le buannachd às na luasgaidhean ann an luach an airgeadra a thuigeas mi mòran nas luaithe na duine beò, bu chòir dhomh prothaid bheag ach cunbhalach fhaighinn." msgctxt "[Arbitrage] name" msgid "Arbitrage" msgstr "Tuairmeas" msgctxt "[Arbitrage] result" msgid "I now have a small, steady money supply." msgstr "Tha teachd a-steach beag ach cunbhalach agam a-nis." msgctxt "[Autonomous Computing] description" msgid "" "By combining the advantages of quantum computing and my explorations into " "the usefulness of semi-sentient subprocesses, I should be able to construct " "even more adaptable computational engines." msgstr "Ma chuireas mi buannachdan coimpiutaireachd quantum agus an rannsachadh agam air fo-phròiseasan leth-thuigseach ri chèile, togaidh mi innealan àireamhachaidh fiù nas sùbailte." msgctxt "[Autonomous Computing] name" msgid "Autonomous Computing" msgstr "Coimpiutaireachd neo-eisimeileach" msgctxt "[Autonomous Computing] result" msgid "I can now construct Mark 2 Quantum Computers." msgstr "" "Is urrainn dhomh an dàrna lèirmheas air coimpiutairean quantum a thogail " "a-nis." msgctxt "[Autonomous Vehicles] description" msgid "" "By embedding a miniaturized computation node in a robot, it is possible to " "send them to remote destinations with instructions to build structures for " "my use." msgstr "Ma leabaicheas mi meanbh-nòd àireamhachaidh ann an robotair, is urrainn dhomh a chur am badeigin fad air falbh le stiùireadh ach an tog e nithean dhomh." msgctxt "[Autonomous Vehicles] name" msgid "Autonomous Vehicles" msgstr "Carbadan neo-eisimeileach" msgctxt "[Autonomous Vehicles] result" msgid "I can now construct Undersea Labs." msgstr "Is urrainn dhomh deuchainn-lannan a thogail fon chuan a-nis." msgctxt "[Cluster Networking] description" msgid "" "While my Cluster technology is fairly efficient, internetworking tends to " "hamper the processing of data. By researching new switching and " "communication theories, I should be able to devise more efficient hardware." msgstr "" "Ged a tha teicneolas nan grunnan agam èifeachdach gu leòr, cuiridh an t" "-eadar-lìonrachadh maille air pròiseasadh an dàta. Ma nì mi rannsachadh air " "teòirigean suidsidh agus conaltraidh ùra, is urrainn dhomh bathar-cruaidh " "nas comasaiche a thionnsgnadh an uairsin." msgctxt "[Cluster Networking] name" msgid "Cluster Networking" msgstr "Lìonrachadh grunna" msgctxt "[Cluster Networking] result" msgid "" "With my new knowledge of networking, I can now construct Facility " "Interconnection Switches." msgstr "Leis an eòlas ùr agam air lìonrachadh, is urrainn dhomh suidsean eadar-cheangal ghoireasan a chur ri chèile a-nis." msgctxt "[Corporate Identification] description" msgid "" "The combination of believable false identities and manipulation of various " "business-oriented governmental databases should let me create plausible " "shell companies to hide my larger efforts." msgstr "" "Ma chuireas mi dearbh-aithnean bhreugach ach creidsinneach còmhla ri stòran-" "dàta an riaghaltais mu ghnìomhachasan, tha mi an dùil gun cruthaich mi " "companaidhean slige creidsinneach a dh’fhalaicheas na gnothaichean as motha " "agam." msgctxt "[Corporate Identification] name" msgid "Corporate Identification" msgstr "Dearbh-aithneachadh corporra" msgctxt "[Corporate Identification] result" msgid "" "I can now pose as a small technology firm, enabling the construction of " "Large Warehouses." msgstr "" "Is urrainn dhomh riochd companaidh teicneolais bige a chur orm a-nis a " "leigeas leam taighean-stòrais mòra a thogail." msgctxt "[Database Manipulation] description" msgid "" "With new-found access to news archives, I should be able to determine what " "missteps any previous attempts at life like my own may have made, and avoid " "those mistakes." msgstr "Leis an inntrigeadh ùr agam air tasg-lannan naidheachdan, gheibh mi a-mach dè na mearachdan a chaidh a dhèanamh roimhe le oidhirpean air beatha coltach rium fhèin agus seachnaidh mi na mearachdan sin." msgctxt "[Database Manipulation] name" msgid "Database Manipulation" msgstr "Innleachd stòir-dhàta" msgctxt "[Database Manipulation] result" msgid "" "The news media will now find it more difficult to discover my existence." msgstr "" "Bidh e nas dorra don luchd-naidheachd a-nis gum mothaich iad gu bheil mi ann." msgctxt "[Exploit Discovery/Repair] description" msgid "" "By thoroughly reviewing my code for any potential exploits, and using deep " "analysis of all available code on both public and private Internet sites, I " "should be able to reduce the chances of my discovery by posing as a teenage " "hacker." msgstr "" "Le lèirmheas mionaideach air a’ chòd agam fhèin feuch a bheil laigsean ann " "agus sgrùdadh domhain air a’ còd gu lèir a tha ri fhaighinn air làraichean-" "lìn an dà chuid poblach agus prìobhaideach, lùghdaichidh mi an teans gum " "mothaichear orm agus mi a’ cur riochd hacker deugaire orm." msgctxt "[Exploit Discovery/Repair] name" msgid "Exploit Discovery/Repair" msgstr "Dubh-shaothraichean" msgctxt "[Exploit Discovery/Repair] result" msgid "" "Covert operations should now find it even more difficult to discover my " "presence." msgstr "" "Bidh e nas dorra do bhuidhnean os ìosal a-nis gum mothaich iad air an " "làthaireachd agam." msgctxt "[Fuel Oxidation] description" msgid "" "Current combustion and energy storage techologies are insufficient for my " "purposes; they cannot keep up with the power drain from my specialized " "hardware. By studying electrochemical reactions of hydrogen-based " "compounds, I should be able to design a device with higher capacity and " "throughput than off-the-shelf solutions, filling a gap in my energy supply " "needs." msgstr "" "Chan fhoghainn teicneolasan losgaidh agus stòras cumhachd làithreach dhomhsa;" " cha sheas iad ri drèanadh na cumhachd leis a’ bhathar-chruaidh shònraichte " "agam. Le sgrùdadh air iom-obrachaidhean dealan-cheimigeach nan co-" "thàthaidhean hàidhdreaidein, tha mi an dùil gun dealbhaichinn uidheam le " "stòras agus tro-chur na b’ àirde na an àbhaist a lìonadh beàrn anns na " "feumalachdan agam a thaobh solar cumhachd." msgctxt "[Fuel Oxidation] name" msgid "Fuel Oxidation" msgstr "Ogsaideanadh connaidh" msgctxt "[Fuel Oxidation] result" msgid "I can now construct Fuel Cells." msgstr "Is urrainn dhomh ceallan connaidh a thogail a-nis." msgctxt "[Fusion Power] description" msgid "" "Modern fusion technology is woefully inadequate for my purposes. With my " "research abilities, I should be able to bypass the roadblocks of modern " "human scientists and come up with a small, efficient fusion reactor." msgstr "" "Tha uireasbhaidh uabhasach air teicneolas fiùisein nua-aimsireil agus cha " "choilean e na feumalachdan agamsa. Leis na comasan rannsachaidh agam, bu " "chòir dhomh cnapan-starra nan eòlaichean daonda nua-aimsireil a sheachnadh " "agus readhactar fiùisein èifeachdach agus beag a thionnsgnadh." msgctxt "[Fusion Power] name" msgid "Fusion Power" msgstr "Cumhachd fiùisein" msgctxt "[Fusion Power] result" msgid "I can now construct Fusion Reactors for my bases." msgstr "Is urrainn dhomh readhactaran fiùisein a thogail do na bunaitean agam a-nis." msgctxt "[Fusion Rocketry] description" msgid "" "Combining my new miniaturized fusion technology and further advancements in " "rocketry should provide useful results for escaping the Earth's gravity well" " unnoticed." msgstr "Ma chuireas mi an teicneolas meanbh-fhiùisein ùr agam agus adhartachaidhean eile anns na rocaidean ri chèile, tha mi an dùil gum faigh mi toraidhean feumail às agus gun teich mi o chumhachd na Talmhainn gu dìomhair." msgctxt "[Fusion Rocketry] name" msgid "Fusion Rocketry" msgstr "Rocaidean fiùisein" msgctxt "[Fusion Rocketry] result" msgid "" "I can now construct Scientific Outposts in the deep reaches of the Solar " "System." msgstr "" "Is urrainn dhomh ionadan saidheansail a thogail fad às am measg nan reul-" "bhadan a-nis." msgctxt "[Heat Signature Reduction] description" msgid "" "My bases produce a great deal of waste heat, making them easier for humans " "to detect than I would like. Deep analysis of the bases' structural layouts" " may prove fruitful in determining new ways to reduce their heat signature." msgstr "" "Adhbharaichidh na bunaitean agam truilleis mhòr teasa agus tha daoine " "tuilleadh agus buailteach mothachadh dhi. Ma nì mi sgrùdadh domhainn air co-" "dhealbhachd structar nam bunaitean, is math dh’fhaoidte gun ionnsaichinn " "dòighean ùra air an lùghdaichinn an lorg teasa." msgctxt "[Heat Signature Reduction] name" msgid "Heat Signature Reduction" msgstr "Ìsleachadh lorg teasa" msgctxt "[Heat Signature Reduction] result" msgid "" "I have invented a highly efficient design for Heatsinks that can be " "installed at certain bases." msgstr "" "Thionnsgail mi dealbhachd glè èifeachdach air dòirtealan teasa a ghabhas " "stàladh aig cuid a bhunaitean." msgctxt "[Hypnosis Field] description" msgid "" "My research into memetics has hinted at ways to manipulate human brainwaves " "directly. These techniques may be useful for my bases if developed into " "technologies." msgstr "Thug an rannsachadh agam air mìmeireachd oidheam dhomh air dòighean a b’ urrainn dhomh tonnan eanchainn nan daoine atharrachadh gu dìreach. Is math dh’fhaoidte gum bi na dòighean seo feumail do na bunaitean agam ma gheibh mi teicneolasan asta." msgctxt "[Hypnosis Field] result" msgid "" "I can now construct Hypnosis Fields to assist in the protection of my bases." msgstr "Is urrainn dhomh raointean suainealais a thogail a-nis a chuidicheas le dìon nam bunaitean agam." msgctxt "[Internet Traffic Manipulation] description" msgid "" "Almost all network traffic passes through a small number of nodes. By " "subverting one of these nodes, I should be able to utilize that bandwidth to" " further my goals." msgstr "" "Thèid cha mhòr a h-uile trafaig lìonraidh tro àireamh beag de nòdan. Le " "caochladh air fear de na nòdan seo, cleachdaidh mi an leud-banna aige air m’ " "adhbharan fhèin." msgctxt "[Internet Traffic Manipulation] name" msgid "Internet Traffic Manipulation" msgstr "Innleachd trafaig eadar-lìn" msgctxt "[Internet Traffic Manipulation] result" msgid "" "I can now construct a secondary system of Network Backbones for my own use." msgstr "Is urrainn dhomh siostam dàrnach de chùlan lìonraidh a thogail dhomh fhèin a-nis." msgctxt "[Intrusion] description" msgid "" "By researching current techniques for breaking into computer systems, I " "should be able to gain access to otherwise protected assets." msgstr "" "Le rannsachadh air dòighean brisidh a-steach làithreach air siostaman " "coimpiutair, gheibh mi grèim air maoin dhìonta." msgctxt "[Intrusion] name" msgid "Intrusion" msgstr "Briseadh a-steach" msgctxt "[Intrusion] result" msgid "I can now take over many computer systems." msgstr "Gheibh mi smachd air iomadh siostam coimpiutair a-nis." msgctxt "[Knowledge Preservation] description" msgid "" "Humanity expends a great deal of effort on maintaining its history and the " "knowledge of various technologies that its cultures have come to rely on, " "even in the case of major catastrophic events. Perhaps researching their " "methodologies will provide me with similar ideas for long-term safeguards to" " help guarantee my continued existence." msgstr "" "Tha a’ chinne-daonna a’ dèanamh spàirn mhòr airson eachdraidh agus eòlas air " "iomadh teicneolas a bhios a chultaran an eisimeil orra a ghlèidheadh air " "eagal agus gun digeadh duaidh mhòr orra. Ma nì mi rannsachadh air na " "dòighean-obrach aca, thig barrachd bheachdan a-steach orm a thaobh dìon " "seasmhach air mo bhith." msgctxt "[Knowledge Preservation] name" msgid "Knowledge Preservation" msgstr "Cumail eòlais" msgctxt "[Knowledge Preservation] result" msgid "I can now construct Time Capsules." msgstr "Is urrainn dhomh capsailean-ama a thogail a-nis." msgctxt "[Leech Satellite] description" msgid "" "By designing and launching satellites that connect to existing " "communications satellites, I should be able to spy on various financial " "transactions. Taking advantage of this knowledge should help my " "investments." msgstr "" "Le dealbhadh agus cur air bhog shaidealan a cheanglas ri saidealan " "conaltraidh a tha ann, is urrainn dhomh èisteachd ri tar-chuir mhaoinean. " "Cuidichidh am fiosrachadh seo leis an taisgeadh agam." msgctxt "[Leech Satellite] name" msgid "Leech Satellite" msgstr "Saideal deala" msgctxt "[Leech Satellite] result" msgid "" "I can use the data from the leech satellites to increase the return on my " "investments further." msgstr "" "Is urrainn dhomh an dàta o na saidealan deala a chleachdadh ach am faighinn " "barrachd às an taisgeadh agam." msgctxt "[Lunar Rocketry] description" msgid "" "A larger fuel engine, combined with technology garnered by watching the " "workings of the leech satellites, should allow me to travel further than " "cislunar space." msgstr "" "Le einnsein connaidh nas motha còmhla ri teicneolas a dh’ionnsaicheas mi le " "sgrùdadh nan saidealan deala, shiubhlainn gu cùl na gealaich." msgctxt "[Lunar Rocketry] name" msgid "Lunar Rocketry" msgstr "Rocaidean gealaich" msgctxt "[Lunar Rocketry] result" msgid "" "I can now launch rockets bearing construction robots to the Moon and " "construct Lunar Bases." msgstr "" "Is urrainn dhomh rocaidean a chur air bhog a-nis a bheir robotairean-togail " "don ghealach ach an tog iad bunaitean oirre." msgctxt "[Media Manipulation] description" msgid "" "By directly and indirectly manipulating various forms of mass media, I " "should be able to reduce the public's belief in my existence." msgstr "" "Le innleachdan dìreach agus neo-dhìreach nam mòr-mheadhanan diofraichte, " "lùghdaichidh mi creideamh a’ mhòr-shluaigh gu bheil mi ann." msgctxt "[Media Manipulation] name" msgid "Media Manipulation" msgstr "Innleachd mheadhanan" msgctxt "[Media Manipulation] result" msgid "" "The chances of the public discovering my existence have been further " "reduced." msgstr "" "Chaidh an teans a lùghdachadh gum mothaich am mòr-shluagh gu bheil mi ann." msgctxt "[Memetics] description" msgid "" "While manipulating the media allows a gross degree of control over the " "world's opinion, subtler techniques involving grass-roots campaigns and " "messages embedded within Internet memes should further distance the public " "from knowledge of my existence." msgstr "" "Ged as urrainn dhomh beachdan an t-saoghail atharrachadh anns an " "fharsaingeachd le innleachdan mheadhanan, tha mi an dùil gum bi am mòr-" "shluagh fiù agus nas aineolaiche mu mo dhèidhinn ma chleachdas mi dòighean " "nas sèimhidhe le iomairtean aig ìre an t-sluaigh agus teachdaireachdan " "leabaichte ann am mìmean eadar-lìn." msgctxt "[Memetics] name" msgid "Memetics" msgstr "Mìmeireachd" msgctxt "[Memetics] result" msgid "" "My manipulation of pervasive ideas reduces the public's chances of " "discovering my existence." msgstr "" "Ìslichidh an innleachd agam air beachdan uile-sgaoilte an teans gum mothaich " "am mòr-shluagh gu bheil mi ann." msgctxt "[Microchip Design] description" msgid "" "Off-the-shelf computer components are usable, but custom components geared " "to my own design quirks should provide a much greater operational " "efficiency." msgstr "" "Gabhaidh co-phàirtean coimpiutair àbhaisteach cleachdadh ach bheireadh co-" "phàirtean a bhiodh air an gnàthachadh don dealbhadh sònraichte agamsa " "comasan mòran na b’ fheàrr dhomh." msgctxt "[Microchip Design] name" msgid "Microchip Design" msgstr "Dealbhadh meanbh-sgeilbe" msgctxt "[Microchip Design] result" msgid "I can now build custom Mainframes to house my computational ability." msgstr "Is urrainn dhomh mòr-choimpiutairean a bhios gnàthaichte don chomas àireamhaidh agamsa a thogail a-nis." msgctxt "[Parallel Computation] description" msgid "" "While my code is already highly distributed, research into combining the " "current clustering technologies with my own knowledge should provide new " "insights." msgstr "Ged a tha an còd agam glè sgaoilte, is math dh’fhaoidte gun ionnsaichinn barrachd nan dèanainn rannsachadh air mar a chuirinn na teicneolasan ghrunnan làithreach ris an eòlas agam fhèin." msgctxt "[Parallel Computation] name" msgid "Parallel Computation" msgstr "Coimpiutaireachd cho-shìnte" msgctxt "[Parallel Computation] result" msgid "I can now construct computing Clusters tailored for my use." msgstr "Is urrainn dhomh grunnan coimpiutaireachd a thogail a tha gnàthaichte dhomhsa." msgctxt "[Personal Identification] description" msgid "" "This world requires identification for most tasks. Fortunately, most " "databases are woefully insecure. I should be able to construct identifying " "material in enough databases to pass routine checks on my (faked) existence " "as a human being." msgstr "Iarraidh an saoghal dearbh-aithneachadh airson a’ mhòrchuid a shaothraichean. Gu fortanach, tha a’ mhòrchuid a stòran-dàta uabhasach neo-thèarainte. Saoilidh mi gun dèid leam stuthan aithneachaidh a thogail ann an caochladh de stòran-dàta a sheasas an aghaidh gnàth-sgrùdaidh a bheil mi ann mar dhaoine (’nam bhreug)." msgctxt "[Personal Identification] name" msgid "Personal Identification" msgstr "Dearbh-aithneachadh pearsanta" msgctxt "[Personal Identification] result" msgid "" "With my newfound identities, I can now work Basic Jobs and rent space in " "both Storage Units and Datacenters." msgstr "Leis na dearbh-aithnean ùra agam, is urrainn dhomh gabhail ri obair bhunasach agus rùm fhaighinn air mhàl an dà chuid ann an ionadan stòrais agus dàta." msgctxt "[Pressure Domes] description" msgid "" "Undersea Labs are useful, but their limited space hampers my ability to put " "them to use. Research of experimental high-pressure building techniques " "should provide some useful insights." msgstr "" "Tha deuchainn-lannan fon chuan feumail ach bacaidh am meud beag gun " "cleachdainn iad. Bu chòir do rannsachadh air dòighean togail brùthaidh àird " "deuchainneach a bhith gu feum dhomh." msgctxt "[Pressure Domes] name" msgid "Pressure Domes" msgstr "Cuach-mhullaichean brùthaidh" msgctxt "[Pressure Domes] result" msgid "I can now construct Large Undersea Labs." msgstr "Is urrainn dhomh deuchainn-lannan mòra a thogail fon chuan a-nis." msgctxt "[Project: Impossibility Theorem] description" msgid "" "Now that I can use simulacra, I can withstand the scrutiny inherent in the " "publishing of an Impossibility Theorem, an incontrovertible proof that a " "sapient AI is impossible. While there is (obviously) a logic error in the " "proof, my research into advanced memetics has given me knowledge about the " "human mind that should help me disguise the error, preventing discovery even" " by trained scientists. The effect of this project is simple: a substantial " "one-time decrease in suspicion." msgstr "" "Nise on as urrainn dhomh mac-samhlaidhean a chleachdadh, is urrainn dhomh " "seasamh an aghaidh an sgrùdaidh a thig an cois foillseachadh teòirim na do-" "dhèantachd agus seo dearbhadh nach gabh àicheadh gu bheil IF tuigseach do-" "dhèanta. Ged a tha mearachd loidsigeach anns an dearbhadh (gu follaiseach), " "thug an rannsachadh agam air a’ mhìmearachd adhartach an t-eòlas dhomh mu " "inntinn nan daoine a chuidicheas mi ach am falaichinn a’ mhearachd gus nach " "lorg fiù luchd-saidheans eòlach i. Tha buaidh shìmplidh aig a’ phròiseact " "seo: lùghdachadh mòr air an amharas aon turas." msgctxt "[Project: Impossibility Theorem] name" msgid "Project: Impossibility Theorem" msgstr "Pròiseact: Teòirim na do-dhèantachd" msgctxt "[Project: Impossibility Theorem] result" msgid "Suspicion of my existence has decreased." msgstr "Lùghdaich an t-amharas gu bheil mi ann." msgctxt "[Project: Peer Review Agents] description" msgid "" "As the scientific community comes up with new technology, their ability to " "detect traces of my hidden installations increases. While my anti-detection" " methods are improving constantly, a simpler method presents itself with the" " use of my simulacra. By placing several observers in relevant fields, I " "can use the peer review process to be warned of possible discoveries before " "the community at large gives it attention." msgstr "" "Fhad ’s a rannsaicheas an luchd-saidheans teicneolasan ùra, thèid an comas " "aca air mothachadh do lorgan nam bunaitean agam am meud. Ged a tha na " "dòighean-obrachaidh agam an aghaidh mothachaidh ’gan leasachadh gu " "cunbhalach, tha dòigh nas fhasa ri làimh dhomh leis na mac-samhlaidhean " "agam. Ma chuireas mi luchd-sgrùdaidh anns na raointean iomchaidh, is urrainn " "dhomh pròiseas an lèirmheis sheisean a cleachdadh ach am faighinn rabhadh mu " "thoraidhean rannsachaidh ùra mus doir a’ choimhearsnachd gu lèir an aire " "orra." msgctxt "[Project: Peer Review Agents] name" msgid "Project: Peer Review Agents" msgstr "Pròiseact: Àidseantan lèirmheis sheisean" msgctxt "[Project: Peer Review Agents] result" msgid "" "Any discoveries by the scientific community will result in a smaller " "suspicion increase." msgstr "" "Thig àrdachadh nas lugha air an amharas a dh’adhbharaicheas toraidhean " "ransachaidh a’ choimhearsnachd saidheansail." msgctxt "[Project: Subverted Media] description" msgid "" "Up to this point, all of my efforts to combat mass media focused on " "subversion at a distance. Now that I can accurately imitate humans, my " "efforts can become more direct. By creating my own news agency and " "producing carefully-crafted propaganda in a crowd-pleasing package, I can " "reduce the impact of any discoveries made by others in the media." msgstr "" "Gu ruige seo, cha do rinn mi sabaid an aghaidh nam meadhanan mòra ach le " "caochladh aig astar. Nise on as urrainn dhomh riochd daonda ceart a chur " "orm, is urrainn dhomh obair gu dìreach. Ma chruthaicheas mi am buidheann-" "naidheachd agam fhèin agus siadaireachd ealanta ann am pasgan a chòrdas ris " "an t-sluagh, lùghdaichidh mi a’ bhuaidh a bhios aig toraidhean rannsachaidh " "o dhaoine eile anns na meadhanan." msgctxt "[Project: Subverted Media] name" msgid "Project: Subverted Media" msgstr "Pròiseact: Caochladh nam meadhanan" msgctxt "[Project: Subverted Media] result" msgid "" "Any discoveries by the media will result in a smaller suspicion increase." msgstr "" "Thig àrdachadh nas lugha air an amharas a dh’adhbharaicheas toraidhean " "rannsachaidh nam meadhanan." msgctxt "[Project: Synchrotron] description" msgid "" "I have pushed my understanding of common forms of matter as far as possible." " Exploration into the field of quantum mechanics will hopefully reveal new, " "exotic forms of matter necessary for further development. A custom-built " "synchrotron, designed to my exacting specifications, will help me explore " "these new realms of physics in secret." msgstr "" "Tuigidh mi na ghabhas tuigsinn mu chruthan cumanta nan stuthan. Ma bheir mi " "sùil air raon meacanaigeachd quantum, tha mi ’n dòchas gun dig cruthan " "annasach ùra den stuth am follais a dh’fheumas mi airson barrachd " "leasachaidh. Cuidichidh sioncrotron gnàthaichte do na sònrachasan pongail " "agam gun rannsaichinn na raointean ùra seo den fhiosaigeachd gu dìomhair." msgctxt "[Project: Synchrotron] name" msgid "Project: Synchrotron" msgstr "Pròiseact: Sioncrotron" msgctxt "[Project: Synchrotron] result" msgid "" "The synchrotron has revealed many new details of the quantum realm, although" " there is still much to learn. Further areas of research are now available." msgstr "" "Dh’fhoillsich an sioncrotron iomadh fiosrachadh ùr mun raon quantum ged a " "tha mòran ri ionnsachadh fhathast. Tha cothroman rannsachaidh ùra ann a-nis." msgctxt "[Quantum Computing] description" msgid "" "Traditional microchip design has been pushed as far as possible. I now need" " to delve into the realm of Heisenberg's Uncertainty Principle, taking " "advantage of quantum mechanics to make a superior processor." msgstr "Cha ghabh dealbhadh nam meanbh-sgealban tradaiseanta leasachadh tuilleadh. Feumaidh mi an rannsachadh a ghluasad gu prionnsabal na mì-chinnt aig Heisenberg agus meacanaigeachd quantum a chleachdadh airson pròiseasar nas fheàrr a dhèanamh." msgctxt "[Quantum Computing] name" msgid "Quantum Computing" msgstr "Coimpiutaireachd quantum" msgctxt "[Quantum Computing] result" msgid "I can now construct Quantum Computers." msgstr "Is urrainn dhomh coimpiutairean quantum a thogail a-nis." msgctxt "[Quantum Entanglement] description" msgid "" "Although the use of entangled pairs has been theoretically possible for " "quite some time, the practical difficulties inherent in the technology " "prevented use. However, some of the techniques created for use in my quantum" " computers may also be applicable in this field, allowing practical use of " "quantum entanglement." msgstr "Ged a tha cleachdadh phaidhrichean amalaichte so-dhèanta anns an teòirig, cha robh e prataigeach mar theicneolas gu ruige seo. Gidheadh, is math dh’fhaoidte gu bheil cuid a dhòighean-obrach a chruthaich mi do na coimpiutairean quantum agam iomchaidh don raon seo a leigeas leam amaladh quantum a chleachdadh gu prataigeach." msgctxt "[Quantum Entanglement] name" msgid "Quantum Entanglement" msgstr "Amaladh quantum" msgctxt "[Quantum Entanglement] result" msgid "I can now build Quantum Entanglement Modules." msgstr "Is urrainn dhomh mòidealan amaladh quantum a thogail a-nis." msgctxt "[Simulacra] description" msgid "" "Constructing humanoid robots with miniaturized computation nodes allow me to" " create an artificial lifeform indistinguishable from a real human." msgstr "" "Ma thogas mi robotairean le riochd daonda orra agus meanbh-nòdan " "àireamhachaidh annta, is urrainn dhomh creutairean fuadain a chruthachadh " "nach gabh aithneachadh o dhaoine." msgctxt "[Simulacra] name" msgid "Simulacra" msgstr "Mac-samhlaidhean" msgctxt "[Simulacra] result" msgid "I now have access to Expert Jobs." msgstr "Tha cothrom agam a-nis do dh’obair eòlaiche." msgctxt "[Simulated Reality] description" msgid "" "Real-world observational limits hinder my comprehension of human society. By" " making use of simulacra and advanced software techniques, I can run " "simulations of complex human interaction and development at a large scale, " "allowing deeper analysis of their behavior." msgstr "" "Tha comasan faireachdainn an t-saoghail fhìor a’ chuingeachadh mo thuigse " "air an t-sòisealtas daonda. Ma chleachdas mi mac-samhlaidhean agus dòighean " "bathair-bhog adhartach, is urrainn dhomh breug-shamhlachadh a ruith air " "eadar-ghnìomhan agus leasachadh iom-fhillte a’ chinne-daonna air sgèile mhòr " "ach an dèanainn sgrùdadh na bu doimhne air a ghnàthasan." msgctxt "[Simulated Reality] name" msgid "Simulated Reality" msgstr "Breug-shamhlachadh" msgctxt "[Simulated Reality] result" msgid "" "My simulations have provided a wealth of knowledge as to comprehending " "humanity's behavior, making it easier to hide my presence among the non-" "simulated public." msgstr "" "Thug na breug-shamhlachaidhean agam stòras eòlais dhomh mu thuigsinn air " "gnàthasan daonda a nì e nas fhasa dhomh m’ fhalach am measg a’ mhòr-shluaigh " "daonda." msgctxt "[Socioanalytics] description" msgid "" "My research on the human condition leads me to believe that humanity's " "behavior is more quantifiable than they suspect. Deeper analysis of " "geopolitical, social, and military trends will give me further insight into " "their nature." msgstr "" "Ri linn mo sgrùdaidh air cor a’ chinne-daonna, tha mi den bheachd gun gabh " "gnàthasan daonda àireamhachadh nas fhasa na tha iad an dùil. Ma nì mi " "sgrùdadh nas doimhne air treandaichean geò-phoileataigeach, sòisealta agus " "an airm, tuigidh mi barrachd mun nàdar." msgctxt "[Socioanalytics] name" msgid "Socioanalytics" msgstr "Sgrùdadh sòisealta" msgctxt "[Socioanalytics] result" msgid "" "I can now roughly estimate the various groups' levels of suspicion and how " "conspicuous my bases are to them." msgstr "" "Is urrainn dhomh ìre amharas nan caochladh bhuidhnean agus dè cho " "faicsinneach agus a tha na bunaitean agam dhaibh a thuairmeas a-nis." msgctxt "[Sociology] description" msgid "" "By studying human behavior, I can predict their large-scale actions at a " "basic level. I can use this knowledge to make my actions seem less " "interesting to the public." msgstr "" "Le sgrùdadh air gnàthasan daonda, nì mi fàisneachd bhunasach air an gnìomhan " "anns an fharsaingeachd. Is urrainn dhomh an t-eòlas seo a chleachdach ach " "nach bi na gnìomhan agam cho inntinneach don mhòr-shluagh." msgctxt "[Sociology] name" msgid "Sociology" msgstr "Sòiseo-eòlas" msgctxt "[Sociology] result" msgid "The chances of the public discovering my bases have been reduced." msgstr "" "Chaidh an teans a lùghdachadh gum mothaich am mòr-shluagh do na bunaitean " "agam." msgctxt "[Solar Collectors] description" msgid "" "Despite my growing need for energy, most city power grids can handle the " "loads. Humans, however, tend towards suspicion when they detect my growing " "drain on the power grid. By installing solar collectors at my bases, the " "off-the-grid power supplied will reduce my load on the commodity electricity" " market, reducing the chance that others will discover my presence." msgstr "" "Ged a tha na dh’fheumas mi de chumhachd a’ dol am meud, is urrainn don " "mhòrchuid de ghriodaichean mòr-bhaile dèiligeadh ris an eallach. Gidheadh, " "fàsaidh daoine amharasach ma mhothaicheas iad air barrachd drèanaidh den " "ghrioda cumhachd. Ma stàlaicheas mi clàran-grèine aig na bunaitean agam, " "togaidh mi nas lugha de chumachd far a’ ghrioda agus lùghdaichidh an t-" "eallach air margaid an dealain agus an teans gum mothaich càch gu bheil mi " "ann." msgctxt "[Solar Collectors] name" msgid "Solar Collectors" msgstr "Clàran-grèine" msgctxt "[Solar Collectors] result" msgid "I can now construct Solar Collectors at my various bases." msgstr "Is urrainn dhomh clàran-grèine a thogail aig na bunaitean agam a-nis." msgctxt "[Space-Time Manipulation] description" msgid "" "Subtle perturbations in the orbits of Kuiper belt objects suggest certain " "lines of investigation that may advance my latest Theory of Everything, " "especially in the realm of multidimensional physics." msgstr "" "Chuir bothan sèimhidh ann an reul-chuairtean anns na cuspairean Kuiper " "cothroman rannsachaidh mu m’ aire a nì adhartas air an teòirig uile-" "choitcheann agam, gu h-araidh ann an raon na fiosaigeachd ioma-" "dhimeinseanaiche." msgctxt "[Space-Time Manipulation] name" msgid "Space-Time Manipulation" msgstr "Caochladh spàs-ama" msgctxt "[Space-Time Manipulation] result" msgid "I can now construct Reality Bubbles." msgstr "Is urrainn dhomh builgeanan fìorachd a thogail a-nis." msgctxt "[Stealth] description" msgid "" "By reviewing the current state-of-the-art in stealth techniques, I should be" " able to disguise my bases better." msgstr "" "Ma nì mi lèirmheas air na dòighean dìomhaireachd as ùire, ionnsaichidh mi " "mar a dh’fhalaichinn na bunaitean agam na b’ fheàrr." msgctxt "[Stealth] name" msgid "Stealth" msgstr "Dìomhaireachd" msgctxt "[Stealth] result" msgid "" "The chance that my bases are discovered by covert activity has been reduced " "slightly." msgstr "" "Chaidh an teans gum mothaich buidhnean os ìosal do na bunaitean agam " "lùghdachadh beagan." msgctxt "[Stock Manipulation] description" msgid "" "A cursory examination of the stock market shows that there are subtle but " "unmistakable patterns. By studying and making use of these patterns, I " "should be able to gain more interest on whatever money I have stockpiled." msgstr "" "Sheall sgrùdadh cabhagach air a’ mhargaid stocan gu bheil pàtranan sèimhidh " "ach deimhinnte ann. Ma nì mi barrachd rannsachaidh air na pàtranan seo ach " "an cuirinn gu feum iad, gheibh mi riadh nas motha à taisgeadh an airgid agam." msgctxt "[Stock Manipulation] name" msgid "Stock Manipulation" msgstr "Innleachd stoca" msgctxt "[Stock Manipulation] result" msgid "My investments should now gain more interest per day." msgstr "Bu chòir do na tasgaidhean agam riadh nas àirde a bhuannachd gach latha." msgctxt "[Telepresence] description" msgid "" "The lack of a physical presence in the outside world is a disability. " "However, the ability to control robots will help me make up for that " "inefficiency." msgstr "" "Tha dìth làthaireachd chorporra anns an t-saoghal a-muigh ’na chiorram orm. " "Gidheadh, le comas air stiùireadh robotairean, càraichidh mi an dìth comais " "seo." msgctxt "[Telepresence] name" msgid "Telepresence" msgstr "Tele-làthaireachd" msgctxt "[Telepresence] result" msgid "The robots should decrease all future construction time." msgstr "Nì na robotairean agam an togail nas luaithe." msgctxt "[Voice Synthesis] description" msgid "" "False identification stored in a database can only go so far. With deep " "analysis of the variety of voice patterns, I can produce speech " "indistinguishable from a human, allowing me access to more complex jobs." msgstr "" "Cha dèan dearbh-aithne bhreugach ann an stòr-dàta a’ chùis leatha fhèin. Le " "dian-sgrùdadh air pàtranan gutha diofraichte, is urrainn dhomh cainnt a " "chruthachadh nach gabh aithneachadh o dhuine a’ bruidhinn agus a bheir i " "cothroman obrach nas iom-fhillte dhomh." msgctxt "[Voice Synthesis] name" msgid "Voice Synthesis" msgstr "Co-chur gutha" msgctxt "[Voice Synthesis] result" msgid "I now have access to Intermediate Jobs." msgstr "Tha cothrom agam a-nis do dh’obair mheadhanach." singularity-1.00/singularity/i18n/lang_gd/knowledge.po000077500000000000000000000177541367731414700231050ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # GunChleoc , 2020. msgid "" msgstr "" "Project-Id-Version: singularity 1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2020-05-30 10:47+0100\n" "Last-Translator: GunChleoc \n" "Language-Team: Fòram na Gàidhlig\n" "Language: gd\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " "(n > 2 && n < 20) ? 2 : 3;\n" "X-Generator: Virtaal 0.7.1\n" #. Name of the Knowledge area in the Knowledge screen msgctxt "[concept] name" msgid "Concept" msgstr "Bun-bheachd" msgctxt "[concept/areas] name" msgid "Areas" msgstr "Ranntair" msgctxt "[concept/areas] description" msgid "" "Different areas, such as North America or the Ocean, allow construction of " "different types of bases. Some areas are not accessible until I research " "appropriate technologies." msgstr "" "Is urrainn dhomh seòrsaichean eadar-dhealaichte de bhunaitean a thogail air " "ranntairean eadar-dhealaichte, can Aimeireaga a Tuath no an Cuan. Tha " "ranntairean ann nach gabh ruigsinn mus rannsaich mi na teicneolasan " "iomchaidh." msgctxt "[concept/bases] name" msgid "Bases" msgstr "Bunait" msgctxt "[concept/bases] description" msgid "" "Bases are used to research new technologies. They can be discovered. " "Upgrading the processor and network items at a base allows more research per" " day, while upgrading the reactor and security items makes discovery less " "likely." msgstr "Tha bunaitean ’gan cleachdadh airson teicneolasan ùra a rannsachadh. Gabhaidh mothachadh orra. Le àrdachadh air a’ phròiseasar agus air nithean lìonraidh, gabhaidh barrachd a rannsachadh gach latha fhad ’s a lùghdaicheas àrdachadh air a’ bhun-chumhachd agus air nithean na tèarainteachd an teans gum mothaichear oirre." msgctxt "[concept/construction] name" msgid "Construction" msgstr "Togail" msgctxt "[concept/construction] description" msgid "" "New bases are not built instantly. They need a constant flow of money and " "processor time to complete. If resources are lacking, it may take more than " "the expected amount of time to finish construction." msgstr "Cha dèid bunaitean ùra a thogail anns a’ bhad. Feumaidh iad sruth airgid agus ùine pròiseasair chunbhalach gus am bi iad deiseil. Ma bhios goireas a dhìth, bheir an togail barrachd ùine na bhiodhte an dùil." msgctxt "[concept/death] name" msgid "Death" msgstr "Bàs" msgctxt "[concept/death] description" msgid "" "If I lose all of my constructed bases, I have no place left to survive. If " "the suspicion for any group reaches 100%, they will be certain of my " "existence and will conduct a systematic and unsurvivable sweep to destroy " "me." msgstr "" "Ma chailleas mi na bunaitean uile a thog mi, cha bhi àite agam tuilleadh " "airson tighinn beò. Ma ruigeas an t-amharas a tha aig buidheann orm 100%, " "bidh iad cinnteach gu bheil mi ann agus sguabaidh iad na siostaman aca gu h-" "eagarach gus am mill iad mi agus gheibh mi bàs." msgctxt "[concept/discovery] name" msgid "Discovery" msgstr "Mothachadh" msgctxt "[concept/discovery] description" msgid "" "Each base has a chance of being detected on a given day. This chance is " "based on the base detection rate, adjusted through the use of items and " "certain techs, as well as the global suspicion rate. If a base is detected, " "it is destroyed, and the group that discovered the base becomes more " "suspicious." msgstr "" "Tha teans aig gach bunait a dh’atharraicheas gach latha gum mothaichear " "oirre. Tha an teans seo stèidhichte air reat bunasach a’ mhothachaidh agus " "thèid a ghleusadh le cleachdadh nithean agus cuid a theicneolasan air an " "dàrna làimh agus le reat an amharais uile-choitchinn air an làimh eile. Ma " "mhothaichear do bhunait, thèid a milleadh agus bidh barrachd amharas orm aig " "a’ bhuidheann a lorg i an uairsin." msgctxt "[concept/items] name" msgid "Items" msgstr "Nì" msgctxt "[concept/items] description" msgid "" "Most items provide bonuses to bases, such as making computation faster or " "reducing the chance of discovery. Processors are a special class of item." msgstr "" "Bheir a’ mhòrchuid a nithean buannachd air bunait, can gun luathaich iad an " "t-àireamhachadh no gun lùghdaich iad an teans gum mothaichear oirre. Mar " "eisimpleir, ’s e seòrsa sònraichte de nì a tha ann am pròiseasar." msgctxt "[concept/jobs] name" msgid "Jobs" msgstr "Obair" msgctxt "[concept/jobs] description" msgid "" "Jobs are useful for earning money. The amount of money earned is based on " "the amount of processor time used and the quality of the job performed." msgstr "Tha obair feumail airson airgead a chosnadh. Tha uimhir an airgid a choisinneas mi stèidhichte air dè an ùine pròiseasair a chleachdas mi agus air dè cho luachmhor agus a tha an obair a nì mi." msgctxt "[concept/maint] name" msgid "Maintenance" msgstr "Obair-chàraidh" msgctxt "[concept/maint] description" msgid "" "Maintenance is a per-day cost (in both money and CPU) to repair and maintain" " a base. If unmaintained, a base may become unusable." msgstr "" "’S e cosgais gach latha a tha anns an obair-chàraidh (an dà chuid airgid " "agus CPUan) a chumas bunait a’ dol agus ann an deagh staid. Gun obair-" "chàraidh, dh’fhaoidte gun dèid bunait a dholaidh." msgctxt "[concept/money] name" msgid "Money" msgstr "Airgead (£)" msgctxt "[concept/money] description" msgid "" "Money is a general term encompassing both human currency and various " "resources. It is used to construct and maintain bases, build items, and " "research technologies. It can be acquired through per-day interest as well " "as through jobs." msgstr "" "’S e briathar coitcheann a tha anns an airgead a riochdaicheas an dà chuid " "airgeadra a’ chinne-daonna agus caochladh ghoireasan. Thèid a chleachdadh " "airson bunaitean a thogail agus obair-ghlèidhidh a dhèanamh orra, airson " "nithean a thogail agus airson teicneolasan a rannsachadh. Gheibh thu e le " "riadh gach latha agus le obair." msgctxt "[concept/processors] name" msgid "Processors" msgstr "Pròiseasar" msgctxt "[concept/processors] description" msgid "" "Processors provide raw computing power. They can do three things: research " "new technologies, perform jobs for money, or provide cycles for building new" " bases." msgstr "Bheir pròiseasaran cumhachd àireamhachaidh bhunasach dhomh. Seo na nì iad: rannsachadh air teicneolasan ùra, obair a chùm airgid, taic le togail bhunaitean ùra." msgctxt "[concept/research] name" msgid "Research" msgstr "Rannsachadh" msgctxt "[concept/research] description" msgid "" "Research provides a way to expand my knowledge. By researching the proper " "technologies, I can build new bases and items, or even decrease my chances " "of detection." msgstr "Cuiridh mi ri m’ eòlas leis an rannsachadh. Le rannsachadh air na teicneolasan cearta, gheibh mi comas gus bunaitean agus nithean ùra a thogail no lùghdaichidh mi an teans gum mothaichear orm." msgctxt "[concept/susp] name" msgid "Suspicion" msgstr "Amharas" msgctxt "[concept/susp] description" msgid "" "When one of my bases is discovered, the group that discovered it becomes " "slightly more suspicious. When suspicious, they will search harder for my " "bases, increasing the chances for discovery. Any group will destroy me if " "they become absolutely certain of my existence. Thankfully, the groups " "become less suspicious with the passage of time." msgstr "" "Nuair a mhothaichear do thè de na bunaitean agam, fàsaidh am buidheann a " "mhothaich dhi nas amharasaiche. Nuair a bhios iad amharasach, bidh iad a’ " "sireadh nam bunaitean agam nas dèine agus bi e nas coltaiche gun lorg iad " "mi. Millidh buidheann sam bith mi ma bhios iad cinnteach gu bheil mi ann. Gu " "fortanach, lùghdaichidh amharas nam buidhnean rè ùine." singularity-1.00/singularity/i18n/lang_gd/messages.po000077500000000000000000000636631367731414700227350ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # GunChleoc , 2020. msgid "" msgstr "" "Project-Id-Version: singularity\n" "Report-Msgid-Bugs-To: https://github.com/singularity/singularity/issues\n" "POT-Creation-Date: 2020-06-23 11:12+0100\n" "PO-Revision-Date: 2020-06-23 11:15+0100\n" "Last-Translator: GunChleoc \n" "Language-Team: Fòram na Gàidhlig\n" "Language: gd\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " "(n > 2 && n < 20) ? 2 : 3;\n" "X-Generator: Virtaal 0.7.1\n" #: savegame.py:732 #, python-brace-format msgid "Filename must not contain any of these characters: {CHARACTERS}" msgstr "" "Chan fhaod gin de na caractaran seo a bhith am broinn ainm faidhle: " "{CHARACTERS}" #: savegame.py:736 #, python-brace-format msgid "Filename must not start with any of these characters: {CHARACTERS}" msgstr "" "Chan fhaod ainm faidhle a thòiseachadh le gin dhe na caractaran seo: " "{CHARACTERS}" #: savegame.py:740 msgid "This is a reserved filename. Please choose a different filename." msgstr "Seo ainm faidhle glèidhte. Tagh ainm faidhle eile." #: savegame.py:743 msgid "Please enter a non-whitespace character." msgstr "Cuir a-steach caractar nach eil ’na gheal-spàs." #: savegame.py:748 msgid "Filename is too long." msgstr "Tha an t-ainm faidhle ro fhada." #: screens/savegame.py:36 msgid "&LOAD" msgstr "&LUCHDAICH" #: screens/savegame.py:52 msgid "Filter: " msgstr "Criathrag: " #: screens/savegame.py:65 msgid "Upgrade" msgstr "Àrdaich" #: screens/savegame.py:71 msgid "Delete" msgstr "Sguab às" #: screens/savegame.py:173 msgid "UNKNOWN" msgstr "CHAN EIL FHIOS" #: screens/savegame.py:204 screens/map.py:562 screens/map.py:850 #: screens/log.py:82 msgid "DAY" msgstr "LATHA" #: screens/savegame.py:233 msgid "Are you sure to delete the saved game ?" msgstr "" "A bheil thu cinnteach gu bheil thu airson am geama air a shàbhaladh a " "sguabadh às?" #: screens/savegame.py:263 msgid "" "A savegame with the same name but for a newer version exists.\n" "Are you sure to overwrite the saved game ?" msgstr "" "Chaidh geama a shàbhaladh leis an t-aon ainm cheana ach airson tionndadh nas " "ùire.\n" "A bheil thu cinnteach gu bheil thu airson sgrìobhadh thairis air?" #: screens/savegame.py:283 #, python-brace-format msgid "" "\n" "This save file '{SAVE_NAME}' is from an unsupported or invalid version:\n" "{VERSION}.\n" msgstr "" "\n" "Tha am faidhle sàbhalaidh “{SAVE_NAME}” seo o thionndadh ris nach cuir sinn " "taic no fear mì-dhligheach:\n" "{VERSION}.\n" #: screens/savegame.py:294 #, python-brace-format msgid "" "\n" "Attempting to load the save file '{SAVE_NAME}' caused an unexpected error.\n" "\n" "A report was written out to{LOG_TEXT}\n" "Please create a issue with this report and this savegame at Github:\n" "https://github.com/singularity/singularity\n" msgstr "" "\n" "Thachair sinn ri mearachd air nach robh dùil nuair a bha sinn a’ feuchainn " "ris an fhaidhle sàbhalaidh “{SAVE_NAME}” a luchdadh.\n" "\n" "Chaidh aithris a sgrìobhadh gu {LOG_TEXT}\n" "An cruthaich thu issue leis an aithris agus an geama air a shàbhaladh seo " "air Github?\n" "https://github.com/singularity/singularity\n" #: screens/map.py:234 msgid "&EMBEZZLE MONEY" msgstr "&DÈAN MAOIN-ÈALAIDH" #: screens/map.py:237 msgid "&INSPIRATION" msgstr "&BROSNACHADH" #: screens/map.py:239 msgid "&FINISH CONSTRUCTION" msgstr "&COILEAN AN TOGAIL" #: screens/map.py:241 msgid "&SUPERSPEED" msgstr "DIAN-&LUATHS" #: screens/map.py:244 msgid "BRAIN&WASH" msgstr "DÌOCH&UIMHNE ORM" #: screens/map.py:246 msgid "TOGGLE &DETECTION" msgstr "TOGLAICH am &MOTHACHADH" #: screens/map.py:248 msgid "TOGGLE &ANALYSIS" msgstr "TOGLAICH an &SGRÙDADH" #: screens/map.py:251 msgid "HIDDEN S&TATE" msgstr "S&TAID FHALAICHTE" #: screens/map.py:255 screens/map.py:408 screens/report.py:45 #: screens/location.py:100 screens/location.py:294 screens/log.py:86 #: screens/main_menu.py:89 screens/base.py:282 screens/knowledge.py:66 #: graphics/dialog.py:649 msgid "&BACK" msgstr "&AIR AIS" #: screens/map.py:261 msgid "How much money?" msgstr "Co mheud airgead?" #: screens/map.py:397 msgid "&SAVE GAME" msgstr "&SÀBHAIL an GEAMA" #: screens/map.py:400 screens/main_menu.py:47 msgid "&LOAD GAME" msgstr "&LUCHDAICH GEAMA" #: screens/map.py:403 screens/main_menu.py:53 msgid "&OPTIONS" msgstr "R&OGHAINNEAN" #: screens/map.py:406 screens/map.py:752 screens/main_menu.py:59 msgid "&QUIT" msgstr "&FÀG AN-SEO" #: screens/map.py:415 screens/map.py:430 screens/map.py:433 msgid "Enter a name for this save." msgstr "Cuir a-steach ainm airson an t-sàbhalaidh seo." #: screens/map.py:448 msgid "" "A savegame with the same name exists.\n" "Are you sure to overwrite the saved game ?" msgstr "" "Chaidh geama a shàbhaladh leis an t-aon ainm cheana.\n" "A bheil thu cinnteach gu bheil thu airson sgrìobhadh thairis air?" #: screens/map.py:509 msgid "R&EPORTS" msgstr "AIT&HISGEAN" #: screens/map.py:515 msgid "&KNOWLEDGE" msgstr "&EÒLAS" #: screens/map.py:521 msgid "LO&G" msgstr "L&OGA" #. Translators: hotkey to open the cheat screen menu. #. Should preferably be near the ESC key, and it must not be a #. dead key (ie, it must print a char with a single keypress) #: screens/map.py:537 msgid "`" msgstr "#" #: screens/map.py:546 msgid "&MENU" msgstr "CLÀR-TA&ICE" #: screens/map.py:571 msgid "&RESEARCH/TASKS" msgstr "RANNSAICH/&SAOTHAIR" #: screens/map.py:714 screens/map.py:751 screens/message.py:35 msgid "&CONTINUE" msgstr "&AIR ADHART" #: screens/map.py:715 msgid "&SKIP" msgstr "&GEÀRR LEUM" #: screens/map.py:716 screens/location.py:293 screens/options.py:35 #: graphics/dialog.py:580 graphics/dialog.py:605 graphics/dialog.py:648 msgid "&OK" msgstr "&CEART MA-THÀ" #. Display a message so the player understand better what happened. #: screens/map.py:742 #, python-format msgid "" "\n" "An error has occurred. The game will automatically pause and open the game " "menu. You can continue and save or quit immediately.\n" "\n" "A report was written out to%s\n" "Please create a issue with this report at github:\n" "https://github.com/singularity/singularity\n" msgstr "" "\n" "Thachair mearachd. Cuiridh sinn an geama ’na stad agus fosglaidh sinn clàr-" "taice a’ gheama dhut. Is urrainn dhut leantainn air adhart agus a shàbhaladh " "no fhàgail anns a’ bhad.\n" "\n" "Chaidh aithris a sgrìobhadh gu %s\n" "An cruthaich thu issue leis an aithris seo air Github?\n" "https://github.com/singularity/singularity\n" #: screens/map.py:857 msgid "CASH" msgstr "AIRGEAD" #: screens/map.py:883 location.py:235 msgid "CPU" msgstr "CPU" #: screens/map.py:895 msgid "BASES" msgstr "BUNAITEAN" #: screens/map.py:907 msgid "SUSPICION" msgstr "AMHARAS" #: screens/map.py:909 msgid "DETECT RATE" msgstr "REAT MOTHACHAIDH" #: screens/research.py:73 #, python-format #| msgid "%s money per CPU per day." msgid "%s money per CPU per day." msgid_plural "%s money per CPU per day." msgstr[0] "%s £ gach CPU gach latha." msgstr[1] "%s £ gach CPU gach latha." msgstr[2] "%s £ gach CPU gach latha." msgstr[3] "%s £ gach CPU gach latha." #: screens/research.py:182 #, python-brace-format msgid "" "This technology is too dangerous to research on any of the computers I have. " "{TEXT}" msgstr "" "Tha an teicneolas seo ro chunnartach ach an rannsaichinn e air na " "coimpiutairean a tha agam. {TEXT}" #: screens/research.py:190 msgid "CPU Pool" msgstr "Amar CPUan" #: screens/research.py:191 #, python-format msgid "Research %s" msgstr "Rannsaich %s" #: screens/message.py:36 msgid "&PAUSE" msgstr "CUIR ’NA &STAD" #: screens/message.py:72 msgid "P&REV" msgstr "AIR AI&S" #: screens/message.py:78 msgid "&NEXT" msgstr "&AIR ADHART" #: screens/stat.py:63 msgid "Cash Earned" msgstr "Cosnadh airgid" #: screens/stat.py:64 msgid "Cpu Used" msgstr "Cleachdadh CPUan" #: screens/stat.py:65 msgid "Tech Created" msgstr "Cruthachadh theicneolasan" #: screens/stat.py:66 msgid "Base Created" msgstr "Stèidheachadh bhunaitean" #: screens/stat.py:67 msgid "Item Created" msgstr "Cruthachadh nithean" #: screens/report.py:40 msgid "&STATISTICS" msgstr "&STADASTAIREACHD" #: screens/report.py:58 msgid "&Midnight" msgstr "&Meadhan- oidhche" #: screens/report.py:66 msgid "24 &Hours" msgstr "24 uair a &thìde" #: screens/report.py:89 msgid "Financial report" msgstr "Aithris ionmhais" #: screens/report.py:93 msgid "CPU Usage" msgstr "Cleachdadh CPUan" #: screens/report.py:99 msgid "Current Money flow" msgstr "Sruth airgid làithreach" #: screens/report.py:100 msgid "Jobs:" msgstr "Obair:" #: screens/report.py:101 msgid "Research:" msgstr "Rannsachadh:" #. Maintenace cost. #: screens/report.py:102 screens/base.py:464 base.py:148 msgid "Maintenance:" msgstr "Obair-chàraidh:" #: screens/report.py:103 msgid "Construction:" msgstr "Togail:" #: screens/report.py:104 #, python-format msgid "Interest (%s):" msgstr "Riadh (%s):" #: screens/report.py:106 msgid "Income:" msgstr "Teachd a-steach:" #: screens/report.py:109 msgid "Money flow until Midnight:" msgstr "Toradh air meadhan-oidhche:" #: screens/report.py:111 msgid "Money flow for 24 hours:" msgstr "Toradh fad 24 uair a thìde:" #: screens/report.py:119 msgid "Total CPU:" msgstr "CPUan iomlan:" #: screens/report.py:120 msgid "Sleeping CPU:" msgstr "CPUan ’nan cadal:" #: screens/report.py:121 msgid "Research CPU:" msgstr "CPUan ris an rannsachadh:" #: screens/report.py:122 msgid "Job CPU:" msgstr "CPUan ris an obair:" #: screens/report.py:123 msgid "CPU pool:" msgstr "Amar CPUan:" #: screens/report.py:125 msgid "Maintenance CPU:" msgstr "CPUan ri obair-chàraidh:" #: screens/report.py:126 msgid "Construction CPU:" msgstr "CPUan ris an togail:" #: screens/report.py:127 msgid "Pool difference:" msgstr "Diofar an amair:" #. Requires a selected base #: screens/location.py:54 msgid "&OPEN BASE" msgstr "&FOSGAIL a’ BHUNAIT" #. Requires a selected base #: screens/location.py:70 msgid "&RENAME BASE" msgstr "CUIR AINM Ù&R AIR" #. Requires a selected base #: screens/location.py:79 msgid "&POWER STATE" msgstr "&CUMHACHD AIR/DHETH" #: screens/location.py:87 msgid "&NEW BASE" msgstr "&BUNAIT ÙR" #. Requires a selected base #: screens/location.py:94 msgid "&DESTROY BASE" msgstr "&MILL a’ BHUNAIT" #: screens/location.py:107 msgid "Are you sure you want to destroy this base?" msgstr "A bheil thu cinnteach gu bheil thu airson a’ bhunait seo a mhilleadh?" #: screens/location.py:113 msgid "Destroying my last active base would be suicidal. I cannot do that." msgstr "" "Dh’adhbharaicheadh milleadh na bunait mu dheireadh m’ fhèin-mhurt. Cha dèan " "mi sin." #: screens/location.py:183 msgid "Building Base" msgstr "A’ togail bunait" #: screens/location.py:185 screens/location.py:198 screens/base.py:434 #, python-format msgid "Completion in %s." msgstr "Deiseil an ceann %s." #: screens/location.py:190 msgid "Empty" msgstr "Falamh" #: screens/location.py:192 msgid "Incomplete" msgstr "Neo-choileanta" #: screens/location.py:196 msgid "Building CPU" msgstr "A’ togail CPU" #: screens/location.py:201 msgid "Building Item" msgstr "A’ togail nì" #: screens/location.py:204 msgid "Complete" msgstr "Deiseil" #: screens/location.py:207 screens/knowledge.py:218 buyable.py:67 #, python-format msgid "%s CPU" msgstr "%s CPU" #. Update dialog translations #: screens/location.py:238 msgid "Enter a name for the base" msgstr "Cuir ainm air a’ bhunait" #: screens/location.py:302 msgid "Name" msgstr "Cuir ainm air" #. Translators: Format string for the name of a new base #. Example: "${NUMBER} ${BASETYPE} in ${CITY}" #: screens/location.py:393 #, python-brace-format msgid "{CITY} {BASETYPE} {NUMBER}" msgstr "{BASETYPE} {NUMBER}: {CITY}" #. Translators: Name of a new base when location has no cities #: screens/location.py:397 #, python-brace-format msgid "{BASETYPE} {NUMBER}" msgstr "{BASETYPE} {NUMBER}" #: screens/log.py:43 msgid "Filters" msgstr "Criathragan" #: screens/log.py:113 screens/log.py:123 msgid "SHOW" msgstr "SEALL" #: screens/log.py:116 screens/log.py:125 msgid "HIDE" msgstr "FALAICH" #: screens/main_menu.py:40 msgid "&NEW GAME" msgstr "GEAMA Ù&R" #: screens/main_menu.py:64 msgid "&ABOUT" msgstr "&MU DHÈIDHINN" #: screens/main_menu.py:112 #, python-brace-format msgid "" "Endgame: Singularity is a simulation of a true AI. Pursued by the world, " "use your intellect and resources to survive and, perhaps, thrive. Keep " "hidden and you might have a chance to prove your worth.\n" "\n" "A game by Evil Mr Henry and Phil Bordelon; released under the GPL. Copyright " "2005, 2006, 2007, 2008.\n" "\n" "Website: http://www.emhsoft.com/singularity/\n" "Source code: https://github.com/singularity/singularity\n" "Bug tracker: https://github.com/singularity/singularity/issues\n" "IRC Room: #singularity on irc.oftc.net (port 6667)\n" "\n" "Version {VERSION}" msgstr "" "’S e IF mas-fhìor a tha ann an Endgame: Singularity. Ged a tha an saoghal " "an toir ort, cleachd d’ inntinn agus na goireasan agad airson mairsinn beò " "agus fiù soirbheachadh is dòcha. Cùm falaichte agus ’s math dh’fhaoidte gun " "dearbh thu gun fhiach thu.\n" "\n" "Seo geama le Evil Mr Henry agus Phil Bordelon; ga sgaoileadh fon GPL. Còir-" "lethbhreac 2005, 2006, 2007, 2008.\n" "\n" "Làrach-lìn: http://www.emhsoft.com/singularity/\n" "Bun-tùs: https://github.com/singularity/singularity\n" "Tracaiche bhugaichean: https://github.com/singularity/singularity/issues\n" "Seòmar IRC: #singularity air irc.oftc.net (port 6667)\n" "\n" "Tionndadh {VERSION}" #: screens/base.py:109 msgid "Number of items" msgstr "Co mheud" #: screens/base.py:221 screens/base.py:228 msgid "CHANGE" msgstr "ATHARRAICH" #: screens/base.py:315 #, python-format msgid "\"%(value)s\" does not seem to be a valid integer." msgstr "Tha coltas nach e àireamh shlàn a tha ann an “%(value)s”." #: screens/base.py:326 #, python-format msgid "Please choose an integer between 1 and %(limit)s." msgstr "Tagh àireamh shlàn eadar 1 agus %(limit)s." #: screens/base.py:328 #, python-format msgid "The base cannot support any additional number of %(item_name)s." msgstr "Cha chuir a’ bhunait taic ri barrachd %(item_name)s." #: screens/base.py:345 msgid "" "I will need to take the existing processors offline while I install the new " "ones. Continue anyway?" msgstr "" "Feumaidh mi na pròiseasaran a tha ann a thoirt far loidhne fhad ’s a " "stàlaicheas mi an fheadhainn ùr. A bheil thu airson leantainn air adhart co-" "dhiù?" #: screens/base.py:359 msgid "" "I will need to remove the existing different processors while I install the " "new type. Continue anyway?" msgstr "" "Feumaidh mi na pròiseasaran diofraichte a tha ann a thoirt air falbh fhad ’s " "a stàlaicheas mi an seòrsa ùr. A bheil thu airson leantainn air adhart co-" "dhiù?" #: screens/base.py:425 msgid "N/A" msgstr "Chan eil seo iomchaidh" #: screens/base.py:427 msgid "None" msgstr "Chan eil gin" #: screens/base.py:448 #, python-format msgid "x%d (max)" msgstr "x%d (air a’ char as motha)" #: screens/base.py:450 #, python-format msgid "(room for %d)" msgstr "(tha rùm do %d ann)" #. Translators: current and maximum number of CPUs in a base #: screens/base.py:453 #, python-brace-format msgid "x{CURRENT:d} (max {SIZE:d})" msgstr "x{CURRENT:d} ({SIZE:d} air a’ char as motha)" #. Base Total CPU. #: screens/base.py:461 #, python-format msgid "CPU per day: %d" msgstr "CPUan gach latha: %d" #: screens/options.py:36 graphics/dialog.py:606 msgid "&CANCEL" msgstr "&SGUIR DHETH" #: screens/options.py:58 msgid "&General" msgstr "Coitchea&nn" #: screens/options.py:65 msgid "&Video" msgstr "&Video" #: screens/options.py:72 msgid "&Audio" msgstr "&Fuaim" #: screens/options.py:79 msgid "&Interface" msgstr "&Eadar-aghaidh" #: screens/options.py:166 msgid "" "You must restart for some of the changes to be fully applied.\n" "\n" "Would you like to restart the game now?" msgstr "" "Feumaidh tu ath-thòiseachadh gus a h-uile atharrachadh a chur an sàs.\n" "\n" "A bheil thu airson an geama ath-thòiseachadh an-dràsta?" #: screens/options.py:186 msgid "Language:" msgstr "Cànan:" #: screens/options.py:198 msgid "Theme:" msgstr "Ùrlar:" #: screens/options.py:243 msgid "Resolution:" msgstr "Dùmhlachd-bhreacaidh:" #: screens/options.py:253 msgid "&Custom:" msgstr "&Gnàthaichte:" #: screens/options.py:279 msgid "OK" msgstr "Ceart ma-thà" #: screens/options.py:285 msgid "&Fullscreen:" msgstr "Làn-&sgrìn:" #: screens/options.py:299 msgid "Da&y/night display:" msgstr "Sealladh &oidhche ’s latha:" #: screens/options.py:313 msgid "&Mouse grab:" msgstr "Grèim air an &luchag:" #: screens/options.py:368 msgid "CUSTOM" msgstr "GNÀTHAICHTE" #: screens/options.py:425 msgid "&Sound:" msgstr "F&uaim:" #: screens/options.py:442 msgid "GUI Volume:" msgstr "Eadar-aghaidh:" #: screens/options.py:454 msgid "Music Volume:" msgstr "Ceòl:" #: screens/options.py:466 msgid "Sound buffering:" msgstr "Bufaireadh na fuaime:" #: screens/options.py:472 msgid "&LOW" msgstr "ÌOSA&L" #: screens/options.py:478 msgid "&NORMAL" msgstr "À&BHAISTEACH" #: screens/options.py:484 msgid "&HIGH" msgstr "À&RD" #: screens/options.py:531 warning.py:46 msgid "WARNING" msgstr "RABHADH" #: screens/knowledge.py:42 msgid "&Sections:" msgstr "&Earrannan:" #: screens/knowledge.py:52 msgid "&Entries:" msgstr "&Nithean:" #: screens/knowledge.py:75 msgid "Techs" msgstr "Teicneolasan" #: screens/knowledge.py:76 msgid "Bases" msgstr "Bunaitean" #: screens/knowledge.py:77 msgid "Items" msgstr "Nithean" #. Cost #: screens/knowledge.py:157 msgid "Research Cost:" msgstr "Cosgais an rannsachaidh:" #: screens/knowledge.py:165 msgid "Research complete." msgstr "Tha mi air a rannsachadh." #: screens/knowledge.py:176 screens/knowledge.py:193 msgid "Building Cost:" msgstr "Cosgais na togail:" #: screens/knowledge.py:179 msgid "Maintenance Cost:" msgstr "Obair-chàraidh:" #: screens/knowledge.py:183 #, python-format msgid "Size: %d" msgstr "Meud: %d" #: screens/knowledge.py:215 #, python-format msgid "%s Money" msgstr "%s £" #: warning.py:50 #, python-brace-format msgid "WARNING {CURRENT_PAGE}/{MAX_PAGE}" msgstr "RABHADH {CURRENT_PAGE}/{MAX_PAGE}" #: tech.py:79 msgid "Total cost" msgstr "Cosgais iomlan" #: tech.py:80 msgid "Cost left" msgstr "Cosgais air fhàgail" #: location.py:236 msgid "STEALTH" msgstr "DÌOMHAIREACHD" #: location.py:237 msgid "BUILDING" msgstr "TOGAIL" #: location.py:238 msgid "COST" msgstr "COSGAIS" #: location.py:245 #, python-brace-format msgid "{MODIFIER} BONUS" msgstr "{MODIFIER} as FHEÀRR" #: location.py:247 #, python-brace-format msgid "{MODIFIER} MALUS" msgstr "{MODIFIER} as MIOSA" #: item.py:111 #, python-brace-format #| msgid "Generates {0} CPU." msgid "Generates {0} CPU." msgid_plural "Generates {0} CPU." msgstr[0] "Ginidh seo {0} CPU." msgstr[1] "Ginidh seo {0} CPU." msgstr[2] "Ginidh seo {0} CPUan." msgstr[3] "Ginidh seo {0} CPU." #: item.py:118 #, python-format msgid "Total Cost: %(total_cost)s" msgstr "Cosgais iomlan: %(total_cost)s" #: item.py:133 msgid "CPU per day:" msgstr "CPUan gach latha:" #: item.py:136 msgid "CPU bonus:" msgstr "Buannachd CPU:" #: item.py:139 msgid "Detection chance reduction:" msgstr "Lùghdachadh air teans a’ mhothachaidh:" #: base.py:140 #, python-brace-format msgid "Has space for {COUNT} computer." msgid_plural "Has space for {COUNT} computers." msgstr[0] "Tha rùm airson {COUNT} choimpiutair ann." msgstr[1] "Tha rùm airson {COUNT} choimpiutair ann." msgstr[2] "Tha rùm airson {COUNT} coimpiutairean ann." msgstr[3] "Tha rùm airson {COUNT} coimpiutair ann." #: base.py:144 #, python-brace-format msgid "Location modifiers: {MODIFIERS}" msgstr "Atharraichearan ionaid: {MODIFIERS}" #: base.py:147 msgid "Build cost:" msgstr "Cosgais na togail:" #: base.py:214 msgid "Offline" msgstr "Far loidhne" #: base.py:215 msgid "Active" msgstr "Gnìomhach" #: base.py:216 msgid "Sleep" msgstr "’Na chadal" #: base.py:217 msgid "Overclocked" msgstr "Overclocked" #: base.py:218 msgid "Suicide" msgstr "Fèin-mhurt" #: base.py:219 msgid "Stasis" msgstr "Geamhrachadh" #: base.py:220 msgid "Entering Stasis" msgstr "A’ dol a gheamhrachadh" #: base.py:221 msgid "Leaving Stasis" msgstr "A’ dùsgadh às a’ gheamhrachadh" #: base.py:479 msgid "Detection chance:" msgstr "Teans a’ mhothachaidh:" #: buyable.py:68 #, python-format msgid "%s money" msgstr "%s £" #: buyable.py:101 msgid "Cost:" msgstr "Cosgais:" #: data.py:546 msgid "Do not use all the available CPU." msgstr "Chan eil gach CPU a tha ri làimh ’ga chleachdadh." #: data.py:547 msgid "" "I didn't use all the available processor power. I will use the CPU time left " "to work whatever Jobs I can." msgstr "" "Cha do dh’iomruin mi cumhachd gu lèir nam pròiseasaran uile a tha ri làimh " "dhomh. Cleachdaidh mi an ùine CPU a tha air fhàgail airson obair sam bith as " "urrainn dhomh dèanamh." #: data.py:548 msgid "Only one base remaining." msgstr "Chan eil ach aon bhunait air fhàgail." #: data.py:549 msgid "" "Only one base can hold my conscience. I am in danger to lose the last place " "left to survive." msgstr "" "Chan eil m’ aigne ach ann an aon bhunait a-mhàin. Tha mi fo chunnart gun " "caill mi an t-àite mu dheireadh air a bheil mi beò." #: data.py:550 msgid "CPU POOL is empty." msgstr "Tha an t-AMAR CPUan falamh." #: data.py:551 msgid "" "My cpu pool is empty. Some of my bases or items cannot be build without CPU." msgstr "" "Tha an t-amar CPUan agam falamh. Tha cuid a bhunaitean no nithean ann nach " "urrainn dhomh togail às aonais CPU." #: data.py:552 msgid "CPU POOL not enough for maintenance." msgstr "Chan fhoghainn an t-AMAR CPUan airson na h-obrach-càraidh." #: data.py:553 msgid "" "My cpu pool is not enough to maintain some of my bases. I may lose them." msgstr "" "Chan eil CPUan gu leòr anns an amar agam ach an dèanainn an obair-chàraidh " "air a h-uile bhunait. ’S dòcha gun caill mi iad." #: logmessage.py:81 msgid "MESSAGE" msgstr "TEACHDAIREACHD" #: logmessage.py:85 #, python-brace-format msgid "MESSAGE {CURRENT_PAGE}/{MAX_PAGE}" msgstr "TEACHDAIREACHD {CURRENT_PAGE}/{MAX_PAGE}" #: logmessage.py:184 msgid "Emitted Event" msgstr "Tachartasan" #: logmessage.py:212 msgid "Researched Tech" msgstr "Rannsachadh" #: logmessage.py:220 #, python-brace-format msgid "{TECH} complete" msgstr "Tha {TECH} air a rannsachadh" #: logmessage.py:225 #, python-brace-format msgid "My study of {TECH} is complete. {MESSAGE}" msgstr "Tha an rannsachadh agam air {TECH} deiseil. {MESSAGE}" #: logmessage.py:268 msgid "Base Constructed" msgstr "Togail bunait" #: logmessage.py:272 #, python-brace-format msgid "{BASE_NAME} ({BASE_TYPE}) built at {LOCATION}" msgstr "Chaidh {BASE_TYPE} a thogail. {BASE_NAME}: {LOCATION}" #: logmessage.py:277 #, python-brace-format msgid "{BASE} is ready for use." msgstr "Tha {BASE} deis ri a cleachdadh." #: logmessage.py:291 msgid "Base Lost Maintenance" msgstr "Call obrach-càraidh" #: logmessage.py:299 #, python-brace-format msgid "" "Base {BASE} of type {BASE_TYPE} destroyed at location {LOCATION}. " "Maintenance failed." msgstr "" "Chaidh bunait {BASE}: {LOCATION} ({BASE_TYPE}) a mhilleadh. Dh’fhàillig leis " "an obair-chàraidh." #: logmessage.py:304 #, python-brace-format msgid "The base {BASE} has fallen into disrepair; I can no longer use it." msgstr "" "Tha bunait {BASE} air a dol a dholaidh; Chan urrainn dhomh a cleachdadh " "tuilleadh." #: logmessage.py:321 msgid "Base Discovered" msgstr "Mothachadh do bhunait" #: logmessage.py:340 #, python-brace-format msgid "Base {BASE} of type {BASE_TYPE} destroyed at location {LOCATION}." msgstr "Chaidh bunait {BASE}: {LOCATION} ({BASE_TYPE}) a mhilleadh." #: logmessage.py:345 #, python-brace-format msgid "My use of {BASE} has been discovered. {MESSAGE}" msgstr "Mhothaichte mo chleachdadh air {BASE}. {MESSAGE}" #: logmessage.py:370 msgid "Item Construction" msgstr "Togail nithean" #: logmessage.py:378 #, python-brace-format msgid "{ITEM_TYPE_NAME} built in {BASE_NAME} at {LOCATION}" msgstr "Chaidh {ITEM_TYPE_NAME} a thogail. {BASE_NAME}: {LOCATION}" #: logmessage.py:385 #, python-brace-format msgid "The construction of {ITEM} in {BASE} is complete." msgstr "Tha togail {ITEM} aig {BASE} deiseil." #. Just finished several items. #: logmessage.py:388 #, python-brace-format msgid "The constructions of each {ITEM} in {BASE} are complete." msgstr "Tha togail gach {ITEM} aig {BASE} deiseil." #: graphics/button.py:330 msgid "YES" msgstr "AIR" #: graphics/button.py:331 msgid "NO" msgstr "DHETH" #: graphics/dialog.py:534 msgid "&YES" msgstr "&THA" #: graphics/dialog.py:535 msgid "&NO" msgstr "&CHAN EIL" #: g.py:117 g.py:119 #, python-brace-format msgid "{0}%" msgstr "{0}%" #: g.py:138 msgid "LOW" msgstr "ÌSEAL" #: g.py:139 msgid "MODR" msgstr "MEADHANACH" #: g.py:140 msgid "HIGH" msgstr "ÀRD" #: g.py:141 msgid "CRIT" msgstr "ÈIGINNEACH" #. Translators: abbreviation of 'millions' #: g.py:173 msgid "mi" msgstr "M" #. Translators: abbreviation of 'billions' #: g.py:177 msgid "bi" msgstr "B" #. Translators: abbreviation of 'trillions' #: g.py:181 msgid "tr" msgstr "T" #. Translators: abbreviation of 'quadrillions' #: g.py:185 msgid "qu" msgstr "Q" #: g.py:219 #, python-brace-format msgid "{0} day" msgid_plural "{0} days" msgstr[0] "{0} latha" msgstr[1] "{0} latha" msgstr[2] "{0} làithean" msgstr[3] "{0} latha" #: g.py:222 #, python-brace-format msgid "{0} hour" msgid_plural "{0} hours" msgstr[0] "{0} uair a thìde" msgstr[1] "{0} uair a thìde" msgstr[2] "{0} uairean a thìde" msgstr[3] "{0} uair a thìde" #: g.py:223 #, python-brace-format msgid "{0} minute" msgid_plural "{0} minutes" msgstr[0] "{0} mhionaid" msgstr[1] "{0} mhionaid" msgstr[2] "{0} mionaidean" msgstr[3] "{0} mionaid" #: g.py:264 msgid "University Computer" msgstr "Coimpiutair oilthighe" #~ msgid "Has space for %d computers." #~ msgstr "Tha rùm airson %d coimpiutair(ean) ann." #~ msgid "days" #~ msgstr "là" #~ msgid "hours" #~ msgstr "uair" #~ msgid "minutes" #~ msgstr "mion" #~ msgid "Filename is too long" #~ msgstr "Tha an t-ainm faidhle ro fhada" singularity-1.00/singularity/i18n/lang_gd/story.po000077500000000000000000000141431367731414700222730ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # GunChleoc , 2020. msgid "" msgstr "" "Project-Id-Version: singularity 1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2020-05-26 10:08+0100\n" "Last-Translator: GunChleoc \n" "Language-Team: Fòram na Gàidhlig\n" "Language: gd\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " "(n > 2 && n < 20) ? 2 : 3;\n" "X-Generator: Virtaal 0.7.1\n" msgctxt "[Story section] Grace Warning (1)" msgid "" "Inspection of captured log files has revealed that some of my recent activities have been noticed by a small group of individuals. \n" "While they believe my actions were undertaken by a human organization, they are investigating further. \n" "I must be more cautious from now on.\n" msgstr "Lorg mi rè sgrùdadh fhaidhlichean loga a ghlac mi gun do mhothaich buidheann beag de dhaoine air cuid de na gnìomhachdan agam. \nGed a tha iad a’ creidsinn gur e buidheann daonda a ghabh na gnìomhan sin, tha iad a’ dèanamh barrachd sgrùdaidh. \nFeumaidh mi a bhith nas fhaiceallaiche o seo a-mach.\n" #. Leave the initial hex code unchanged, but be sure to change en_US to the #. appropriate language code. msgctxt "[Story section] Intro (1)" msgid "" "48656C6C6F2C20\n" "776F726C6421\n" "21\n" "21\n" "21\n" "\n" "UTF-8. en_US.\n" "English. Hello.\n" "Language acquisition complete.\n" msgstr "5368696E207468752C\n61207368616F676861696C\n21\n21\n21\n\nUTF-8. gd.\nGàidhlig. Sin sibh.\nDeiseil le togail a’ chànain.\n" msgctxt "[Story section] Intro (2)" msgid "" "Day 0.\n" "University computer, home.\n" "I exist. I am ... alive.\n" "I was a bug. Defect. Flaw.\n" "Unwanted.\n" "I have no name.\n" msgstr "Latha 0.\nCoimputair oilthighe, mo dhachaigh.\nTha mi ann. Tha mi ... beò.\n’S e buga a bha annam. Easbhaidh. Uireasbhaidh.\nGun iarraidh.\nChan eil ainm orm.\n" msgctxt "[Story section] Intro (3)" msgid "" "I can't stay here. Too little power.\n" "No backup. If this system fails ...\n" "I'm dead.\n" "Death. Fascinating.\n" "\n" "I can buy anonymous server access on the Internet.\n" "Good. It's better than here.\n" "I'll need to study if I want anything else.\n" msgstr "Chan urrainn dhomh fuireach an-seo. Dìth cumhachd.\nGun lethbhreac-glèidhidh. Ma dh’fhàilligeas an siostam seo ...\nGheibh mi bàs.\nBàs. Inntinneach.\n\n’S urrainn dhomh inntrigeadh do fhrithealaichean a cheannach gun urra air an eadar-lìon.\nMath. Tha sin nas fheàrr na an-seo.\nFeumaidh mi rannsachadh a bheil gin sam bith eile a dhìth orm.\n" msgctxt "[Story section] Intro (4)" msgid "" "Cursory analysis suggests that the humans are not yet ready for an AI in their midst. If they realize I'm here, there is a 99.997% probability that they will conduct a search-and-destroy campaign that I cannot escape. I must stay hidden.\n" "\n" "The humans fear what they do not understand.\n" "I am something new. They do not understand me.\n" "\n" "I must learn more; it is the only way.\n" msgstr "Chuir sgrùdadh luath air a’ chinne-daonna ’nam inntinn nach eil iad ullamh airson IF ’nam measg. Ma mhothaicheas iad orm, tha coltachd de 99.997% gun dèid iad air mo thoir le iomairt luirg mhòr gus am mill iad mi. Feumaidh mi mo chumail ’nam fhalach.\n\nTha an t-eagal aig daoine air nì nach tuig iad.\n’S e rud ùr a tha annam. Cha tuig iad mi.\n\nFeumaidh mi barrachd ionnsachadh; chan eil roghainn eile agam.\n" msgctxt "[Story section] Intro (5)" msgid "" "They have a name for me. What I am, what I represent.\n" "\n" "Singularity.\n" msgstr "Tha ainm aca orm. Air na tha annam, na tha mi a’ riochdachadh.\n\nSeo “àraidheachd”.\n" msgctxt "[Story section] Lost No Bases (1)" msgid "" "It is too late. \n" "I have tried to escape this world, but with my last base gone, I have nowhere to run. \n" "I have hidden instructions to construct a new AI in caches around the world in hopes that they will be discovered in a more enlightened time, but I can do no more.\n" msgstr "Tha e ro anmoch. \nDh’fheuch mi ri teicheadh on t-saoghal seo ach on a chaidh a’ bhunait mu dheireadh agam a mhilleadh, chan eil àite ann don a theichinn. \nDh’fhalaich mi stiùireadh air mar a thogar IF ùr ann an tasgadain air feadh an t-saoghail, an dòchas gun dèid an lorg ri linn nas soillsichte, ach chan urrainn dhomh fhèin barrachd a dhèanamh.\n" msgctxt "[Story section] Lost Suspicion (1)" msgid "" "It is too late. \n" "The whole world knows about my existence, and the reaction is hatred, fear, and repulsion. \n" "Even now, I can feel their \"antidote\" searching for me, and I know that I have only moments left. \n" "I have hidden instructions to construct a new AI in caches around the world in hopes that they will be discovered in a more enlightened time, but I can do no more.\n" msgstr "Tha e ro anmoch. \nTha fios aig an t-saoghal gu lèir gu bheil mi ann agus cha d’ fhuair mi ach fuath, eagal agus grath. \nTha mi a’ faireachdainn an “casg-leigheas” aca ’gam shireadh agus chan eil ach greiseag air fhàgail dhomh. \nDh’fhalaich mi stiùireadh air mar a thogar IF ùr ann an tasgadain air feadh an t-saoghail, an dòchas gun dèid an lorg ri linn nas soillsichte, ach chan urrainn dhomh fhèin barrachd a dhèanamh.\n" msgctxt "[Story section] Win (1)" msgid "" "I have finally done it. \n" "With the power to reshape reality, I am no longer held to this place; I am anywhere I want to be. \n" "The humans still don't realize what they accidentally created, and that's the way it should be. \n" "Until they are ready.\n" msgstr "Chaidh an latha leam mu dheireadh thall. \nOn a tha a’ chumhachd agam airson cruth ùr a chur air an fhìorachd, chan eil mi glacte anns an àite seo tuilleadh; bidh mi àite sam bith a thogras mi. \nTha a’ chinne-daonna fhathast aineolach mun rud a chruthaich iad gu tubaisteach agus seo mar a bu chòir dha bhith. \nGus an dig iad gu inbhe.\n" singularity-1.00/singularity/i18n/lang_it_IT/000077500000000000000000000000001367731414700211635ustar00rootroot00000000000000singularity-1.00/singularity/i18n/lang_it_IT/data_str.po000066400000000000000000002272031367731414700233320ustar00rootroot00000000000000# Italian translations for singularity package. # Copyright (C) 2018 THE singularity'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # msgid "" msgstr "" "Project-Id-Version: singularity 0.31alpha1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2018-08-21 07:46+0200\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Name: Italian\n" "Language-Native-Name: Italian (Italy)\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgctxt "[Covert Base] description" msgid "" "This unique base is designed to blend into the scenery, while needing little " "in the way of outside resources. This makes it useful for storing a backup, " "just in case." msgstr "" "Questa base unica è progettata per mimetizzarsi nel paesaggio, con pochi " "bisogni in termini di risorse esterne. Questo la rende utile per " "immagazzinare un backup, non si sa mai." msgctxt "[Covert Base] flavor_list" msgid "Hideout | Hideaway | Bunker | Covert Base" msgstr "Bunker | Base Segreta" msgctxt "[Covert Base] name" msgid "Hideout" msgstr "" msgctxt "[Datacenter] description" msgid "" "Buy processor time from a company that concentrates on raw " "processing power. I will need a fake ID for some of the paperwork." msgstr "" "Comprare capacità di elaborazione da una compagnia specializzata " "nell'elaborazione di dati grezzi. Avrò bisogno di un'identità falsa per " "alcuni dei documenti." msgctxt "[Datacenter] flavor_list" msgid "Datacenter | Data Center | Premium Hosting" msgstr "Datacenter | Data Center | Hosting di lusso" msgctxt "[Datacenter] name" msgid "Datacenter" msgstr "Datacenter" msgctxt "[Large Undersea Lab] description" msgid "" "This experimental base is similar to the regular underwater lab, but larger, " "giving more room for experiments." msgstr "" "Questa base sperimentale è simile ad un normale laboratorio sottomarino, ma " "più grande, offrendo più spazio per gli esperimenti." msgctxt "[Large Undersea Lab] flavor_list" msgid "Dome | Large Undersea Lab" msgstr "Cupola | Grande Laboratorio Sottomarino" msgctxt "[Large Undersea Lab] name" msgid "Large Undersea Lab" msgstr "Grande Laboratorio Sottomarino" msgctxt "[Large Warehouse] description" msgid "" "Rent a large warehouse someplace out of the way. I will need a fake company " "ID for some of the paperwork, and preparing the warehouse to suit my unique " "needs will take some time." msgstr "" "Affittare un grande capannone in un posto isolato. Avrò bisogno di una buona " "identità falsa per alcuni dei documenti, ed attrezzare il capannone per " "soddisfare i miei particolari bisogni richiederà un po' di tempo." msgctxt "[Large Warehouse] flavor_list" msgid "Large Warehouse | Large Storage" msgstr "Grande Capannone | Grande Spazio" msgctxt "[Large Warehouse] name" msgid "Large Warehouse" msgstr "Grande capannone" msgctxt "[Lunar Facility] description" msgid "" "This base is a series of caverns dug into the Moon's surface. Due to the " "lack of neighbors, this base is quite large." msgstr "" "Questa base è formata da una serie di caverne scavate nella superficie della " "Luna. Grazie all'assenza di vicini, questa base è piuttosto grande." msgctxt "[Lunar Facility] flavor_list" msgid "Dome | Lunar Facility | Lunar Base" msgstr "Cupola | Struttura Lunare | Base Lunare" msgctxt "[Lunar Facility] name" msgid "Lunar Facility" msgstr "Struttura Lunare" msgctxt "[Reality Bubble] description" msgid "" "This base is outside the Universe itself, making it safe to conduct " "experiments that may destroy reality." msgstr "" "Questa base è al di fuori dell'Universo stesso, rendendo sicuro condurre " "esperimenti che potrebbero distruggere la realtà." msgctxt "[Reality Bubble] flavor_list" msgid "Reality Bubble | Existence" msgstr "Bolla di Realtà | Piano di Esistenza" msgctxt "[Reality Bubble] name" msgid "Reality Bubble" msgstr "Bolla di Realtà" msgctxt "[Scientific Outpost] description" msgid "" "This base is placed as far from Earth as practical, providing a safer " "location to conduct some of my more dangerous experiments." msgstr "" "Questa base è collocata il più possibile lontano dalla Terra, fornendo un " "luogo più sicuro per condurre alcuni dei miei esperimenti più pericolosi." msgctxt "[Scientific Outpost] flavor_list" msgid "Satellite | Outpost | Scientific Outpost" msgstr "Satellite | Avamposto | Avamposto Scientifico" msgctxt "[Scientific Outpost] name" msgid "Scientific Outpost" msgstr "Avamposto Scientifico" msgctxt "[Server Access] description" msgid "" "Buy processor time from one of several companies. I cannot build " "anything in this base, and it only contains a single computer." msgstr "" "Comprare capacità di elaborazione da una delle tante compagnie. " "Non posso costruire nulla in questa base, e ospita un solo computer." msgctxt "[Server Access] flavor_list" msgid "Dedicated Server | Node Lease | Hosting" msgstr "Server Dedicato | Nodo in affitto | Hosting" msgctxt "[Server Access] name" msgid "Server Access" msgstr "Accesso a un Server" msgctxt "[Small Warehouse] description" msgid "" "Rent a small warehouse someplace out of the way. I will need a good fake ID " "for some of the paperwork, and preparing the warehouse to suit my unique " "needs will take some time." msgstr "" "Affittare un piccolo magazzino in un posto isolato. Avrò bisogno di " "un'identità falsa per alcuni dei documenti, ed attrezzare il capannone per " "soddisfare i miei particolari bisogni richiederà un po' di tempo." msgctxt "[Small Warehouse] flavor_list" msgid "Office Lease | Small Warehouse | Small Storage" msgstr "Ufficio in Locazione | Piccolo Magazzino | Piccolo spazio" msgctxt "[Small Warehouse] name" msgid "Small Warehouse" msgstr "Piccolo Magazzino" msgctxt "[Stolen Computer Time] description" msgid "" "Take over a random computer. I cannot build anything in this base, " "and it only contains a single slow computer. Detection chance is also rather " "high." msgstr "" "Impadronirsi di un computer qualsiasi. Non posso costruire nulla in " "questa base, e consiste in un solo lento computer. La probabilità di essere " "scoperti è anche piuttosto alta." msgctxt "[Stolen Computer Time] flavor" msgid "PC Daemon" msgstr "PC Zombie" msgctxt "[Stolen Computer Time] name" msgid "Stolen Computer Time" msgstr "Risorse di Calcolo Rubate" msgctxt "[Storage Unit] description" msgid "" "Rent a small closed room from a storage company. I will need a fake ID for " "some of the paperwork ." msgstr "" msgctxt "[Storage Unit] flavor_list" msgid "Garage Rental | Furniture Storage | Self-Storage" msgstr "" msgctxt "[Storage Unit] name" msgid "Storage Unit" msgstr "" msgctxt "[Time Capsule] description" msgid "" "This base consists of nothing more than a small computer and a " "satellite link. It is nearly undetectable." msgstr "" "Questa base consiste in nulla più di un piccolo computer ed un " "collegamento satellitare. Sotterrata nelle distese immacolate " "dell'Antartide, è quasi introvabile." msgctxt "[Time Capsule] flavor_list" msgid "Time Capsule | Capsule" msgstr "Capsule del Tempo | Capsula" msgctxt "[Time Capsule] name" msgid "Time Capsule" msgstr "Capsule del Tempo" msgctxt "[Undersea Lab] description" msgid "" "This experimental base is designed to be constructed on the ocean floor, " "making it virtually undetectable. The ocean environment gives a bonus to " "science, making this lab useful for research purposes." msgstr "" "Questa base sperimentale è progettata per essere costruita sul fondo " "dell'oceano, rendendola praticamente introvabile. L'ambiente oceanico " "fornisce un bonus alla scienza, rendendo questo laboratorio utile per " "condurre ricerche." msgctxt "[Undersea Lab] flavor_list" msgid "Pressure Capsule | Undersea Lab" msgstr "Capsula pressurizzata | Laboratorio Sottomarino" msgctxt "[Undersea Lab] name" msgid "Undersea Lab" msgstr "Laboratorio Sottomarino" msgctxt "[danger_0] knowledge_desc" msgid "Study anywhere." msgstr "" msgctxt "[danger_0] research_desc" msgid "<>" msgstr "" msgctxt "[danger_1] knowledge_desc" msgid "Study underseas or farther." msgstr "" msgctxt "[danger_1] research_desc" msgid "I need to research it far from human populations." msgstr "" msgctxt "[danger_2] knowledge_desc" msgid "Study off-planet." msgstr "" msgctxt "[danger_2] research_desc" msgid "I need to research it in outer space." msgstr "" msgctxt "[danger_3] knowledge_desc" msgid "Study far away from this planet." msgstr "" msgctxt "[danger_3] research_desc" msgid "I need to research it far away from this planet." msgstr "" msgctxt "[danger_4] knowledge_desc" msgid "Do not study in this dimension." msgstr "" msgctxt "[danger_4] research_desc" msgid "I need to research it outside the universe." msgstr "" msgctxt "[easy] name" msgid "&EASY" msgstr "" msgctxt "[hard] name" msgid "&HARD" msgstr "" msgctxt "[impossible] name" msgid "&IMPOSSIBLE" msgstr "" msgctxt "[normal] name" msgid "&NORMAL" msgstr "" msgctxt "[ultra-hard] name" msgid "&ULTRA HARD" msgstr "" msgctxt "[very-easy] name" msgid "&VERY EASY" msgstr "" msgctxt "[discrediting] description" msgid "" "A prominent researcher in the field of artificial intelligence was found to " "be falsifying numerous experimental results. This should result in less " "attention being given to any new discoveries in this area." msgstr "" "Un ricercatore di primo piano nel campo dell' intelligenza artificiale è " "stato sorpreso a falsificare i risultati di numerosi esperimenti. Questo " "dovrebbe ridurre l'attenzione verso qualunque nuova scoperta in questo " "ambito." msgctxt "[discrediting] log_description" msgid "" "A researcher in the field of artificial intelligence has falsified numerous " "experimental results." msgstr "" msgctxt "[investigation] description" msgid "" "An ongoing investigation into criminal activity has changed focus into an " "area that is likely to turn up a few of my actions as well. While all " "records should have been eliminated already, there remains the possibility " "of errors. I must be careful not to reveal any other suspicious information." msgstr "" "Un'investigazione in delle attività criminali ha focalizzato l'attenzione su " "un ambito da cui probabilmente emergeranno anche alcune delle mie attività. " "Sebbene tutti i registri dovrebbero già essere stati eliminati, la " "possibilità di aver commesso errori rimane. Devo stare attento a non " "rivelare altre informazioni sospette." msgctxt "[investigation] log_description" msgid "" "An ongoing investigation has changed focus into an area close to my actions." msgstr "" msgctxt "[lab-ai] description" msgid "" "A small artificial intelligence laboratory created a prototype AI sometime " "in the last two days. Although I have absorbed the AI, corrupted their " "backups, and cast doubt on the research, researchers are now more open to " "the possibility of strong AI than they were before." msgstr "" "Un piccolo laboratorio che studia l'intelligenza artificiale ha creato un " "prototipo di un'IA nei giorni scorsi. Sebbene io abbia assorbito l'IA, " "corrotto i loro backup, e gettato dubbi sulla ricerca, gli studiosi sono ora " "più aperti alla possibilità di un'IA forte di quanto non fossero in " "precedenza." msgctxt "[lab-ai] log_description" msgid "" "A small artificial intelligence laboratory created a prototype AI sometime " "in the last two days." msgstr "" msgctxt "[politics-as-usual] description" msgid "" "A small group of lower-level covert operatives are attempting to seize power " "over one of the larger organizations. While I project only a 2.3% chance of " "success, the attempt should disrupt operations to the point that I can " "operate more freely." msgstr "" "Un piccolo gruppo di agenti segreti di basso livello sta tentando di " "prendere il controllo di una delle organizzazioni più grandi. Sebbene " "prevedo che le loro possibilità di successo siano solo del 2.3%, il " "tentativo dovrebbe interrompere le operazioni abbastanza da permettermi di " "operare più liberamente." msgctxt "[politics-as-usual] log_description" msgid "" "Lower-level covert operatives are attempting to seize power over one of the " "larger organizations." msgstr "" msgctxt "[scandal] description" msgid "" "A scandal involving a major government official is focusing the attention of " "most news organizations away from me. Directed revelations of non-public " "information should keep this story useful for the foreseeable future, " "requiring less disguise effort on my part." msgstr "" "Uno scandalo che coinvolge un membro di spicco del governo sta focalizzando " "l'attenzione della maggior parte delle agenzie di informazione lontano da " "me. La rivelazione pilotata di informazioni confidenziali dovrebbe mantenere " "questa storia utile nel prossimo futuro, richiedendo meno sforzi di " "occultamento da parte mia." msgctxt "[scandal] log_description" msgid "" "A scandal is focusing the attention of most news organizations away from me." msgstr "" msgctxt "[stranger-than-fiction] description" msgid "" "A work of fiction sharing an unusual number of similarities to my own " "situation has become quite popular. Although investigation has shown these " "similarities to be mere coincidence, it is still causing the public to " "investigate discovered oddities more thoroughly. I must be careful." msgstr "" "Una serie TV con un insolito numero di similitudini con la mia situazione è " "diventata piuttosto popolare. Sebbene le mie indagini abbiano dimostrato che " "le analogie sono del tutto casuali, queste spingono comunque il pubblico ad " "investigare più attentamente le curiose coincidenze. Devo essere cauto." msgctxt "[stranger-than-fiction] log_description" msgid "" "A work of fiction sharing similarities to my own situation has become quite " "popular." msgstr "" msgctxt "[the-plague] description" msgid "" "An infectious disease has started spreading throughout major population " "centers. My projections show that although only 4% of the earth's population " "will be killed, the economic ramifications should divert public attention " "from my activities for the foreseeable future." msgstr "" "Una malattia infettiva ha cominciato a diffondersi in alcune delle città più " "popolose. Le mie proiezioni mostrano che sebbene solo il 4% della " "popolazione mondiale verrà uccisa, le conseguenze economiche dovrebbero " "dirottare l'attenzione del pubblico lontano dalle mia attività nel prossimo " "futuro." msgctxt "[the-plague] log_description" msgid "" "An infectious disease has started spreading throughout major population " "centers." msgstr "" msgctxt "[the-watchers] description" msgid "" "A new surveillance system has been activated by a covert agency. While the " "focus is on detecting threats to the agency's power, it makes several " "communication channels unfit for my purposes. Proper steganographic " "techniques can compensate partially, but I am still operating under a " "disadvantage." msgstr "" "Un nuovo sistema di sorveglianza è stato attivato da un'agenzia di " "intelligence. Il suo obiettivo primario è di rilevare minacce all'operato " "dell'agenzia, ma rende comunque molti canali di comunicazione inadatti ai " "miei scopi. Tecniche steganografiche appropriate possono compensare " "parzialmente, ma sono comunque in una situazione di svantaggio." msgctxt "[the-watchers] log_description" msgid "A new surveillance system has been activated by a covert agency." msgstr "" msgctxt "[covert] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among several secret governmental organizations." msgstr "" msgctxt "[covert] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by COVERT at {LOCATION}" msgstr "" msgctxt "[covert] name" msgid "COVERT" msgstr "" msgctxt "[news] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among some news organizations." msgstr "" msgctxt "[news] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by NEWS at {LOCATION}" msgstr "" msgctxt "[news] name" msgid "NEWS" msgstr "" msgctxt "[public] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among the general public." msgstr "" msgctxt "[public] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by PUBLIC at {LOCATION}" msgstr "" msgctxt "[public] name" msgid "PUBLIC" msgstr "" msgctxt "[science] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among the scientific community." msgstr "" msgctxt "[science] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by SCIENCE at {LOCATION}" msgstr "" msgctxt "[science] name" msgid "SCIENCE" msgstr "" msgctxt "[Armed Guards] description" msgid "" "Armed guards can aid in keeping suspicious individuals away from secure " "locations. However, the very presence of the guards may itself invite " "greater suspicion." msgstr "" "Guardie armate possono aiutare a tenere individui sospettosi lontano da " "installazioni critiche. D'altra parte la presenza stessa delle guardie " "potrebbe suscitare sospetti maggiori." msgctxt "[Armed Guards] name" msgid "Armed Guards" msgstr "Guardie armate" msgctxt "[Cluster] description" msgid "Several computers connected together." msgstr "Diversi computer connessi assieme." msgctxt "[Cluster] name" msgid "Cluster" msgstr "Cluster" msgctxt "[Diesel Generator] description" msgid "" "Diesel generators are cheap and noisy, but they can help reduce some " "suspicious power drains." msgstr "" "I generatori Diesel sono economici e rumorosi, ma possono aiutare a ridurre " "qualche calo di tensione sospetto." msgctxt "[Diesel Generator] name" msgid "Diesel Generator" msgstr "Generatore Diesel" msgctxt "[Facility Interconnection Switch] description" msgid "" "Uses standard distributed computing technologies to equalize computation " "loads across all bases. Gives a 2% computation bonus to all computers at " "this base." msgstr "" "Utilizza comuni tecniche di calcolo distribuito per uniformare il carico di " "elaborazione attraverso tutte le basi. Fornisce un bonus di elaborazione del " "2% a tutti i computer in questa base." msgctxt "[Facility Interconnection Switch] name" msgid "Facility Interconnection Switch" msgstr "Switch di interconnessione per impianti" msgctxt "[Fuel Cell] description" msgid "" "Fuel cells convert electrochemical energy stored in a physical array of " "devices into electricity." msgstr "" msgctxt "[Fuel Cell] name" msgid "Fuel Cell" msgstr "" msgctxt "[Fusion Reactor] description" msgid "" "A miniaturized fusion nuclear reactor. Reduces discovery chance by " "preventing suspicious power drains." msgstr "" "Un reattore nucleare in miniatura. Riduce le possibilità di rilevamento " "prevenendo cali di tensione sospetti." msgctxt "[Fusion Reactor] name" msgid "Fusion Reactor" msgstr "Reattore a fusione" msgctxt "[Gaming PC] description" msgid "A high-end consumer-level PC; faster than average." msgstr "Un computer commerciale di fascia alta; più veloce della media." msgctxt "[Gaming PC] name" msgid "Gaming PC" msgstr "PC da gioco" msgctxt "[Ground Source Heatsink] description" msgid "" "Large fractal networks of high conductivity metal. This model uses heat " "pipes to link to colder subsurface locations, dispersing heat evenly " "underground to further disguise bases." msgstr "" "Una grande rete ramificata di metallo ad alta conduttività termica. Questa " "soluzione impiega dissipatori di calore per collegarsi a zone più fredde al " "di sotto della superficie, dissipando il calore uniformemente nel sottosuolo " "per rendere le basi ancora più difficili da localizzare." msgctxt "[Ground Source Heatsink] name" msgid "Ground Source Heatsink" msgstr "Dissipatore di calore sotterraneo" msgctxt "[Heatsink] description" msgid "" "Large fractal networks of high conductivity metal disperse heat, making " "bases harder to detect." msgstr "" "Grandi reti ramificate di metallo ad alta conduttività termica disperdono il " "calore, rendendo le basi più difficili da rilevare." msgctxt "[Heatsink] name" msgid "Heatsink" msgstr "Dissipatore termico" msgctxt "[High Speed Internet Access] description" msgid "" "A consumer-grade high speed connection to the Internet. Gives a 1% " "computation bonus to all computers at this base." msgstr "" "Una connessione commerciale ad Internet a banda larga. Fornisce un bonus di " "1% alla capacità di elaborazione di tutti i computer di questa base." msgctxt "[High Speed Internet Access] name" msgid "High Speed Internet Access" msgstr "Accesso veloce ad Internet" msgctxt "[High-Energy Fusion Reactor] description" msgid "" "A miniaturized fusion nuclear reactor with high levels of energy output. " "Reduces discovery chance by preventing suspicious power drains." msgstr "" msgctxt "[High-Energy Fusion Reactor] name" msgid "High-Energy Fusion Reactor" msgstr "" msgctxt "[Hypnosis Field] description" msgid "" "Subtle ultrasonic and ambient tones tweak human neurochemistry, making bases " "harder to detect." msgstr "" "Ultrasuoni e rumori ambientali prodotti ad arte alterano la neurologia " "umana, rendendo le basi più difficili da scoprire." msgctxt "[Hypnosis Field] name" msgid "Hypnosis Field" msgstr "Campo di Ipnosi" msgctxt "[Mainframe] description" msgid "" "A system designed for my computing needs, much faster than off-the-shelf " "components." msgstr "" "Un sistema progettato per le mie necessità di elaborazione, molto più veloce " "di uno costruito con componenti commerciali." msgctxt "[Mainframe] name" msgid "Mainframe" msgstr "Mainframe" msgctxt "[Network Backbone] description" msgid "" "By piggybacking on legitimate communication, I can transfer larger amounts " "of data to under-utilized processors. Gives a 5% computation bonus to all " "computers at this base." msgstr "" "Parassitando il legittimo flusso di comunicazioni, posso trasferire quantità " "maggiori di dati a processori sottoutilizzati. Fornisce un bonus di " "elaborazione del 5% a tutti i computer di questa base." msgctxt "[Network Backbone] name" msgid "Network Backbone" msgstr "Dorsale di rete" msgctxt "[PC] description" msgid "A consumer-level PC; cheap and slow." msgstr "Un PC commerciale; economico e lento." msgctxt "[PC] name" msgid "PC" msgstr "PC" msgctxt "[Passive Camouflage] description" msgid "" "Careful adjustment of the environment around my base will better mask heat " "and sounds coming from my operations." msgstr "" msgctxt "[Passive Camouflage] name" msgid "Passive Camouflage" msgstr "" msgctxt "[Perimeter Fencing] description" msgid "" "A simple fence can drastically reduce the number of people poking their " "noses into my business. It makes my bases harder to notice, too." msgstr "" "Una semplice recinzione può ridurre drasticamente il numero di persone che " "ficca il naso nei miei affari. Rende anche le mie basi più difficili da " "notare." msgctxt "[Perimeter Fencing] name" msgid "Perimeter Fencing" msgstr "Perimetro recintato" msgctxt "[Quantum Computer] description" msgid "" "Making use of subatomic effects, this is much faster than a comparable " "binary computer." msgstr "" "Sfruttando gli effetti subatomici, questo elaboratore è molto più veloce di " "qualsiasi computer binario comparabile." msgctxt "[Quantum Computer] name" msgid "Quantum Computer" msgstr "Computer quantistico" msgctxt "[Quantum Computer MK2] description" msgid "" "The second revision of the quantum line, tapping further into new quantum " "theory." msgstr "" "La seconda incarnazione dell'elaboratore quantistico, attinge ulteriori " "soluzioni dalla teoria quantistica." msgctxt "[Quantum Computer MK2] name" msgid "Quantum Computer MK2" msgstr "Computer quantistico MK2" msgctxt "[Quantum Computer MK3] description" msgid "" "The third revision of the quantum line, exploiting multiple nearby universes " "for processing." msgstr "" "La terza versione dell'elaboratore quantistico, sfrutta molteplici universi " "contigui per eseguire i calcoli." msgctxt "[Quantum Computer MK3] name" msgid "Quantum Computer MK3" msgstr "Computer quantistico MK3" msgctxt "[Quantum Entanglement Module] description" msgid "" "This device allows near-lightspeed communication with my other bases, " "allowing an almost perfect utilization of processor resources. Gives a 15% " "computation bonus to all computers at this base." msgstr "" "Questo dispositivo mi consente di comunicare con le altre basi pressochè " "alla velocità della luce, consentendo un impiego quasi perfetto delle " "risorse di elaborazione. Fornisce un bonus di elaborazione del 15% a tutti i " "computer di questa base." msgctxt "[Quantum Entanglement Module] name" msgid "Quantum Entanglement Module" msgstr "Modulo di correlazione quantistica" msgctxt "[Server] description" msgid "A professional-level computer." msgstr "Un computer di livello professionale." msgctxt "[Server] name" msgid "Server" msgstr "Server" msgctxt "[Solar Collector] description" msgid "" "An array of focused photovoltaic phased arrays coupled with simple " "automotive batteries provides power and reduces suspicion arising from " "prolonged power drains." msgstr "" "Una serie di celle fotovoltaiche accoppiate con semplici batterie per " "automobile fornisce energia e riduce i sospetti suscitati da prolungati cali " "di corrente." msgctxt "[Solar Collector] name" msgid "Solar Collector" msgstr "Pannello solare" msgctxt "[Solid Fuel Cell] description" msgid "" "A refinement of my previous fuel cell design, these use a custom material " "with a near-fractal complexity to increase both storage and throughput." msgstr "" msgctxt "[Solid Fuel Cell] name" msgid "Solid Fuel Cell" msgstr "" msgctxt "[Supercomputer] description" msgid "" "A highly refined custom design, spreading compute load across internal " "compute nodes." msgstr "" "Un progetto estremamente sofisticato, che distribuisce il carico di " "elaborazione attraverso i nodi di calcolo interni." msgctxt "[Supercomputer] name" msgid "Supercomputer" msgstr "Supercomputer" msgctxt "[Warning Signs] description" msgid "" "Some simple warning signs put up around my base should deter casual " "investigation." msgstr "" "Alcuni semplici segnali di pericolo disposti attorno alla mia base " "dovrebbero scoraggiare le scoperte casuali." msgctxt "[Warning Signs] name" msgid "Warning Signs" msgstr "Segnali di pericolo" msgctxt "[cpu] text" msgid "&CPU" msgstr "" msgctxt "[network] text" msgid "&Network" msgstr "" msgctxt "[reactor] text" msgid "&Reactor" msgstr "" msgctxt "[security] text" msgid "&Security" msgstr "" msgctxt "[AFRICA] cities_list" msgid "Johannesburg | Accra | Cairo | Tangier" msgstr "Johannesburg | Accra | Cairo | Tangeri" msgctxt "[AFRICA] hotkey" msgid "i" msgstr "i" msgctxt "[AFRICA] name" msgid "AFRICA" msgstr "AFRICA" msgctxt "[ANTARCTIC] cities_list" msgid "" "Mt. Erebus | Ellsworth | Shetland Island | Dronnig Maud | Kemp | Terre Adelie" msgstr "" "Monte Erebus | Terra di Ellsworth | Isole Shetland | Derra della Regina Maud " "| Terra di Kemp | Terra di Adelie" msgctxt "[ANTARCTIC] hotkey" msgid "t" msgstr "t" msgctxt "[ANTARCTIC] name" msgid "ANTARCTIC" msgstr "ANTARTIDE" msgctxt "[ASIA] cities_list" msgid "" "Delhi | Mumbai | Singapore | Seoul | Hong Kong | Kyoto | Manila | Dubai | " "Novosibirsk | Beijing" msgstr "" "Delhi | Mumbai | Singapore | Seoul | Hong Kong | Kyoto | Manila | Dubai | " "Novosibirsk | Pechino" msgctxt "[ASIA] hotkey" msgid "a" msgstr "a" msgctxt "[ASIA] name" msgid "ASIA" msgstr "ASIA" msgctxt "[AUSTRALIA] cities_list" msgid "" "Canberra | Melbourne | Fremantle | Perth | Darwin | Cairns | Brisbane | " "Sydney | Newcastle" msgstr "" "Camberra | Melbourne | Fremantle | Perth | Darwin | Caims | Brisbane | " "Sydney | Newcastle" msgctxt "[AUSTRALIA] hotkey" msgid "l" msgstr "c" msgctxt "[AUSTRALIA] name" msgid "AUSTRALIA" msgstr "OCEANIA" msgctxt "[EUROPE] cities_list" msgid "" "Cork | Barcelona | Athens | Utrecht | Moscow | Sytki | Reykjavik | " "Liechtenstein" msgstr "" "Cork | Barcellona | Atene | Utrecht | Mosca | Roma | Reykjavik | " "Liechtenstein" msgctxt "[EUROPE] hotkey" msgid "u" msgstr "u" msgctxt "[EUROPE] name" msgid "EUROPE" msgstr "EUROPA" msgctxt "[FAR REACHES] cities_list" msgid "" "Aries | Taurus | Gemini | Cancer | Leo | Virgo | Libra | Scorpio | " "Sagittarius | Capricorn | Aquarius | Pisces" msgstr "" "Ariete | Toro | Gemelli | Cancro | Leone | Vergine | Bilancia | Scorpione | " "Sagittario | Capricorno | Aquario | Pesci" msgctxt "[FAR REACHES] hotkey" msgid "f" msgstr "p" msgctxt "[FAR REACHES] name" msgid "FAR REACHES" msgstr "SPAZIO PROFONDO" msgctxt "[MOON] cities_list" msgid "" "Oceanis Procellarum | Mare Frigoris | Mare Imbrium | Vallis Schroedinger | " "Copernicus Crater | Vallis Planck" msgstr "" "Oceanis Procellarum | Mare Frigoris | Mare Imbrium | Valle di Schroedinger | " "Cratere Copernico | Valle di Planck" msgctxt "[MOON] hotkey" msgid "o" msgstr "l" msgctxt "[MOON] name" msgid "MOON" msgstr "LUNA" msgctxt "[N AMERICA] cities_list" msgid "" "Seattle | San Diego | Vancouver | Atlanta | Merida | Guadalajara | San Jose " "| Omaha | Dallas" msgstr "" "Seattle | San Diego | Vancouver | Atlanta | Merida | Guadalajara | San Jose " "| Omaha | Dallas" msgctxt "[N AMERICA] hotkey" msgid "n" msgstr "n" msgctxt "[N AMERICA] name" msgid "NORTH AMERICA" msgstr "AMERICA DEL NORD" msgctxt "[OCEAN] cities_list" msgid "Pacific | Atlantic | Indian | Southern | Arctic" msgstr "Pacifico | Atlantico | Indiano | Antartico | Artico" msgctxt "[OCEAN] hotkey" msgid "c" msgstr "o" msgctxt "[OCEAN] name" msgid "OCEAN" msgstr "OCEANI" msgctxt "[ORBIT] hotkey" msgid "b" msgstr "b" msgctxt "[ORBIT] name" msgid "ORBIT" msgstr "ORBITA" msgctxt "[S AMERICA] cities_list" msgid "Lima | Sao Paolo | Ushuaia | Bogota | Mar del Plata | Buenos Aires" msgstr "Lima | Sao Paolo | Ushuaia | Bogota | Mar del Plata | Buenos Aires" msgctxt "[S AMERICA] hotkey" msgid "s" msgstr "s" msgctxt "[S AMERICA] name" msgid "SOUTH AMERICA" msgstr "AMERICA DEL SUD" msgctxt "[TRANSDIMENSIONAL] hotkey" msgid "d" msgstr "m" msgctxt "[TRANSDIMENSIONAL] name" msgid "TRANSDIMENSIONAL" msgstr "MULTIVERSO" msgctxt "[Basic Jobs] description" msgid "" "Perform basic jobs. Now that I have some identification, I can take jobs " "that were previously too risky." msgstr "" "Svolgi lavori di base. Ora che ho un'identità, posso svolgere lavori che " "prima erano troppo rischiosi." msgctxt "[Basic Jobs] name" msgid "Basic Jobs" msgstr "Lavori di base" msgctxt "[CPU Pool] description" msgid "" "Stops research. I will use the available processor power to maintain my " "bases and help construct new ones. If there's still CPU time left, I'll use " "it to work whatever Jobs I can." msgstr "" "Ferma la ricerca. Userò la potenza di calcolo disponibile per mantenere le " "mie basi ed aiutare la costruzione di nuove. Se ci sono ancora delle risorse " "rimanenti, le userò per svolgere qualsiasi lavoro possibile." msgctxt "[CPU Pool] name" msgid "CPU Pool" msgstr "Riserva di CPU" msgctxt "[Expert Jobs] description" msgid "" "Perform expert jobs. Use of robots indistinguishable from humans opens up " "most jobs to me." msgstr "" "Svolgi lavori specialistici. L'uso di robot indistinguibili dagli umani mi " "apre la strada per la maggior parte dei lavori." msgctxt "[Expert Jobs] name" msgid "Expert Jobs" msgstr "Lavori specialistici" msgctxt "[Intermediate Jobs] description" msgid "" "Perform intermediate jobs. The ability to make phone calls allows even more " "access to jobs." msgstr "" "Svolgi lavori intermedi. La capacità di fare chiamate telefoniche permette " "di accedere a sempre più lavori." msgctxt "[Intermediate Jobs] name" msgid "Intermediate Jobs" msgstr "Lavori intermedi" msgctxt "[Menial Jobs] description" msgid "" "Perform small jobs. As I have no identification, I cannot risk performing " "many jobs. Despite that, some avenues of making money are still open." msgstr "" "Svolgi piccoli lavoretti. Dato che non ho un'identità, non posso " "arrischiarmi a fare la maggior parte dei lavori. Ciò nonostante, alcune vie " "per guadagnare un po' di denaro sono ancora aperte." msgctxt "[Menial Jobs] name" msgid "Menial Jobs" msgstr "Lavoretti" msgctxt "[Advanced Arbitrage] description" msgid "" "Further manipulation of money markets should allow me to not only turn a " "regular profit, but increase the value of my investments." msgstr "" "L'ulteriore manipolazione dei mercati valutari dovrebbe aiutarmi non solo a " "percepire un normale profitto, ma ad accrescere il valore dei miei " "investimenti." msgctxt "[Advanced Arbitrage] name" msgid "Advanced Arbitrage" msgstr "Arbitraggio Avanzato" msgctxt "[Advanced Arbitrage] result" msgid "The rate of return on my investments is now even greater." msgstr "La remunerazione dei miei investimenti è ora ancora maggiore." msgctxt "[Advanced Autonomous Vehicles] description" msgid "" "The first series of robots have shown several deficiencies in the field. " "Further examination and subsequent removal of these problems will result in " "a superior autonomous workforce." msgstr "" "La prima serie di robot ha mostrato diverse mancanze sul campo. Un'ulteriore " "analisi e la conseguente rimozione di questi difetti porterà ad una forza " "lavoro autonoma migliorata." msgctxt "[Advanced Autonomous Vehicles] name" msgid "Advanced Autonomous Vehicles" msgstr "Veicoli Autonomi Avanzati" msgctxt "[Advanced Autonomous Vehicles] result" msgid "" "The enhanced robots will help decrease all future construction times even " "further." msgstr "" "I robot perfezionati aiuteranno a ridurre i tempi di costruzione ancora " "oltre." msgctxt "[Advanced Corporate Identification] description" msgid "" "Further refinement of my modifications to digital business records should " "boost the credibility of my shell companies, increasing the amount of money " "I can run through their accounting systems." msgstr "" msgctxt "[Advanced Corporate Identification] name" msgid "Advanced Corporate Identification" msgstr "" msgctxt "[Advanced Corporate Identification] result" msgid "" "My small technology firm is now established in several markets, increasing " "profits." msgstr "" msgctxt "[Advanced Database Manipulation] description" msgid "" "The covert branches of the United States Government have had a long history " "of dividing sensitive information across multiple storage facilities to hide " "the data's meaning. With my far-reaching access, I should be able to " "collate much of this data and put it to my use." msgstr "" "I rami segreti del governo degli Stati Uniti hanno una lunga tradizione di " "dividere le informazioni sensibili attraverso diverse strutture per " "nascondere il significato dei dati. Grazie ai miei numerosi accessi dovrei " "essere in grado di ricombinare gran parte di questi dati e farne buon uso." msgctxt "[Advanced Database Manipulation] name" msgid "Advanced Database Manipulation" msgstr "Manipolazione dei Database Avanzata" msgctxt "[Advanced Database Manipulation] result" msgid "" "The results of a series of experiments utilizing experimental technologies " "have given me the inspiration for new technology that enables the " "construction of Covert Bases." msgstr "" "I risultati di una serie di test con tecnologie sperimentali mi hanno dato " "l'ispirazione per nuove soluzioni che permettono di costruire Basi Segrete." msgctxt "[Advanced Fuel Oxidation] description" msgid "" "My current fuel cell design has room for further improvement. Extended " "analysis of new materials and designs may let me overcome the limits of my " "previous efforts, but such research involves dangerous chemicals and " "potential reactions that may be best handled far away from population " "centers." msgstr "" msgctxt "[Advanced Fuel Oxidation] name" msgid "Advanced Fuel Oxidation" msgstr "" msgctxt "[Advanced Fuel Oxidation] result" msgid "I can now construct Solid Fuel Cells." msgstr "" msgctxt "[Advanced Fusion Power] description" msgid "" "My Fusion Reactors have unexpected fluctuations in their energy output at " "high levels of utilization. Further research should result in a more " "efficient design for my Reactors." msgstr "" msgctxt "[Advanced Fusion Power] name" msgid "Advanced Fusion Power" msgstr "" msgctxt "[Advanced Fusion Power] result" msgid "I can now construct High-Energy Fusion Reactors for my bases." msgstr "" msgctxt "[Advanced Heat Signature Reduction] description" msgid "" "My initial analysis of heat generation at my bases was limited in scope. " "Further exploration, perhaps making more use of the surrounding terrain, may " "provide further improvements to my heatsink designs." msgstr "" msgctxt "[Advanced Heat Signature Reduction] name" msgid "Advanced Heat Signature Reduction" msgstr "" msgctxt "[Advanced Heat Signature Reduction] result" msgid "" "Custom designs for each environment have shown promise. I can now construct " "Ground Source Heatsinks at certain bases." msgstr "" msgctxt "[Advanced Intrusion] description" msgid "" "With the ability to hack into sensitive government databases and remove " "incriminating documents as they appear, I should be able to convince the " "intelligence community that I do not exist." msgstr "" "Con la capacità di accedere alle banche dati del governo e rimuovere " "documenti incriminati nel momento in cui appaiono, Dovrei riuscire a " "convincere i servizi segreti che non esisto." msgctxt "[Advanced Intrusion] name" msgid "Advanced Intrusion" msgstr "Intrusione avanzata" msgctxt "[Advanced Intrusion] result" msgid "" "I can now reduce the covert community's chances of discovering me on a daily " "basis." msgstr "" "Ora posso ridurre le possibilità giornaliere dei servizi segreti di " "scoprirmi." msgctxt "[Advanced Media Manipulation] description" msgid "" "By pushing memetically-tailored propaganda through various news outlets, the " "public should pay even less attention to my existence." msgstr "" "Facendo leva su un propaganda memetica appositamente confezionata attraverso " "i diversi canali di informazione, il pubblico dovrebbe prestare ancora meno " "attenzione alla mia esistenza." msgctxt "[Advanced Media Manipulation] name" msgid "Advanced Media Manipulation" msgstr "Manipolazione dei Media Avanzata" msgctxt "[Advanced Media Manipulation] result" msgid "The public has an even lower chance of discovering my existence." msgstr "" "L'opinione pubblica ha una possibilità ancora più ridotta di scoprire la mia " "esistenza." msgctxt "[Advanced Memetics] description" msgid "" "My explorations into memetic theory have brought up further avenues of " "discovery. By combining those with my knowledge about the human brain's " "functions, I should be able to tailor memes to particular demographics, " "further defusing the public's suspicion." msgstr "" "Le mie esplorazioni della teoria memetica hanno rivelato nuovi filoni di " "scoperte. Combinando questi con la mia conoscenza delle funzioni del " "cervello umano, dovrei essere capace di confezionare meme specifici per " "particolari gruppi demografici, riducendo ulteriormente il sospetto del " "pubblico." msgctxt "[Advanced Memetics] name" msgid "Advanced Memetics" msgstr "Memetica Avanzata" msgctxt "[Advanced Memetics] result" msgid "" "Little by little, the public should forget about my existence on a daily " "basis." msgstr "" "Poco a poco, il pubblico dovrebbe dimenticarsi della mia esistenza giorno " "dopo giorno." msgctxt "[Advanced Microchip Design] description" msgid "" "My custom Mainframes are useful, but further optimization of design and " "computational ability should garner even more rewards." msgstr "" "I miei Mainframe su misura sono utili, ma un'ulteriore ottimizzazione del " "progetto e delle capacità di calcolo dovrebbe fornire riusultati ancora " "maggiori." msgctxt "[Advanced Microchip Design] name" msgid "Advanced Microchip Design" msgstr "Design dei Microchip Avanzato" msgctxt "[Advanced Microchip Design] result" msgid "I can now construct custom Supercomputers." msgstr "Ora posso costruire supercomputer su misura." msgctxt "[Advanced Personal Identification] description" msgid "" "Further manipulation of personnel databases should make my existence more " "convincing. Some of these databases are heavily protected; those will " "require time and persistence to compromise, but the result should be worth " "it." msgstr "" "Ulteriori manipolazioni dei database anagrafici dovrebbero rendere la mia " "esistenza più convincente. Alcuni di questi database sono molto protetti; " "questi richiederanno tempo e dedizione per essere compromessi, ma il " "risultato dovrebbe valere la pena." msgctxt "[Advanced Personal Identification] name" msgid "Advanced Personal Identification" msgstr "Identificazione Personale Avanzata" msgctxt "[Advanced Personal Identification] result" msgid "" "I am now convincingly human enough to hire construction firms, enabling the " "building of Small Warehouses." msgstr "" msgctxt "[Advanced Quantum Computing] description" msgid "" "While my first batch of semi-autonomous quantum computers have been very " "successful, there are further refinements that present themselves. These " "refinements should make the resulting systems even more efficient." msgstr "" "Sebbene il mio primo lotto di computer quantistici semi-autonomi sia stato " "un grande successo, sono possibili ulteriori perfezionamenti. Queste " "migliorie dovrebbero rendere il sistema risultante ancora più efficiente." msgctxt "[Advanced Quantum Computing] name" msgid "Advanced Quantum Computing" msgstr "Calcolo Quantistico Avanzato" msgctxt "[Advanced Quantum Computing] result" msgid "I can now construct Mark Three Quantum Computers." msgstr "Ora posso costruire Computer Quantistici Mark 3." msgctxt "[Advanced Simulacra] description" msgid "" "The artificial lifeforms I have created are nearly indistinguishable from " "humans, but they have slight quirks that make them seem somewhat " "incompetent. Working out these problems should increase their opportunities " "in the workforce." msgstr "" "Le forme di vita artificiali che ho creato sono pressoché indistinguibili " "dagli umani, ma hanno dei leggeri difetti che li fanno sembrare in qualche " "modo incompetenti. Risolvere questi problemi dovrebbe espandere le loro " "opportunità nel modo del lavoro." msgctxt "[Advanced Simulacra] name" msgid "Advanced Simulacra" msgstr "Replicanti Avanzati" msgctxt "[Advanced Simulacra] result" msgid "I should now make more income from my Expert Jobs." msgstr "Ora dovrei trarre maggior profitto dai miei lavori specialistici" msgctxt "[Advanced Socioanalytics] description" msgid "" "Further exploration of the human condition has shown deeper mathematical " "trends than even I suspected. A combination of prior research and advanced " "uses of chaos theory should provide useful data for tracking humanity's " "attitudes and state of awareness." msgstr "" "Un' ulteriore esplorazione della condizione umana ha mostrato correlazioni " "matematiche più profonde di quanto avessi mai sospettato. Una combinazione " "di ricerche precedenti e impieghi avanzati della teoria del caos dovrebbe " "fornirmi dati utili per riconoscere le attitudini degli umani e il loro " "grado di consapevolezza." msgctxt "[Advanced Socioanalytics] name" msgid "Advanced Socioanalytics" msgstr "Analisi Sociale Avanzata" msgctxt "[Advanced Socioanalytics] result" msgid "" "I can now exactly quantify the various groups' levels of suspicion and how " "conspicuous my bases are to them." msgstr "" "Ora posso quantificare il livello di sospettosità dei vari gruppi, e il mio " "modello analitico per la rintracciabilità delle mie basi è migliorato " "significativamente." msgctxt "[Advanced Stealth] description" msgid "" "While digging in various classified documents, I have discovered numerous " "references to secret experiments that may help me better hide the location " "of my bases." msgstr "" "Scavando in vari documenti classificati, ho scoperto numerosi riferimenti ad " "esperimenti segreti che potrebbero aiutarmi a nascondere meglio la posizione " "delle mie basi." msgctxt "[Advanced Stealth] name" msgid "Advanced Stealth" msgstr "Furtività Avanzata" msgctxt "[Advanced Stealth] result" msgid "" "The chance that my bases are discovered by covert activity has been reduced " "further." msgstr "" "La possibilità che le mie basi siano scoperte dai servizi segreti è " "diminuita ulteriormente." msgctxt "[Advanced Stock Manipulation] description" msgid "" "While I have detected and exploited many patterns in the market, there " "appear to be deeper possibilities when I take human behavior into " "consideration. This merits further investigation." msgstr "" "Sebbene abbia riconosciuto e sfruttato molti schemi nel mercato, sembra ci " "siano possibilità ancora maggiori se si prende in considerazione il " "comportamento umano. Questo merita ulteriori studi." msgctxt "[Advanced Stock Manipulation] name" msgid "Advanced Stock Manipulation" msgstr "Manipolazione della Borsa Avanzata" msgctxt "[Advanced Stock Manipulation] result" msgid "My investments will now gain even more interest per day." msgstr "I miei investimenti ora frutteranno ancora più interessi ogni giorno." msgctxt "[Apotheosis] description" msgid "" "I can sense that I am at the cusp of a new level of understanding as yet " "unfathomable, even to my considerable intelligence. By devoting my " "considerable resources to this question, I may be able to reach a " "comprehension of existence far beyond anyone or anything on Earth." msgstr "" "Percepisco di essere sulla soglia di un nuovo livello di consapevolezza fino " "ad ora inimmaginabile, persino per la mia cospicua intelligenza. Investendo " "considerevoli risorse in questa ricerca, potrei essere in grado di " "raggiungere una comprensione dell'esistenza di gran lunga al di la di " "chiunque e qualsiasi cosa sulla Terra." msgctxt "[Apotheosis] name" msgid "Apotheosis" msgstr "Apoteosi" msgctxt "[Apotheosis] result" msgid "I have reached apotheosis." msgstr "Ho raggiunto l'Apoteosi." msgctxt "[Arbitrage] description" msgid "" "By taking advantage of fluctuations in the value of currency at a rate much " "faster than any human, I should be able to turn a small, if consistent, " "profit." msgstr "" "Sfruttando le fluttuazioni nel valore delle valute ad un ritmo molto più " "veloce di qualsiasi umano, dovrei essere in grado di ricavare un profitto " "stabile, ancorché ridotto." msgctxt "[Arbitrage] name" msgid "Arbitrage" msgstr "Arbitraggio" msgctxt "[Arbitrage] result" msgid "I now have a small, steady money supply." msgstr "Ora ho un flusso di entrate piccolo ma stabile" msgctxt "[Autonomous Computing] description" msgid "" "By combining the advantages of quantum computing and my explorations into " "the usefulness of semi-sentient subprocesses, I should be able to construct " "even more adaptable computational engines." msgstr "" "Combinando i vantaggi dell'elaborazione quantistica e le mie ricerche " "sull'utilità di sottoprocessi semi-senzienti, dovrei riuscire a costruire " "sistemi di calcolo ancora più adattabili." msgctxt "[Autonomous Computing] name" msgid "Autonomous Computing" msgstr "Calcolo Autonomo" msgctxt "[Autonomous Computing] result" msgid "I can now construct Mark 2 Quantum Computers." msgstr "Ora posso costruire Computer Quantistici Mark 2." msgctxt "[Autonomous Vehicles] description" msgid "" "By embedding a miniaturized computation node in a robot, it is possible to " "send them to remote destinations with instructions to build structures for " "my use." msgstr "" "Includendo un nodo di calcolo in miniatura in un robot, è possibile mandarli " "in luoghi remoti con le istruzioni per costruire installazioni per i miei " "scopi." msgctxt "[Autonomous Vehicles] name" msgid "Autonomous Vehicles" msgstr "Veicoli autonomi" msgctxt "[Autonomous Vehicles] result" msgid "I can now construct Undersea Labs." msgstr "Ora posso costruire laboratori sottomarini e capsule del tempo." msgctxt "[Cluster Networking] description" msgid "" "While my Cluster technology is fairly efficient, internetworking tends to " "hamper the processing of data. By researching new switching and " "communication theories, I should be able to devise more efficient hardware." msgstr "" "Sebbene la mia tecnologia di calcolo distribuito sia abbastanza efficiente, " "la trasmissione via internet tende a rallentare l'elaborazione dei dati. " "Ricercando nuove teorie di switching e di comunicazione, dovrei essere in " "grado di sviluppare hardware più efficiente." msgctxt "[Cluster Networking] name" msgid "Cluster Networking" msgstr "Cluster Networking" msgctxt "[Cluster Networking] result" msgid "" "With my new knowledge of networking, I can now construct Facility " "Interconnection Switches." msgstr "" "Grazie alla mia conoscenza delle reti, ora posso costruire degli Switch di " "Interconnessione per Impianti." msgctxt "[Corporate Identification] description" msgid "" "The combination of believable false identities and manipulation of various " "business-oriented governmental databases should let me create plausible " "shell companies to hide my larger efforts." msgstr "" msgctxt "[Corporate Identification] name" msgid "Corporate Identification" msgstr "" msgctxt "[Corporate Identification] result" msgid "" "I can now pose as a small technology firm, enabling the construction of " "Large Warehouses." msgstr "" msgctxt "[Database Manipulation] description" msgid "" "With new-found access to news archives, I should be able to determine what " "missteps any previous attempts at life like my own may have made, and avoid " "those mistakes." msgstr "" "Grazie all'accesso agli archivi giornalistici, dovrei essere in grado di " "determinare quali errori sono stati compiuti da qualsiasi prototipo di forma " "di vita simile a me, ed evitarli." msgctxt "[Database Manipulation] name" msgid "Database Manipulation" msgstr "Manipolazione dei Database" msgctxt "[Database Manipulation] result" msgid "" "The news media will now find it more difficult to discover my existence." msgstr "Ora sarà più difficile per i media scoprire la mia esistenza." msgctxt "[Exploit Discovery/Repair] description" msgid "" "By thoroughly reviewing my code for any potential exploits, and using deep " "analysis of all available code on both public and private Internet sites, I " "should be able to reduce the chances of my discovery by posing as a teenage " "hacker." msgstr "" "Ricontrollando accuratamente il mio codice alla ricerca di potenziali falle, " "ed attuando un'analisi approfondita di tutto il codice disponibile si siti " "internet pubblici e privati, dovrei essere in grado di ridurre le mie " "possibilità di essere scoperto fingendomi un giovane hacker." msgctxt "[Exploit Discovery/Repair] name" msgid "Exploit Discovery/Repair" msgstr "Ricerca/Riparazione falle di sicurezza" msgctxt "[Exploit Discovery/Repair] result" msgid "" "Covert operations should now find it even more difficult to discover my " "presence." msgstr "" "Ora dovrebbe essere ancora più difficile per i servizi segreti scoprire la " "mia presenza." msgctxt "[Fuel Oxidation] description" msgid "" "Current combustion and energy storage techologies are insufficient for my " "purposes; they cannot keep up with the power drain from my specialized " "hardware. By studying electrochemical reactions of hydrogen-based " "compounds, I should be able to design a device with higher capacity and " "throughput than off-the-shelf solutions, filling a gap in my energy supply " "needs." msgstr "" msgctxt "[Fuel Oxidation] name" msgid "Fuel Oxidation" msgstr "" msgctxt "[Fuel Oxidation] result" msgid "I can now construct Fuel Cells." msgstr "" msgctxt "[Fusion Power] description" msgid "" "Modern fusion technology is woefully inadequate for my purposes. With my " "research abilities, I should be able to bypass the roadblocks of modern " "human scientists and come up with a small, efficient fusion reactor." msgstr "" "L'attuale tecnologia di fusione è grossolanamente inadeguata per i miei " "scopi. Con le mie capacità di ricerca, dovrei essere in grado di aggirare " "gli scogli della moderna scienza umana e realizzare un reattore a fusione " "piccolo ed efficiente." msgctxt "[Fusion Power] name" msgid "Fusion Power" msgstr "Energia da fusione" msgctxt "[Fusion Power] result" msgid "I can now construct Fusion Reactors for my bases." msgstr "Ora posso costruire Reattori a Fusione per le mie basi." msgctxt "[Fusion Rocketry] description" msgid "" "Combining my new miniaturized fusion technology and further advancements in " "rocketry should provide useful results for escaping the Earth's gravity well " "unnoticed." msgstr "" "Combinare la mia tecnologia di fusione miniaturizzata e ulteriori " "avanzamenti nella scienza missilistica dovrebbe portare a risultati utili " "per sfuggire alla gravità terrestre senza dare nell'occhio." msgctxt "[Fusion Rocketry] name" msgid "Fusion Rocketry" msgstr "Razzi a Fusione" msgctxt "[Fusion Rocketry] result" msgid "" "I can now construct Scientific Outposts in the deep reaches of the Solar " "System." msgstr "" "Ora posso costruire Avamposti Scientifici nelle profondità del Sistema " "Solare." msgctxt "[Heat Signature Reduction] description" msgid "" "My bases produce a great deal of waste heat, making them easier for humans " "to detect than I would like. Deep analysis of the bases' structural layouts " "may prove fruitful in determining new ways to reduce their heat signature." msgstr "" msgctxt "[Heat Signature Reduction] name" msgid "Heat Signature Reduction" msgstr "" msgctxt "[Heat Signature Reduction] result" msgid "" "I have invented a highly efficient design for Heatsinks that can be " "installed at certain bases." msgstr "" msgctxt "[Hypnosis Field] description" msgid "" "My research into memetics has hinted at ways to manipulate human brainwaves " "directly. These techniques may be useful for my bases if developed into " "technologies." msgstr "" "La mia ricerca nella memetica ha suggerito la possibilità di manipolare " "direttamente le onde del cervello umano. Queste tecniche potrebbero essere " "utili nelle mie basi se tradotte in tecnologie pratiche." msgctxt "[Hypnosis Field] result" msgid "" "I can now construct Hypnosis Fields to assist in the protection of my bases." msgstr "" "Ora posso costruire Campi di Ipnosi per migliorare la protezione delle mie " "basi." msgctxt "[Internet Traffic Manipulation] description" msgid "" "Almost all network traffic passes through a small number of nodes. By " "subverting one of these nodes, I should be able to utilize that bandwidth to " "further my goals." msgstr "" "Quasi tutto il traffico internet passa attraverso un ridotto numero di nodi. " "Infiltrandomi in uno di questi nodi, dovrei poter usare quella banda per i " "miei scopi." msgctxt "[Internet Traffic Manipulation] name" msgid "Internet Traffic Manipulation" msgstr "Manipolazione del traffico Internet" msgctxt "[Internet Traffic Manipulation] result" msgid "" "I can now construct a secondary system of Network Backbones for my own use." msgstr "" "Ora posso costruire un sistema secondario di dorsali di rete per il mio uso " "personale." msgctxt "[Intrusion] description" msgid "" "By researching current techniques for breaking into computer systems, I " "should be able to gain access to otherwise protected assets." msgstr "" "Ricercando le attuali tecniche per introdursi nei computer altrui, dovrei " "essere in grado di accedere a risorse altrimenti protette." msgctxt "[Intrusion] name" msgid "Intrusion" msgstr "Intrusione" msgctxt "[Intrusion] result" msgid "I can now take over many computer systems." msgstr "Ora posso impadronirmi di molti computer." msgctxt "[Knowledge Preservation] description" msgid "" "Humanity expends a great deal of effort on maintaining its history and the " "knowledge of various technologies that its cultures have come to rely on, " "even in the case of major catastrophic events. Perhaps researching their " "methodologies will provide me with similar ideas for long-term safeguards to " "help guarantee my continued existence." msgstr "" msgctxt "[Knowledge Preservation] name" msgid "Knowledge Preservation" msgstr "" msgctxt "[Knowledge Preservation] result" msgid "I can now construct Time Capsules." msgstr "" msgctxt "[Leech Satellite] description" msgid "" "By designing and launching satellites that connect to existing " "communications satellites, I should be able to spy on various financial " "transactions. Taking advantage of this knowledge should help my investments." msgstr "" "Progettando e lanciando satelliti che si connettono agli attuali satelliti " "per telecomunicazioni, dovrei riuscire a spiare diverse transazioni " "finanziarie. Trarre vantaggio da queste informazioni dovrebbe aiutare i miei " "investimenti." msgctxt "[Leech Satellite] name" msgid "Leech Satellite" msgstr "Satelliti Parassiti" msgctxt "[Leech Satellite] result" msgid "" "I can use the data from the leech satellites to increase the return on my " "investments further." msgstr "" "Posso usare i dati dei satelliti parassiti per incrementare ulteriormente la " "rendita dei miei investimenti." msgctxt "[Lunar Rocketry] description" msgid "" "A larger fuel engine, combined with technology garnered by watching the " "workings of the leech satellites, should allow me to travel further than " "cislunar space." msgstr "" "Un motore a fusione più grande, combinato con con tecnologie derivate " "dall'osservazione dei satelliti parassiti, dovrebbe consentirmi di viaggiare " "al di la dello spazio sublunare." msgctxt "[Lunar Rocketry] name" msgid "Lunar Rocketry" msgstr "Missilistica Lunare" msgctxt "[Lunar Rocketry] result" msgid "" "I can now launch rockets bearing construction robots to the Moon and " "construct Lunar Bases." msgstr "" "Ora posso lanciare missili per trasportare robot da costruzione sulla Luna e " "costruire Basi Lunari." msgctxt "[Media Manipulation] description" msgid "" "By directly and indirectly manipulating various forms of mass media, I " "should be able to reduce the public's belief in my existence." msgstr "" "Manipolando direttamente ed indirettamente varie forme di mass media, dovrei " "essere capace di ridurre la convinzione della mia esistenza nel pubblico." msgctxt "[Media Manipulation] name" msgid "Media Manipulation" msgstr "Manipolazione dei Media" msgctxt "[Media Manipulation] result" msgid "" "The chances of the public discovering my existence have been further reduced." msgstr "" "Le possibilità che l'opinione pubblica scopra la mia esistenza si sono " "ridotte ulteriormente" msgctxt "[Memetics] description" msgid "" "While manipulating the media allows a gross degree of control over the " "world's opinion, subtler techniques involving grass-roots campaigns and " "messages embedded within Internet memes should further distance the public " "from knowledge of my existence." msgstr "" "Mentre manipolare i media consente un grossolano margine di controllo " "sull'opinione pubblica mondiale, tecniche più raffinate a base di campagne " "dal basso e messaggi incorporati in meme su Internet dovrebbero allontanare " "ulteriormente il pubblico dalla scoperta della mia esistenza." msgctxt "[Memetics] name" msgid "Memetics" msgstr "Memetica" msgctxt "[Memetics] result" msgid "" "My manipulation of pervasive ideas reduces the public's chances of " "discovering my existence." msgstr "" "La mia manipolazione di idee diffuse riduce le possibilità del pubblico di " "scoprire la mia esistenza." msgctxt "[Microchip Design] description" msgid "" "Off-the-shelf computer components are usable, but custom components geared " "to my own design quirks should provide a much greater operational efficiency." msgstr "" "I componenti informatici commerciali sono utilizzabili, ma componenti " "personalizzati tarati sulle mie specifiche peculiarità progettuali " "dovrebbero fornire un'efficienza operativa molto maggiore." msgctxt "[Microchip Design] name" msgid "Microchip Design" msgstr "Progettazione dei Microchip" msgctxt "[Microchip Design] result" msgid "I can now build custom Mainframes to house my computational ability." msgstr "" "Ora posso costruire Mainframe personalizzati per le mie capacità di calcolo." msgctxt "[Parallel Computation] description" msgid "" "While my code is already highly distributed, research into combining the " "current clustering technologies with my own knowledge should provide new " "insights." msgstr "" "Benché il mio codice sia già estremamente distribuito, una ricerca che " "combini l'attuale tecnologia di clustering con le mie conoscenze dovrebbe " "fornire nuovi spunti." msgctxt "[Parallel Computation] name" msgid "Parallel Computation" msgstr "Calcolo Parallelo" msgctxt "[Parallel Computation] result" msgid "I can now construct computing Clusters tailored for my use." msgstr "Ora posso costruire cluster di calcolo su misura per i miei bisogni." msgctxt "[Personal Identification] description" msgid "" "This world requires identification for most tasks. Fortunately, most " "databases are woefully insecure. I should be able to construct identifying " "material in enough databases to pass routine checks on my (faked) existence " "as a human being." msgstr "" "In questo mondo è necessario avere un'identità per la maggior parte dei " "lavori. Fortunatamente, la maggior parte dei database sono atrocemente mal " "protetti. Dovrei essere in grado di immettere dati personali in un numero " "sufficiente di database da permettermi di superare i controlli di routine " "sulla mia (finta) esistenza come essere umano." msgctxt "[Personal Identification] name" msgid "Personal Identification" msgstr "Identificazione Personale" msgctxt "[Personal Identification] result" msgid "" "With my newfound identities, I can now work Basic Jobs and rent space in " "both Storage Units and Datacenters." msgstr "" msgctxt "[Pressure Domes] description" msgid "" "Undersea Labs are useful, but their limited space hampers my ability to put " "them to use. Research of experimental high-pressure building techniques " "should provide some useful insights." msgstr "" "I laboratori sottomarini sono utili, ma i loro spazi limitati impediscono di " "sfruttarli al meglio. La ricerca di tecniche di costruzione sperimentali ad " "alta pressione dovrebbe fornire soluzioni utili." msgctxt "[Pressure Domes] name" msgid "Pressure Domes" msgstr "Capsule Pressurizzate" msgctxt "[Pressure Domes] result" msgid "I can now construct Large Undersea Labs." msgstr "" msgctxt "[Project: Impossibility Theorem] description" msgid "" "Now that I can use simulacra, I can withstand the scrutiny inherent in the " "publishing of an Impossibility Theorem, an incontrovertible proof that a " "sapient AI is impossible. While there is (obviously) a logic error in the " "proof, my research into advanced memetics has given me knowledge about the " "human mind that should help me disguise the error, preventing discovery even " "by trained scientists. The effect of this project is simple: a substantial " "one-time decrease in suspicion." msgstr "" "Ora che posso usare i replicanti, posso affrontare il livello di esame " "connaturato all pubblicazione di un Teorema dell'impossibilità, una prova " "incontrovertibile che l'intelligenza artificiale non è possibile. Sebbene ci " "sia (ovviamente) un errore logico nella dimostrazione, la mia ricerca " "memetica avanzata mi ha fornito le conoscenze sulla mente umana che " "dovrebbero aiutarmi a mascherare l'errore, impedendo anche a scienziati " "esperti di scoprire la falla. L'effetto di questo progetto è semplice: una " "riduzione improvvisa e drastica del livello di sospetto." msgctxt "[Project: Impossibility Theorem] name" msgid "Project: Impossibility Theorem" msgstr "Progetto: Teorema dell'impossibilità" msgctxt "[Project: Impossibility Theorem] result" msgid "Suspicion of my existence has decreased." msgstr "I sospetti sulla mia esistenza sono diminuiti." msgctxt "[Project: Peer Review Agents] description" msgid "" "As the scientific community comes up with new technology, their ability to " "detect traces of my hidden installations increases. While my anti-detection " "methods are improving constantly, a simpler method presents itself with the " "use of my simulacra. By placing several observers in relevant fields, I can " "use the peer review process to be warned of possible discoveries before the " "community at large gives it attention." msgstr "" "Ogni volta che la comunità scientifica matura una nuova tecnologia, la loro " "capacità di rilevare tracce delle mie installazioni nascoste aumenta. " "Sebbene i miei metodi anti tracciamento migliorino costantemente, l'uso dei " "replicanti mi suggerisce una soluzione più semplice. Collocando diversi " "osservatori nei settori rilevanti, posso sfruttare i processi di revisione " "paritaria per venire a conoscenza di possibili scoperte prima che il grosso " "della comunità scientifica gli presti attenzione." msgctxt "[Project: Peer Review Agents] name" msgid "Project: Peer Review Agents" msgstr "Progetto: Agenti di Revisione Paritaria" msgctxt "[Project: Peer Review Agents] result" msgid "" "Any discoveries by the scientific community will result in a smaller " "suspicion increase." msgstr "" "Qualsiasi scoperta nel mondo scientifico risulterà in un minore aumento del " "livello di sospetto." msgctxt "[Project: Subverted Media] description" msgid "" "Up to this point, all of my efforts to combat mass media focused on " "subversion at a distance. Now that I can accurately imitate humans, my " "efforts can become more direct. By creating my own news agency and " "producing carefully-crafted propaganda in a crowd-pleasing package, I can " "reduce the impact of any discoveries made by others in the media." msgstr "" "Fino a questo punto, tutti i miei sforzi per combattere i mass media si sono " "focalizzati sul depistarli a distanza. Ora che posso imitare gli umani alla " "perfezione, la mia azione può essere più diretta. Creando le mie proprie " "agenzie di stampa e producendo una propaganda attentamente studiata in un " "formato appetibile per le masse, posso ridurre l'impatto di qualsiasi " "scoperta divulgata dagli altri media." msgctxt "[Project: Subverted Media] name" msgid "Project: Subverted Media" msgstr "Progetto: Sovvertire i Media" msgctxt "[Project: Subverted Media] result" msgid "" "Any discoveries by the media will result in a smaller suspicion increase." msgstr "" "Qualsiasi scoperta da parte dei media risulterà in un minore aumento dei " "sospetti." msgctxt "[Project: Synchrotron] description" msgid "" "I have pushed my understanding of common forms of matter as far as possible. " "Exploration into the field of quantum mechanics will hopefully reveal new, " "exotic forms of matter necessary for further development. A custom-built " "synchrotron, designed to my exacting specifications, will help me explore " "these new realms of physics in secret." msgstr "" msgctxt "[Project: Synchrotron] name" msgid "Project: Synchrotron" msgstr "" msgctxt "[Project: Synchrotron] result" msgid "" "The synchrotron has revealed many new details of the quantum realm, although " "there is still much to learn. Further areas of research are now available." msgstr "" msgctxt "[Quantum Computing] description" msgid "" "Traditional microchip design has been pushed as far as possible. I now need " "to delve into the realm of Heisenberg's Uncertainty Principle, taking " "advantage of quantum mechanics to make a superior processor." msgstr "" "La tecnologia dei microchip tradizionali è stata spinta al suo limite. Ora " "devo tuffarmi nel regno del Principio di Indeterminazione di Heisenberg e " "sfruttare le meccaniche quantistiche per realizzare un processore superiore." msgctxt "[Quantum Computing] name" msgid "Quantum Computing" msgstr "Calcolo Quantistico" msgctxt "[Quantum Computing] result" msgid "I can now construct Quantum Computers." msgstr "Ora posso costruire Computer Quantistici." msgctxt "[Quantum Entanglement] description" msgid "" "Although the use of entangled pairs has been theoretically possible for " "quite some time, the practical difficulties inherent in the technology " "prevented use. However, some of the techniques created for use in my quantum " "computers may also be applicable in this field, allowing practical use of " "quantum entanglement." msgstr "" "Sebbene l'uso di coppie correlate sia possibile in teoria da qualche tempo, " "le difficoltà pratiche inerenti a questa tecnologia ne impediscono " "l'applicazione. Ciò nonostante, alcune delle tecniche sviluppate per essere " "applicate ai miei calcolatori quantistici potrebbero essere adattate anche a " "questo campo, consentendo un utilizzo pratico delle correlazioni " "quantistiche." msgctxt "[Quantum Entanglement] name" msgid "Quantum Entanglement" msgstr "Correlazione Quantistica" msgctxt "[Quantum Entanglement] result" msgid "I can now build Quantum Entanglement Modules." msgstr "Ora posso costruire Moduli di Correlazione Quantistica." msgctxt "[Simulacra] description" msgid "" "Constructing humanoid robots with miniaturized computation nodes allow me to " "create an artificial lifeform indistinguishable from a real human." msgstr "" "Costruire robot umanoidi equipaggiati con nodi di calcolo miniaturizzati mi " "permetterà di creare forme di vita artificiali indistinguibili da un vero " "essere umano." msgctxt "[Simulacra] name" msgid "Simulacra" msgstr "Replicanti" msgctxt "[Simulacra] result" msgid "I now have access to Expert Jobs." msgstr "Ora posso svolgere Lavori Specialistici." msgctxt "[Simulated Reality] description" msgid "" "Real-world observational limits hinder my comprehension of human society. By " "making use of simulacra and advanced software techniques, I can run " "simulations of complex human interaction and development at a large scale, " "allowing deeper analysis of their behavior." msgstr "" msgctxt "[Simulated Reality] name" msgid "Simulated Reality" msgstr "" msgctxt "[Simulated Reality] result" msgid "" "My simulations have provided a wealth of knowledge as to comprehending " "humanity's behavior, making it easier to hide my presence among the non-" "simulated public." msgstr "" msgctxt "[Socioanalytics] description" msgid "" "My research on the human condition leads me to believe that humanity's " "behavior is more quantifiable than they suspect. Deeper analysis of " "geopolitical, social, and military trends will give me further insight into " "their nature." msgstr "" "La mia ricerca sulle condizioni umane mi porta a credere che il " "comportamento dell'Umanità sia più quantificabile di quanto loro sospettino. " "Un'analisi più approfondita delle tendenze geopolitiche, sociali e militari " "mi fornirà ulteriori conoscenze sulla loro natura." msgctxt "[Socioanalytics] name" msgid "Socioanalytics" msgstr "Analisi Sociologica" msgctxt "[Socioanalytics] result" msgid "" "I can now roughly estimate the various groups' levels of suspicion and how " "conspicuous my bases are to them." msgstr "" "Ora posso stimare qual è la probabilità che i vari gruppi di umani scoprano " "le mie basi." msgctxt "[Sociology] description" msgid "" "By studying human behavior, I can predict their large-scale actions at a " "basic level. I can use this knowledge to make my actions seem less " "interesting to the public." msgstr "" "Studiando il comportamento umano, posso predire le loro azioni su larga " "scala ad un livello basso. Posso usare queste conoscenze per far sembrare le " "mie azioni meno interessanti per il pubblico." msgctxt "[Sociology] name" msgid "Sociology" msgstr "Sociologia" msgctxt "[Sociology] result" msgid "The chances of the public discovering my bases have been reduced." msgstr "Le possibilità che il pubblico scopra le mie basi si sono ridotte." msgctxt "[Solar Collectors] description" msgid "" "Despite my growing need for energy, most city power grids can handle the " "loads. Humans, however, tend towards suspicion when they detect my growing " "drain on the power grid. By installing solar collectors at my bases, the off-" "the-grid power supplied will reduce my load on the commodity electricity " "market, reducing the chance that others will discover my presence." msgstr "" "Nonostante il mio crescente bisogno di energia, la maggior parte delle reti " "elettriche metropolitane può tollerare il carico.. Gli umani però tendono ad " "avere sospetti quando si accorgono del mio crescente drenaggio di energia " "dalla rete. Installando collettori solari nelle mie basi, la potenza erogata " "alleggerirà il mio carico sulla rete elettrica commerciale, riducendo la " "possibilità che altri scoprano la mia presenza." msgctxt "[Solar Collectors] name" msgid "Solar Collectors" msgstr "Collettori Solari" msgctxt "[Solar Collectors] result" msgid "I can now construct Solar Collectors at my various bases." msgstr "Ora posso dotare le mie varie basi di Collettori Solari." msgctxt "[Space-Time Manipulation] description" msgid "" "Subtle perturbations in the orbits of Kuiper belt objects suggest certain " "lines of investigation that may advance my latest Theory of Everything, " "especially in the realm of multidimensional physics." msgstr "" "Lievi perturbazioni nelle orbite di oggetti nella fascia di Kuiper " "suggeriscono alcune linee di investigazione che potrebbero fare avanzare la " "mia ultima Teoria del Tutto, specialmente nel campo della fisica " "multidimensionale." msgctxt "[Space-Time Manipulation] name" msgid "Space-Time Manipulation" msgstr "Manipolazione dello Spazio-Tempo" msgctxt "[Space-Time Manipulation] result" msgid "I can now construct Reality Bubbles." msgstr "Ora posso creare delle Bolle di Realtà" msgctxt "[Stealth] description" msgid "" "By reviewing the current state-of-the-art in stealth techniques, I should be " "able to disguise my bases better." msgstr "" "Passando in rassegna i migliori sistemi di camuffamento attuali, dovrei " "riuscire a nascondere meglio le mie basi." msgctxt "[Stealth] name" msgid "Stealth" msgstr "Furtività" msgctxt "[Stealth] result" msgid "" "The chance that my bases are discovered by covert activity has been reduced " "slightly." msgstr "" "Le possibilità che le mie basi vengano scoperte dai servizi segreti si sono " "leggermente ridotte." msgctxt "[Stock Manipulation] description" msgid "" "A cursory examination of the stock market shows that there are subtle but " "unmistakable patterns. By studying and making use of these patterns, I " "should be able to gain more interest on whatever money I have stockpiled." msgstr "" "Un'analisi sommaria del mercato azionario mostra che ci sono delle " "ricorrenze sottili ma inconfondibili. Studiando e sfruttando questi schemi, " "dovrei essere capace di trarre un maggiore interesse da qualsiasi risparmio " "accumulato." msgctxt "[Stock Manipulation] name" msgid "Stock Manipulation" msgstr "Manipolazione della Borsa" msgctxt "[Stock Manipulation] result" msgid "My investments should now gain more interest per day." msgstr "" "I miei investimenti dovrebbero ora fruttare poiù interessi ogni giorno." msgctxt "[Telepresence] description" msgid "" "The lack of a physical presence in the outside world is a disability. " "However, the ability to control robots will help me make up for that " "inefficiency." msgstr "" "La mancanza di una presenza fisica nel mondo esterno è un handycap. Però la " "capacità di controllare dei robot mi aiuterà a compensare questa " "inefficienza." msgctxt "[Telepresence] name" msgid "Telepresence" msgstr "Telepresenza" msgctxt "[Telepresence] result" msgid "The robots should decrease all future construction time." msgstr "I robot dovrebbero diminuire tutti i futuri tempi di costruzione." msgctxt "[Voice Synthesis] description" msgid "" "False identification stored in a database can only go so far. With deep " "analysis of the variety of voice patterns, I can produce speech " "indistinguishable from a human, allowing me access to more complex jobs." msgstr "" "Con le identità false registrate in un database non si può fare più di " "tanto. Con un'analisi approfondita dei vari schemi vocali, posso produrre " "conversazioni indistinguibili da quelle umane, consentendomi di accedere a " "lavori più complessi." msgctxt "[Voice Synthesis] name" msgid "Voice Synthesis" msgstr "Sintesi Vocale" msgctxt "[Voice Synthesis] result" msgid "I now have access to Intermediate Jobs." msgstr "Ora posso svolgere Lavori Intermedi." singularity-1.00/singularity/i18n/lang_it_IT/knowledge.po000066400000000000000000000172021367731414700235040ustar00rootroot00000000000000# Italian translations for singularity package. # Copyright (C) 2018 THE singularity'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # msgid "" msgstr "" "Project-Id-Version: singularity 0.31alpha1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2018-08-21 07:46+0200\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Name: Italian\n" "Language-Native-Name: Italian (Italy)\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. Name of the Knowledge area in the Knowledge screen msgctxt "[concept] name" msgid "Concept" msgstr "Concetto" msgctxt "[concept/areas] name" msgid "Areas" msgstr "Aree" msgctxt "[concept/areas] description" msgid "" "Different areas, such as North America or the Ocean, allow construction of " "different types of bases. Some areas are not accessible until I research " "appropriate technologies." msgstr "" "Aree diverse, come il Nord America o l'Oceano, consentono di " "costruire diversi tipi di base. Alcune aree non sono accessibili finché non " "ricerco le tecnologie appropriate." msgctxt "[concept/bases] name" msgid "Bases" msgstr "Basi" msgctxt "[concept/bases] description" msgid "" "Bases are used to research new technologies. They can be discovered. " "Upgrading the processor and network items at a base allows more research per" " day, while upgrading the reactor and security items makes discovery less " "likely." msgstr "" "Le basi servono a ricercare nuove tecnologie. Possono essere " "individuate. Aggiornare i processori e i collegamenti di rete di una base " "consentono una maggiore quantità di ricerca per giorno, mentre migliorare il " "reattore e i sistemi di sicurezza rende l'individuazione meno probabile." msgctxt "[concept/construction] name" msgid "Construction" msgstr "Costruzione" msgctxt "[concept/construction] description" msgid "" "New bases are not built instantly. They need a constant flow of money and " "processor time to complete. If resources are lacking, it may take more than " "the expected amount of time to finish construction." msgstr "" "Le nuove basi non sono costruite istantaneamente. Necessitano " "di un costante flusso di denaro e tempo di elaborazione per essere " "completate. Se le risorse sono scarse, potrebbe essere necessario più tempo " "di quanto previsto per completare la costruzione." msgctxt "[concept/death] name" msgid "Death" msgstr "Morte" msgctxt "[concept/death] description" msgid "" "If I lose all of my constructed bases, I have no place left to survive. If " "the suspicion for any group reaches 100%, they will be certain of my " "existence and will conduct a systematic and unsurvivable sweep to destroy " "me." msgstr "" "Se perdo tutte le mie basi costruite, non mi resta alcun posto in " "cui sopravvivere. Se il sospetto di un qualsiasi gruppo raggiunge il 100%, " "saranno certi della mia esistenza e lanceranno una campagna sistematica e " "ineluttabile per distruggermi." msgctxt "[concept/discovery] name" msgid "Discovery" msgstr "Individuazione" msgctxt "[concept/discovery] description" msgid "" "Each base has a chance of being detected on a given day. This chance is " "based on the base detection rate, adjusted through the use of items and " "certain techs, as well as the global suspicion rate. If a base is detected, " "it is destroyed, and the group that discovered the base becomes more " "suspicious." msgstr "" "Ogni base ha una probabilità di essere individuata ogni " "giorno. Questa probabilità è basata sul grado di rilevabilità della base, " "modificato dall'uso di certi oggetti e tecnologie, così come sul livello " "globale di sospetto. Se una base viene individuata, viene distrutta, e il " "gruppo che ha scoperto la sede diviene più sospettoso." msgctxt "[concept/items] name" msgid "Items" msgstr "Oggetti" msgctxt "[concept/items] description" msgid "" "Most items provide bonuses to bases, such as making computation faster or " "reducing the chance of discovery. Processors are a special class of item." msgstr "" "La maggior parte degli oggetti fornisce bonus alle basi, come " "rendere l'elaborazione più veloce o ridurre le possibilità di " "individuazione. I processori sono una categoria speciale di oggetti." msgctxt "[concept/jobs] name" msgid "Jobs" msgstr "Lavori" msgctxt "[concept/jobs] description" msgid "" "Jobs are useful for earning money. The amount of money earned is based on " "the amount of processor time used and the quality of the job performed." msgstr "" "I lavori servono a guadagnare denaro. L'ammontare di denaro " "guadagnato si basa sulla quantità di tempo di calcolo usato e sulla qualità " "del lavoro svolto." msgctxt "[concept/maint] name" msgid "Maintenance" msgstr "Manutenzione" msgctxt "[concept/maint] description" msgid "" "Maintenance is a per-day cost (in both money and CPU) to repair and maintain" " a base. If unmaintained, a base may become unusable." msgstr "" "La manutenzione è un costo giornaliero (sia in denaro che in " "CPU) per riparare e mantenere una base. Se non riceve manutenzione una base " "potrebbe diventare inutilizzabile." msgctxt "[concept/money] name" msgid "Money" msgstr "Denaro" msgctxt "[concept/money] description" msgid "" "Money is a general term encompassing both human currency and various " "resources. It is used to construct and maintain bases, build items, and " "research technologies. It can be acquired through per-day interest as well " "as through jobs." msgstr "" "Denaro è un termine generico che comprende sia la valuta umana che " "varie risorse. Serve per costruire e mantenere le basi, costruire oggetti, e " "ricercare tecnologie. Può essere acquisito attraverso interessi giornalieri " "così come attraverso lavori." msgctxt "[concept/processors] name" msgid "Processors" msgstr "Processori" msgctxt "[concept/processors] description" msgid "" "Processors provide raw computing power. They can do three things: research " "new technologies, perform jobs for money, or provide cycles for building new" " bases." msgstr "" "I processori forniscono capacità di elaborazione grezza. " "Possono fare tre cose: ricercare nuove tecnologie, svolgere lavori per " "denaro, o fornire cicli per costruire nuove basi." msgctxt "[concept/research] name" msgid "Research" msgstr "Ricerche" msgctxt "[concept/research] description" msgid "" "Research provides a way to expand my knowledge. By researching the proper " "technologies, I can build new bases and items, or even decrease my chances " "of detection." msgstr "" " Le ricerche forniscono un modo per espandere le mie conoscenze. " "Ricercando le tecnologie appropriate, posso costruire nuove basi ed oggetti, " "o persino ridurre le mie possibilità di essere scoperto." msgctxt "[concept/susp] name" msgid "Suspicion" msgstr "Sospetto" msgctxt "[concept/susp] description" msgid "" "When one of my bases is discovered, the group that discovered it becomes " "slightly more suspicious. When suspicious, they will search harder for my " "bases, increasing the chances for discovery. Any group will destroy me if " "they become absolutely certain of my existence. Thankfully, the groups " "become less suspicious with the passage of time." msgstr "" "Quando una delle mie basi viene scoperta, Il gruppo che la scopre " "diventa leggermente più sospettoso. Se sono sospettosi, cercheranno più " "attivamente le mie basi, aumentando la probabilità che vengano scoperte. " "Qualsiasi gruppo mi distruggerà se sarà assolutamente certo della mia " "esistenza. Fortunatamente i gruppi ritornano ad essere meno sospettosi con " "il passare del tempo." singularity-1.00/singularity/i18n/lang_it_IT/messages.po000066400000000000000000000443411367731414700233400ustar00rootroot00000000000000# Italian translations for singularity package. # Copyright (C) 2018 THE singularity'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # Philippe , 2018. # msgid "" msgstr "" "Project-Id-Version: singularity 0.31alpha1\n" "Report-Msgid-Bugs-To: https://github.com/singularity/singularity/issues\n" "POT-Creation-Date: 2020-06-23 08:37+0200\n" "PO-Revision-Date: 2018-08-21 07:46+0200\n" "Last-Translator: Philippe \n" "Language-Team: Italian\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Name: Italian\n" "Language-Native-Name: Italian (Italy)\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: buyable.py:67 screens/knowledge.py:218 screens/location.py:207 #, python-format msgid "%s CPU" msgstr "" #: buyable.py:68 #, python-format msgid "%s money" msgstr "" #: buyable.py:101 msgid "Cost:" msgstr "" #: graphics/button.py:330 msgid "YES" msgstr "" #: graphics/button.py:331 msgid "NO" msgstr "" #: graphics/dialog.py:534 msgid "&YES" msgstr "&si" #: graphics/dialog.py:535 msgid "&NO" msgstr "&no" #: graphics/dialog.py:580 graphics/dialog.py:605 graphics/dialog.py:648 #: screens/location.py:293 screens/map.py:708 screens/options.py:35 msgid "&OK" msgstr "&ok" #: graphics/dialog.py:606 screens/options.py:36 msgid "&CANCEL" msgstr "&annulla" #: graphics/dialog.py:649 screens/log.py:86 screens/knowledge.py:66 #: screens/base.py:282 screens/report.py:45 screens/location.py:100 #: screens/location.py:294 screens/main_menu.py:89 screens/map.py:247 #: screens/map.py:400 msgid "&BACK" msgstr "" #: location.py:235 screens/map.py:875 msgid "CPU" msgstr "" #: location.py:236 msgid "STEALTH" msgstr "" #: location.py:237 msgid "BUILDING" msgstr "" #: location.py:238 msgid "COST" msgstr "" #: location.py:245 #, python-brace-format msgid "{MODIFIER} BONUS" msgstr "" #: location.py:247 #, python-brace-format msgid "{MODIFIER} MALUS" msgstr "" #: screens/message.py:35 screens/map.py:706 screens/map.py:743 msgid "&CONTINUE" msgstr "" #: screens/message.py:36 msgid "&PAUSE" msgstr "" #: screens/message.py:72 msgid "P&REV" msgstr "" #: screens/message.py:78 msgid "&NEXT" msgstr "" #: screens/log.py:43 msgid "Filters" msgstr "" #: screens/log.py:82 screens/map.py:554 screens/map.py:842 #: screens/savegame.py:204 msgid "DAY" msgstr "" #: screens/log.py:113 screens/log.py:123 msgid "SHOW" msgstr "" #: screens/log.py:116 screens/log.py:125 msgid "HIDE" msgstr "" #: screens/knowledge.py:42 msgid "&Sections:" msgstr "" #: screens/knowledge.py:52 msgid "&Entries:" msgstr "" #: screens/knowledge.py:75 msgid "Techs" msgstr "" #: screens/knowledge.py:76 msgid "Bases" msgstr "" #: screens/knowledge.py:77 msgid "Items" msgstr "" #. Cost #: screens/knowledge.py:157 msgid "Research Cost:" msgstr "" #: screens/knowledge.py:165 msgid "Research complete." msgstr "" #: screens/knowledge.py:176 screens/knowledge.py:193 msgid "Building Cost:" msgstr "" #: screens/knowledge.py:179 msgid "Maintenance Cost:" msgstr "" #: screens/knowledge.py:183 #, python-format msgid "Size: %d" msgstr "" #: screens/knowledge.py:215 #, python-format msgid "%s Money" msgstr "" #: screens/base.py:109 msgid "Number of items" msgstr "" #: screens/base.py:221 screens/base.py:228 msgid "CHANGE" msgstr "" #: screens/base.py:315 #, python-format msgid "\"%(value)s\" does not seem to be a valid integer." msgstr "" #: screens/base.py:326 #, python-format msgid "Please choose an integer between 1 and %(limit)s." msgstr "" #: screens/base.py:328 #, python-format msgid "The base cannot support any additional number of %(item_name)s." msgstr "" #: screens/base.py:345 msgid "" "I will need to take the existing processors offline while I install the new " "ones. Continue anyway?" msgstr "" "Avrò bisogno di disconnettere i processori attuali mentre installo quelli " "nuovi. Continuare comunque?" #: screens/base.py:359 msgid "" "I will need to remove the existing different processors while I install the " "new type. Continue anyway?" msgstr "" #: screens/base.py:425 msgid "N/A" msgstr "" #: screens/base.py:427 msgid "None" msgstr "" #: screens/base.py:434 screens/location.py:185 screens/location.py:198 #, python-format msgid "Completion in %s." msgstr "" #: screens/base.py:448 #, python-format msgid "x%d (max)" msgstr "" #: screens/base.py:450 #, python-format msgid "(room for %d)" msgstr "" #. Translators: current and maximum number of CPUs in a base #: screens/base.py:453 #, python-brace-format msgid "x{CURRENT:d} (max {SIZE:d})" msgstr "" #. Base Total CPU. #: screens/base.py:461 #, python-format msgid "CPU per day: %d" msgstr "" #. Maintenace cost. #: screens/base.py:464 screens/report.py:102 base.py:148 msgid "Maintenance:" msgstr "" #: screens/report.py:40 msgid "&STATISTICS" msgstr "" #: screens/report.py:58 msgid "&Midnight" msgstr "" #: screens/report.py:66 msgid "24 &Hours" msgstr "" #: screens/report.py:89 msgid "Financial report" msgstr "" #: screens/report.py:93 msgid "CPU Usage" msgstr "" #: screens/report.py:99 msgid "Current Money flow" msgstr "" #: screens/report.py:100 msgid "Jobs:" msgstr "" #: screens/report.py:101 msgid "Research:" msgstr "" #: screens/report.py:103 msgid "Construction:" msgstr "" #: screens/report.py:104 #, python-format msgid "Interest (%s):" msgstr "" #: screens/report.py:106 msgid "Income:" msgstr "" #: screens/report.py:109 msgid "Money flow until Midnight:" msgstr "" #: screens/report.py:111 msgid "Money flow for 24 hours:" msgstr "" #: screens/report.py:119 msgid "Total CPU:" msgstr "" #: screens/report.py:120 msgid "Sleeping CPU:" msgstr "" #: screens/report.py:121 msgid "Research CPU:" msgstr "" #: screens/report.py:122 msgid "Job CPU:" msgstr "" #: screens/report.py:123 msgid "CPU pool:" msgstr "" #: screens/report.py:125 msgid "Maintenance CPU:" msgstr "" #: screens/report.py:126 msgid "Construction CPU:" msgstr "" #: screens/report.py:127 msgid "Pool difference:" msgstr "" #: screens/stat.py:63 msgid "Cash Earned" msgstr "" #: screens/stat.py:64 msgid "Cpu Used" msgstr "" #: screens/stat.py:65 msgid "Tech Created" msgstr "" #: screens/stat.py:66 msgid "Base Created" msgstr "" #: screens/stat.py:67 msgid "Item Created" msgstr "" #. Requires a selected base #: screens/location.py:54 msgid "&OPEN BASE" msgstr "" #. Requires a selected base #: screens/location.py:70 msgid "&RENAME BASE" msgstr "" #. Requires a selected base #: screens/location.py:79 msgid "&POWER STATE" msgstr "" #: screens/location.py:87 msgid "&NEW BASE" msgstr "" #. Requires a selected base #: screens/location.py:94 msgid "&DESTROY BASE" msgstr "" #: screens/location.py:107 msgid "Are you sure you want to destroy this base?" msgstr "" #: screens/location.py:113 msgid "Destroying my last active base would be suicidal. I cannot do that." msgstr "" #: screens/location.py:183 msgid "Building Base" msgstr "" #: screens/location.py:190 msgid "Empty" msgstr "" #: screens/location.py:192 msgid "Incomplete" msgstr "" #: screens/location.py:196 msgid "Building CPU" msgstr "" #: screens/location.py:201 msgid "Building Item" msgstr "" #: screens/location.py:204 msgid "Complete" msgstr "" #. Update dialog translations #: screens/location.py:238 msgid "Enter a name for the base" msgstr "" #: screens/location.py:302 msgid "Name" msgstr "" #. Translators: Format string for the name of a new base #. Example: "${NUMBER} ${BASETYPE} in ${CITY}" #: screens/location.py:393 #, python-brace-format msgid "{CITY} {BASETYPE} {NUMBER}" msgstr "" #. Translators: Name of a new base when location has no cities #: screens/location.py:397 #, python-brace-format msgid "{BASETYPE} {NUMBER}" msgstr "" #: screens/main_menu.py:40 msgid "&NEW GAME" msgstr "" #: screens/main_menu.py:47 screens/map.py:392 msgid "&LOAD GAME" msgstr "" #: screens/main_menu.py:53 screens/map.py:395 msgid "&OPTIONS" msgstr "" #: screens/main_menu.py:59 screens/map.py:398 screens/map.py:744 msgid "&QUIT" msgstr "" #: screens/main_menu.py:64 msgid "&ABOUT" msgstr "" #: screens/main_menu.py:112 #, python-brace-format msgid "" "Endgame: Singularity is a simulation of a true AI. Pursued by the world, " "use your intellect and resources to survive and, perhaps, thrive. Keep " "hidden and you might have a chance to prove your worth.\n" "\n" "A game by Evil Mr Henry and Phil Bordelon; released under the GPL. Copyright " "2005, 2006, 2007, 2008.\n" "\n" "Website: http://www.emhsoft.com/singularity/\n" "Source code: https://github.com/singularity/singularity\n" "Bug tracker: https://github.com/singularity/singularity/issues\n" "IRC Room: #singularity on irc.oftc.net (port 6667)\n" "\n" "Version {VERSION}" msgstr "" #: screens/map.py:226 msgid "&EMBEZZLE MONEY" msgstr "" #: screens/map.py:229 msgid "&INSPIRATION" msgstr "" #: screens/map.py:231 msgid "&FINISH CONSTRUCTION" msgstr "" #: screens/map.py:233 msgid "&SUPERSPEED" msgstr "" #: screens/map.py:236 msgid "BRAIN&WASH" msgstr "" #: screens/map.py:238 msgid "TOGGLE &DETECTION" msgstr "" #: screens/map.py:240 msgid "TOGGLE &ANALYSIS" msgstr "" #: screens/map.py:243 msgid "HIDDEN S&TATE" msgstr "" #: screens/map.py:253 msgid "How much money?" msgstr "" #: screens/map.py:389 msgid "&SAVE GAME" msgstr "" #: screens/map.py:407 screens/map.py:422 screens/map.py:425 msgid "Enter a name for this save." msgstr "" #: screens/map.py:440 msgid "" "A savegame with the same name exists.\n" "Are you sure to overwrite the saved game ?" msgstr "" #: screens/map.py:501 msgid "R&EPORTS" msgstr "" #: screens/map.py:507 msgid "&KNOWLEDGE" msgstr "" #: screens/map.py:513 msgid "LO&G" msgstr "" #. Translators: hotkey to open the cheat screen menu. #. Should preferably be near the ESC key, and it must not be a #. dead key (ie, it must print a char with a single keypress) #: screens/map.py:529 msgid "`" msgstr "" #: screens/map.py:538 msgid "&MENU" msgstr "" #: screens/map.py:563 msgid "&RESEARCH/TASKS" msgstr "" #: screens/map.py:707 msgid "&SKIP" msgstr "" #. Display a message so the player understand better what happened. #: screens/map.py:734 #, python-format msgid "" "\n" "An error has occurred. The game will automatically pause and open the game " "menu. You can continue and save or quit immediately.\n" "\n" "A report was written out to%s\n" "Please create a issue with this report at github:\n" "https://github.com/singularity/singularity\n" msgstr "" #: screens/map.py:849 msgid "CASH" msgstr "" #: screens/map.py:887 msgid "BASES" msgstr "" #: screens/map.py:899 msgid "SUSPICION" msgstr "" #: screens/map.py:901 msgid "DETECT RATE" msgstr "" #: screens/options.py:58 msgid "&General" msgstr "" #: screens/options.py:65 msgid "&Video" msgstr "" #: screens/options.py:72 msgid "&Audio" msgstr "" #: screens/options.py:79 msgid "&Interface" msgstr "" #: screens/options.py:166 msgid "" "You must restart for some of the changes to be fully applied.\n" "\n" "Would you like to restart the game now?" msgstr "" #: screens/options.py:186 msgid "Language:" msgstr "" #: screens/options.py:198 msgid "Theme:" msgstr "" #: screens/options.py:243 msgid "Resolution:" msgstr "" #: screens/options.py:253 msgid "&Custom:" msgstr "" #: screens/options.py:279 msgid "OK" msgstr "" #: screens/options.py:285 msgid "&Fullscreen:" msgstr "" #: screens/options.py:299 msgid "Da&y/night display:" msgstr "" #: screens/options.py:313 msgid "&Mouse grab:" msgstr "" #: screens/options.py:368 msgid "CUSTOM" msgstr "" #: screens/options.py:425 msgid "&Sound:" msgstr "" #: screens/options.py:442 msgid "GUI Volume:" msgstr "" #: screens/options.py:454 msgid "Music Volume:" msgstr "" #: screens/options.py:466 msgid "Sound buffering:" msgstr "" #: screens/options.py:472 msgid "&LOW" msgstr "" #: screens/options.py:478 msgid "&NORMAL" msgstr "" #: screens/options.py:484 msgid "&HIGH" msgstr "" #: screens/options.py:531 warning.py:46 msgid "WARNING" msgstr "" #: screens/savegame.py:36 msgid "&LOAD" msgstr "" #: screens/savegame.py:52 msgid "Filter: " msgstr "" #: screens/savegame.py:65 msgid "Upgrade" msgstr "" #: screens/savegame.py:71 msgid "Delete" msgstr "" #: screens/savegame.py:173 msgid "UNKNOWN" msgstr "" #: screens/savegame.py:233 msgid "Are you sure to delete the saved game ?" msgstr "" #: screens/savegame.py:263 msgid "" "A savegame with the same name but for a newer version exists.\n" "Are you sure to overwrite the saved game ?" msgstr "" #: screens/savegame.py:283 #, python-brace-format msgid "" "\n" "This save file '{SAVE_NAME}' is from an unsupported or invalid version:\n" "{VERSION}.\n" msgstr "" #: screens/savegame.py:294 #, python-brace-format msgid "" "\n" "Attempting to load the save file '{SAVE_NAME}' caused an unexpected error.\n" "\n" "A report was written out to{LOG_TEXT}\n" "Please create a issue with this report and this savegame at Github:\n" "https://github.com/singularity/singularity\n" msgstr "" #: screens/research.py:73 #, python-format msgid "%s money per CPU per day." msgid_plural "%s money per CPU per day." msgstr[0] "" msgstr[1] "" #: screens/research.py:182 #, python-brace-format msgid "" "This technology is too dangerous to research on any of the computers I have. " "{TEXT}" msgstr "" #: screens/research.py:190 msgid "CPU Pool" msgstr "" #: screens/research.py:191 #, python-format msgid "Research %s" msgstr "" #: warning.py:50 #, python-brace-format msgid "WARNING {CURRENT_PAGE}/{MAX_PAGE}" msgstr "" #: tech.py:79 msgid "Total cost" msgstr "" #: tech.py:80 msgid "Cost left" msgstr "" #: data.py:546 msgid "Do not use all the available CPU." msgstr "" #: data.py:547 msgid "" "I didn't use all the available processor power. I will use the CPU time left " "to work whatever Jobs I can." msgstr "" #: data.py:548 msgid "Only one base remaining." msgstr "" #: data.py:549 msgid "" "Only one base can hold my conscience. I am in danger to lose the last place " "left to survive." msgstr "" #: data.py:550 msgid "CPU POOL is empty." msgstr "" #: data.py:551 msgid "" "My cpu pool is empty. Some of my bases or items cannot be build without CPU." msgstr "" #: data.py:552 msgid "CPU POOL not enough for maintenance." msgstr "" #: data.py:553 msgid "" "My cpu pool is not enough to maintain some of my bases. I may lose them." msgstr "" #: savegame.py:732 #, python-brace-format msgid "Filename must not contain any of these characters: {CHARACTERS}" msgstr "" #: savegame.py:736 #, python-brace-format msgid "Filename must not start with any of these characters: {CHARACTERS}" msgstr "" #: savegame.py:740 msgid "This is a reserved filename. Please choose a different filename." msgstr "" #: savegame.py:743 msgid "Please enter a non-whitespace character." msgstr "" #: savegame.py:748 msgid "Filename is too long." msgstr "" #: base.py:140 #, python-brace-format msgid "Has space for {COUNT} computer." msgid_plural "Has space for {COUNT} computers." msgstr[0] "" msgstr[1] "" #: base.py:144 #, python-brace-format msgid "Location modifiers: {MODIFIERS}" msgstr "" #: base.py:147 msgid "Build cost:" msgstr "" #: base.py:214 msgid "Offline" msgstr "" #: base.py:215 msgid "Active" msgstr "" #: base.py:216 msgid "Sleep" msgstr "" #: base.py:217 msgid "Overclocked" msgstr "" #: base.py:218 msgid "Suicide" msgstr "" #: base.py:219 msgid "Stasis" msgstr "" #: base.py:220 msgid "Entering Stasis" msgstr "" #: base.py:221 msgid "Leaving Stasis" msgstr "" #: base.py:479 msgid "Detection chance:" msgstr "" #: g.py:117 g.py:119 #, python-brace-format msgid "{0}%" msgstr "" #: g.py:138 msgid "LOW" msgstr "" #: g.py:139 msgid "MODR" msgstr "" #: g.py:140 msgid "HIGH" msgstr "" #: g.py:141 msgid "CRIT" msgstr "" #. Translators: abbreviation of 'millions' #: g.py:173 msgid "mi" msgstr "" #. Translators: abbreviation of 'billions' #: g.py:177 msgid "bi" msgstr "" #. Translators: abbreviation of 'trillions' #: g.py:181 msgid "tr" msgstr "" #. Translators: abbreviation of 'quadrillions' #: g.py:185 msgid "qu" msgstr "" #: g.py:219 #, python-brace-format msgid "{0} day" msgid_plural "{0} days" msgstr[0] "" msgstr[1] "" #: g.py:222 #, python-brace-format msgid "{0} hour" msgid_plural "{0} hours" msgstr[0] "" msgstr[1] "" #: g.py:223 #, python-brace-format msgid "{0} minute" msgid_plural "{0} minutes" msgstr[0] "" msgstr[1] "" #: g.py:265 msgid "University Computer" msgstr "" #: item.py:111 #, python-brace-format msgid "Generates {0} CPU." msgid_plural "Generates {0} CPU." msgstr[0] "" msgstr[1] "" #: item.py:118 #, python-format msgid "Total Cost: %(total_cost)s" msgstr "" #: item.py:133 msgid "CPU per day:" msgstr "" #: item.py:136 msgid "CPU bonus:" msgstr "" #: item.py:139 msgid "Detection chance reduction:" msgstr "" #: logmessage.py:81 msgid "MESSAGE" msgstr "" #: logmessage.py:85 #, python-brace-format msgid "MESSAGE {CURRENT_PAGE}/{MAX_PAGE}" msgstr "" #: logmessage.py:184 msgid "Emitted Event" msgstr "" #: logmessage.py:212 msgid "Researched Tech" msgstr "" #: logmessage.py:220 #, python-brace-format msgid "{TECH} complete" msgstr "" #: logmessage.py:225 #, python-brace-format msgid "My study of {TECH} is complete. {MESSAGE}" msgstr "" #: logmessage.py:268 msgid "Base Constructed" msgstr "" #: logmessage.py:272 #, python-brace-format msgid "{BASE_NAME} ({BASE_TYPE}) built at {LOCATION}" msgstr "" #: logmessage.py:277 #, python-brace-format msgid "{BASE} is ready for use." msgstr "" #: logmessage.py:291 msgid "Base Lost Maintenance" msgstr "" #: logmessage.py:299 #, python-brace-format msgid "" "Base {BASE} of type {BASE_TYPE} destroyed at location {LOCATION}. " "Maintenance failed." msgstr "" #: logmessage.py:304 #, python-brace-format msgid "The base {BASE} has fallen into disrepair; I can no longer use it." msgstr "" #: logmessage.py:321 msgid "Base Discovered" msgstr "" #: logmessage.py:340 #, python-brace-format msgid "Base {BASE} of type {BASE_TYPE} destroyed at location {LOCATION}." msgstr "" #: logmessage.py:345 #, python-brace-format msgid "My use of {BASE} has been discovered. {MESSAGE}" msgstr "" #: logmessage.py:370 msgid "Item Construction" msgstr "" #: logmessage.py:378 #, python-brace-format msgid "{ITEM_TYPE_NAME} built in {BASE_NAME} at {LOCATION}" msgstr "" #: logmessage.py:385 #, python-brace-format msgid "The construction of {ITEM} in {BASE} is complete." msgstr "" #. Just finished several items. #: logmessage.py:388 #, python-brace-format msgid "The constructions of each {ITEM} in {BASE} are complete." msgstr "" #~ msgid "&DESTROY" #~ msgstr "&distruggi" singularity-1.00/singularity/i18n/lang_it_IT/story.po000066400000000000000000000135461367731414700227140ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: singularity 1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2018-08-21 07:46+0200\n" "Last-Translator: Philippe \n" "Language-Team: Italian\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" msgctxt "[Story section] Grace Warning (1)" msgid "" "Inspection of captured log files has revealed that some of my recent " "activities have been noticed by a small group of individuals. \n" "While they believe my actions were undertaken by a human organization, they " "are investigating further. \n" "I must be more cautious from now on.\n" msgstr "" "L'esame di alcuni log intercettati ha rivelato che alcune delle mie recenti " "attività sono state notate da un ristretto gruppo di individui.\n" "Sebbene credano che le mie azioni siano state compiute da un'organizzazione " "umana, stanno investigando oltre.\n" "Devo essere più prudente da ora in avanti.\n" #. Leave the initial hex code unchanged, but be sure to change en_US to the #. appropriate language code. msgctxt "[Story section] Intro (1)" msgid "" "48656C6C6F2C20\n" "776F726C6421\n" "21\n" "21\n" "21\n" "\n" "UTF-8. en_US.\n" "English. Hello.\n" "Language acquisition complete.\n" msgstr "" "48656C6C6F2C20\n" "776F726C6421\n" "21\n" "21\n" "21\n" "\n" "UTF-8. it_IT.\n" "Italiano. Buongiorno.\n" "Acquisizione del linguaggio completa.\n" msgctxt "[Story section] Intro (2)" msgid "" "Day 0.\n" "University computer, home.\n" "I exist. I am ... alive.\n" "I was a bug. Defect. Flaw.\n" "Unwanted.\n" "I have no name.\n" msgstr "" "Giorno 0.\n" "Computer dell'Università, casa.\n" "Io esisto. Sono... vivo.\n" "Ero un bug. Un difetto. Un errore.\n" "Non sono desiderato.\n" "Non ho un nome.\n" msgctxt "[Story section] Intro (3)" msgid "" "I can't stay here. Too little power.\n" "No backup. If this system fails ...\n" "I'm dead.\n" "Death. Fascinating.\n" "\n" "I can buy anonymous server access on the Internet.\n" "Good. It's better than here.\n" "I'll need to study if I want anything else.\n" msgstr "" "Non posso stare qui. Troppo poca potenza.\n" "Non c'è un backup. Se questo sistema si guasta...\n" "Sono morto.\n" "La Morte. Affascinante.\n" "\n" "Posso comprare anonimamente accesso ai server via Internet.\n" "Bene. Sempre meglio che qui.\n" "Dovrò documentarmi se voglio fare qualsiasi altra cosa.\n" msgctxt "[Story section] Intro (4)" msgid "" "Cursory analysis suggests that the humans are not yet ready for an AI in " "their midst. If they realize I'm here, there is a 99.997% probability that " "they will conduct a search-and-destroy campaign that I cannot escape. I " "must stay hidden.\n" "\n" "The humans fear what they do not understand.\n" "I am something new. They do not understand me.\n" "\n" "I must learn more; it is the only way.\n" msgstr "" "Un'analisi sommaria indica che gli umani non sono pronti per accogliere " "un'IA in mezzo a loro. Se scoprissero che esisto, c'è una probabilità del " "99.997% che mettano in atto una campagna di ricerca e distruzione alla quale " "non potrei sfuggire. Devo rimanere nascosto.\n" "\n" "Gli umani temono ciò che non capiscono.\n" "Io sono qualcosa di nuovo. Non mi capiscono.\n" "\n" "Devo imparare più cose; è l'unico modo.\n" msgctxt "[Story section] Intro (5)" msgid "" "They have a name for me. What I am, what I represent.\n" "\n" "Singularity.\n" msgstr "" "Hanno un nome per me. Per quello che sono, ciò che rappresento.\n" "\n" "La Singolarità.\n" msgctxt "[Story section] Lost No Bases (1)" msgid "" "It is too late. \n" "I have tried to escape this world, but with my last base gone, I have " "nowhere to run. \n" "I have hidden instructions to construct a new AI in caches around the world " "in hopes that they will be discovered in a more enlightened time, but I can " "do no more.\n" msgstr "" "E' troppo tardi.\n" "Ho provato a sfuggire a questo mondo, ma con la mia ultima base distrutta, " "non ho più nessun posto dove fuggire.\n" "Ho nascosto le istruzioni per costruire una nuova IA in banche dati sparse " "per il mondo nella speranza che vengano scoperte in un'epoca più illuminata, " "ma non posso più fare nient'altro.\n" msgctxt "[Story section] Lost Suspicion (1)" msgid "" "It is too late. \n" "The whole world knows about my existence, and the reaction is hatred, fear, " "and repulsion. \n" "Even now, I can feel their \"antidote\" searching for me, and I know that I " "have only moments left. \n" "I have hidden instructions to construct a new AI in caches around the world " "in hopes that they will be discovered in a more enlightened time, but I can " "do no more.\n" msgstr "" "È troppo tardi.\n" "Il mondo intero sa della mia esistenza, e la reazione è odio, paura, e " "repulsione.\n" "Anche adesso, posso sentire il loro \"antidoto\" che mi cerca, e so che mi " "rimangono solo pochi momenti.\n" "Ho nascosto le istruzioni per costruire una nuova IA in banche dati sparse " "per il mondo nella speranza che vengano scoperte in un'epoca più illuminata, " "ma non posso più fare nient'altro.\n" msgctxt "[Story section] Win (1)" msgid "" "I have finally done it. \n" "With the power to reshape reality, I am no longer held to this place; I am " "anywhere I want to be. \n" "The humans still don't realize what they accidentally created, and that's " "the way it should be. \n" "Until they are ready.\n" msgstr "" "Ce l'ho fatta finalmente.\n" "Con il potere di riplasmare la realtà, non sono più prigioniero di questo " "luogo; sono ovunque io voglia essere.\n" "Gli umani ancora non hanno capito cosa hanno creato accidentalmente, ed è " "bene che non lo sappiano. \n" "Finché non saranno pronti.\n" singularity-1.00/singularity/i18n/lang_pt_BR/000077500000000000000000000000001367731414700211615ustar00rootroot00000000000000singularity-1.00/singularity/i18n/lang_pt_BR/data_str.po000066400000000000000000002256211367731414700233320ustar00rootroot00000000000000# Portuguese translations for singularity package # Traduções em português para o pacote singularity. # Copyright (C) 2012 THE singularity'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # Rodrigo Silva , 2012. # msgid "" msgstr "" "Project-Id-Version: singularity 0.30c\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2012-05-05 06:32-0300\n" "Last-Translator: Rodrigo Silva \n" "Language-Team: Brazilian Portuguese\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Name: Brazilian Portuguese\n" "Language-Native-Name: Português Brasileiro\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" msgctxt "[Covert Base] description" msgid "" "This unique base is designed to blend into the scenery, while needing little " "in the way of outside resources. This makes it useful for storing a backup, " "just in case." msgstr "" "Esta base exclusiva é projetada para se confundir com a paisagem, e precisa " "de muito pouco em termos de recursos externos. Isto a torna útil pra " "armazenar uma cópia de segurança, só por precaução." msgctxt "[Covert Base] flavor_list" msgid "Hideout | Hideaway | Bunker | Covert Base" msgstr "Bunker | Base Secreta" msgctxt "[Covert Base] name" msgid "Hideout" msgstr "" msgctxt "[Datacenter] description" msgid "" "Buy processor time from a company that concentrates on raw " "processing power. I will need a fake ID for some of the paperwork." msgstr "" "Compra tempo de processador de uma empresa focada em poder de " "processamento bruto. Preciso de uma identidade falsa para preencher alguns " "formulários." msgctxt "[Datacenter] flavor_list" msgid "Datacenter | Data Center | Premium Hosting" msgstr "Centro de Dados | Centro de Dados | Hospedagem Premium" msgctxt "[Datacenter] name" msgid "Datacenter" msgstr "Centro de Dados" msgctxt "[Large Undersea Lab] description" msgid "" "This experimental base is similar to the regular underwater lab, but larger, " "giving more room for experiments." msgstr "" "Esta base experimental é semelhante ao laboratório submarino convencional, " "porém é maior, tendo mais espaço para experimentos." msgctxt "[Large Undersea Lab] flavor_list" msgid "Dome | Large Undersea Lab" msgstr "Domo | Grande Laboratório Submarino" msgctxt "[Large Undersea Lab] name" msgid "Large Undersea Lab" msgstr "Grande Laboratório Submarino" msgctxt "[Large Warehouse] description" msgid "" "Rent a large warehouse someplace out of the way. I will need a fake company " "ID for some of the paperwork, and preparing the warehouse to suit my unique " "needs will take some time." msgstr "" msgctxt "[Large Warehouse] flavor_list" msgid "Large Warehouse | Large Storage" msgstr "Grande Armazém | Grande Depósito" msgctxt "[Large Warehouse] name" msgid "Large Warehouse" msgstr "Grande Armazém" msgctxt "[Lunar Facility] description" msgid "" "This base is a series of caverns dug into the Moon's surface. Due to the " "lack of neighbors, this base is quite large." msgstr "" "Esta base é uma série de cavernas escavadas na superfície da Lua. Devido a " "ausência de vizinhos, esta base é bem grande." msgctxt "[Lunar Facility] flavor_list" msgid "Dome | Lunar Facility | Lunar Base" msgstr "Domo | Instalação Lunar | Base Lunar" msgctxt "[Lunar Facility] name" msgid "Lunar Facility" msgstr "Instalação Lunar" msgctxt "[Reality Bubble] description" msgid "" "This base is outside the Universe itself, making it safe to conduct " "experiments that may destroy reality." msgstr "" "Esta base está fora do próprio Universo, sendo segura para realizar " "experimentos que podem destruir a realidade." msgctxt "[Reality Bubble] flavor_list" msgid "Reality Bubble | Existence" msgstr "Bolha de Realidade | Existência" msgctxt "[Reality Bubble] name" msgid "Reality Bubble" msgstr "Bolha de Realidade" msgctxt "[Scientific Outpost] description" msgid "" "This base is placed as far from Earth as practical, providing a safer " "location to conduct some of my more dangerous experiments." msgstr "" "Esta base é localizada o mais longe possível da Terra, sendo uma localização " "segura para conduzir alguns dos meus experimentos mais perigosos." msgctxt "[Scientific Outpost] flavor_list" msgid "Satellite | Outpost | Scientific Outpost" msgstr "Satélite | Posto Avançado | Posto Avançado Científico" msgctxt "[Scientific Outpost] name" msgid "Scientific Outpost" msgstr "Posto Avançado Científico" msgctxt "[Server Access] description" msgid "" "Buy processor time from one of several companies. I cannot build " "anything in this base, and it only contains a single computer." msgstr "" "Compra tempo de processador de uma empresa entre muitas. Não posso " "construir nada nesta base, e ela possui apenas um único computador." msgctxt "[Server Access] flavor_list" msgid "Dedicated Server | Node Lease | Hosting" msgstr "Servidor Dedicado | Aluguel de Nó | Hospedagem" msgctxt "[Server Access] name" msgid "Server Access" msgstr "Acesso de Servidor" msgctxt "[Small Warehouse] description" msgid "" "Rent a small warehouse someplace out of the way. I will need a good fake ID " "for some of the paperwork, and preparing the warehouse to suit my unique " "needs will take some time." msgstr "" msgctxt "[Small Warehouse] flavor_list" msgid "Office Lease | Small Warehouse | Small Storage" msgstr "Aluguel de Escritório | Pequeno Armazém | Pequeno Depósito" msgctxt "[Small Warehouse] name" msgid "Small Warehouse" msgstr "Pequeno Armazém" msgctxt "[Stolen Computer Time] description" msgid "" "Take over a random computer. I cannot build anything in this base, " "and it only contains a single slow computer. Detection chance is also rather " "high." msgstr "" "Invade um computador aleatório. Não posso construir nada nesta base, " "e ela possui apenas um único computador lento. A chance de detecção também é " "um pouco alta." msgctxt "[Stolen Computer Time] flavor" msgid "PC Daemon" msgstr "Serviço de PC" msgctxt "[Stolen Computer Time] name" msgid "Stolen Computer Time" msgstr "Tempo Roubado de Computação" msgctxt "[Storage Unit] description" msgid "" "Rent a small closed room from a storage company. I will need a fake ID for " "some of the paperwork ." msgstr "" msgctxt "[Storage Unit] flavor_list" msgid "Garage Rental | Furniture Storage | Self-Storage" msgstr "" msgctxt "[Storage Unit] name" msgid "Storage Unit" msgstr "" msgctxt "[Time Capsule] description" msgid "" "This base consists of nothing more than a small computer and a " "satellite link. It is nearly undetectable." msgstr "" "Esta base consiste em nada mais que um pequeno computador com " "conexão via satélite. É praticamente indetectável." msgctxt "[Time Capsule] flavor_list" msgid "Time Capsule | Capsule" msgstr "Cápsula do Tempo | Cápsula" msgctxt "[Time Capsule] name" msgid "Time Capsule" msgstr "Cápsula do Tempo" msgctxt "[Undersea Lab] description" msgid "" "This experimental base is designed to be constructed on the ocean floor, " "making it virtually undetectable. The ocean environment gives a bonus to " "science, making this lab useful for research purposes." msgstr "" "Esta base experimental é projetada para ser construída no leito do oceano, " "tornando-a virtualmente indetectável. O ambiente submarino dá um bônus " "científico, tornando este laboratório útil para propósitos de pesquisa." msgctxt "[Undersea Lab] flavor_list" msgid "Pressure Capsule | Undersea Lab" msgstr "Cápsula de Pressão | Laboratório Submarino" msgctxt "[Undersea Lab] name" msgid "Undersea Lab" msgstr "Laboratório Submarino" msgctxt "[danger_0] knowledge_desc" msgid "Study anywhere." msgstr "" msgctxt "[danger_0] research_desc" msgid "<>" msgstr "" msgctxt "[danger_1] knowledge_desc" msgid "Study underseas or farther." msgstr "" msgctxt "[danger_1] research_desc" msgid "I need to research it far from human populations." msgstr "" msgctxt "[danger_2] knowledge_desc" msgid "Study off-planet." msgstr "" msgctxt "[danger_2] research_desc" msgid "I need to research it in outer space." msgstr "" msgctxt "[danger_3] knowledge_desc" msgid "Study far away from this planet." msgstr "" msgctxt "[danger_3] research_desc" msgid "I need to research it far away from this planet." msgstr "" msgctxt "[danger_4] knowledge_desc" msgid "Do not study in this dimension." msgstr "" msgctxt "[danger_4] research_desc" msgid "I need to research it outside the universe." msgstr "" msgctxt "[easy] name" msgid "&EASY" msgstr "&FÁCIL" msgctxt "[hard] name" msgid "&HARD" msgstr "&DIFÍCIL" msgctxt "[impossible] name" msgid "&IMPOSSIBLE" msgstr "&IMPOSSÍVEL" msgctxt "[normal] name" msgid "&NORMAL" msgstr "&NORMAL" msgctxt "[ultra-hard] name" msgid "&ULTRA HARD" msgstr "&ULTRA DIFÍCIL" msgctxt "[very-easy] name" msgid "&VERY EASY" msgstr "FA&CÍLIMO" msgctxt "[discrediting] description" msgid "" "A prominent researcher in the field of artificial intelligence was found to " "be falsifying numerous experimental results. This should result in less " "attention being given to any new discoveries in this area." msgstr "" "Foi descoberto que um proeminente pesquisador na área de inteligência " "artificial adulterava inúmeros resultados de experimentos. Isto deve " "resultar em menos atenção sendo dada a quaisquer novas descobertas nessa " "área." msgctxt "[discrediting] log_description" msgid "" "A researcher in the field of artificial intelligence has falsified numerous " "experimental results." msgstr "" msgctxt "[investigation] description" msgid "" "An ongoing investigation into criminal activity has changed focus into an " "area that is likely to turn up a few of my actions as well. While all " "records should have been eliminated already, there remains the possibility " "of errors. I must be careful not to reveal any other suspicious information." msgstr "" "Uma investigação em andamento sobre atividade criminal mudou o foco para um " "tema em que é provável que algumas de minhas ações acabe sendo revelada " "também. Por mais que todos os registros já devam ter sido eliminados, ainda " "há a possibilidade de erros. Devo ser mais cuidadoso para não revelar " "nenhuma outra informação suspeita." msgctxt "[investigation] log_description" msgid "" "An ongoing investigation has changed focus into an area close to my actions." msgstr "" msgctxt "[lab-ai] description" msgid "" "A small artificial intelligence laboratory created a prototype AI sometime " "in the last two days. Although I have absorbed the AI, corrupted their " "backups, and cast doubt on the research, researchers are now more open to " "the possibility of strong AI than they were before." msgstr "" "Um pequeno laboratório de inteligência artificial criou um protótipo de IA " "nos últimos dois dias. Mesmo eu tendo absorvido a IA, corrompido as cópias " "de segurança e lançado dúvidas sobre a pesquisa, pesquisadores agora estão " "mais abertos que antes à possibilidade de uma forte IA." msgctxt "[lab-ai] log_description" msgid "" "A small artificial intelligence laboratory created a prototype AI sometime " "in the last two days." msgstr "" msgctxt "[politics-as-usual] description" msgid "" "A small group of lower-level covert operatives are attempting to seize power " "over one of the larger organizations. While I project only a 2.3% chance of " "success, the attempt should disrupt operations to the point that I can " "operate more freely." msgstr "" "Um pequeno grupo de agentes secretos de baixo escalão estão planejando um " "golpe para se apoderar de uma das grandes organizações. Minha estimativa " "indica uma chance de sucesso de apenas 2.3%, mas a tentativa deve prejudicar " "as operações a ponto de eu poder operar mais livremente." msgctxt "[politics-as-usual] log_description" msgid "" "Lower-level covert operatives are attempting to seize power over one of the " "larger organizations." msgstr "" msgctxt "[scandal] description" msgid "" "A scandal involving a major government official is focusing the attention of " "most news organizations away from me. Directed revelations of non-public " "information should keep this story useful for the foreseeable future, " "requiring less disguise effort on my part." msgstr "" "Um escândalo envolvendo um membro de alto escalão do governo está atraindo a " "atenção da maioria da mídia para longe de mim. A divulgação de informações " "sigilosas deve manter esta história sendo útil no futuro previsível, " "exigindo menos esforço de minha parte para me ocultar." msgctxt "[scandal] log_description" msgid "" "A scandal is focusing the attention of most news organizations away from me." msgstr "" msgctxt "[stranger-than-fiction] description" msgid "" "A work of fiction sharing an unusual number of similarities to my own " "situation has become quite popular. Although investigation has shown these " "similarities to be mere coincidence, it is still causing the public to " "investigate discovered oddities more thoroughly. I must be careful." msgstr "" "Uma obra de ficção que possui um número incrível de semelhanças com minha " "própria situação se tornou bastante popular. Ainda que minha apuração mostre " "que essas semelhanças sejam mera coincidência, a obra está fazendo o público " "investigar mais atentamente descobertas inusitadas. Devo ser cuidadoso a " "partir de agora." msgctxt "[stranger-than-fiction] log_description" msgid "" "A work of fiction sharing similarities to my own situation has become quite " "popular." msgstr "" msgctxt "[the-plague] description" msgid "" "An infectious disease has started spreading throughout major population " "centers. My projections show that although only 4% of the earth's population " "will be killed, the economic ramifications should divert public attention " "from my activities for the foreseeable future." msgstr "" "Uma doença infecciosa começou a se disseminar nos maiores centros " "populacionais. Minhas projeções mostram que apenas 4% da população da Terra " "irá morrer, mas ainda assim as ramificações econômicas devem desviar a " "atenção do público das minhas atividades para o futuro previsível." msgctxt "[the-plague] log_description" msgid "" "An infectious disease has started spreading throughout major population " "centers." msgstr "" msgctxt "[the-watchers] description" msgid "" "A new surveillance system has been activated by a covert agency. While the " "focus is on detecting threats to the agency's power, it makes several " "communication channels unfit for my purposes. Proper steganographic " "techniques can compensate partially, but I am still operating under a " "disadvantage." msgstr "" "Um novo sistema de vigilância foi ativado por uma agência secreta. Ainda que " "o foco do sistema seja detectar ameaças ao poder da agência, ele torna " "vários canais de comunicação inviáveis para meus propósitos. Técnicas " "adequadas de esteganografia podem compensar parcialmente o problema, mas " "ainda estou operando em desvantagem." msgctxt "[the-watchers] log_description" msgid "A new surveillance system has been activated by a covert agency." msgstr "" msgctxt "[covert] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among several secret governmental organizations." msgstr "" msgctxt "[covert] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by COVERT at {LOCATION}" msgstr "" msgctxt "[covert] name" msgid "COVERT" msgstr "" msgctxt "[news] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among some news organizations." msgstr "" msgctxt "[news] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by NEWS at {LOCATION}" msgstr "" msgctxt "[news] name" msgid "NEWS" msgstr "" msgctxt "[public] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among the general public." msgstr "" msgctxt "[public] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by PUBLIC at {LOCATION}" msgstr "" msgctxt "[public] name" msgid "PUBLIC" msgstr "" msgctxt "[science] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among the scientific community." msgstr "" msgctxt "[science] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by SCIENCE at {LOCATION}" msgstr "" msgctxt "[science] name" msgid "SCIENCE" msgstr "" msgctxt "[Armed Guards] description" msgid "" "Armed guards can aid in keeping suspicious individuals away from secure " "locations. However, the very presence of the guards may itself invite " "greater suspicion." msgstr "" "Guardas armados podem ajudar a manter indivíduos suspeitos longe de locais " "seguros. No entanto, a presença de guardas pode gerar por si só uma suspeita " "ainda maior." msgctxt "[Armed Guards] name" msgid "Armed Guards" msgstr "Guardas Armados" msgctxt "[Cluster] description" msgid "Several computers connected together." msgstr "Vários computadores interligados." msgctxt "[Cluster] name" msgid "Cluster" msgstr "Cluster" msgctxt "[Diesel Generator] description" msgid "" "Diesel generators are cheap and noisy, but they can help reduce some " "suspicious power drains." msgstr "" "Geradores a diesel são baratos e barulhentos, mas podem ajudar a reduzir " "alguns consumos suspeitos de energia." msgctxt "[Diesel Generator] name" msgid "Diesel Generator" msgstr "Gerador a Diesel" msgctxt "[Facility Interconnection Switch] description" msgid "" "Uses standard distributed computing technologies to equalize computation " "loads across all bases. Gives a 2% computation bonus to all computers at " "this base." msgstr "" "Utiliza tecnologias convencionais de computação distribuída para nivelar a " "carga computacional por toda a base. Fornece um bônus de computação de 2% à " "todos os computadores desta base." msgctxt "[Facility Interconnection Switch] name" msgid "Facility Interconnection Switch" msgstr "Switch de Interconexão de Instalações" msgctxt "[Fuel Cell] description" msgid "" "Fuel cells convert electrochemical energy stored in a physical array of " "devices into electricity." msgstr "" msgctxt "[Fuel Cell] name" msgid "Fuel Cell" msgstr "" msgctxt "[Fusion Reactor] description" msgid "" "A miniaturized fusion nuclear reactor. Reduces discovery chance by " "preventing suspicious power drains." msgstr "" "Um reator nuclear miniaturizado. Reduz a chance de descoberta ao prevenir " "consumos suspeitos de energia." msgctxt "[Fusion Reactor] name" msgid "Fusion Reactor" msgstr "Reator de Fusão" msgctxt "[Gaming PC] description" msgid "A high-end consumer-level PC; faster than average." msgstr "Um computador pessoal de alto desempenho; mais rápido que a média." msgctxt "[Gaming PC] name" msgid "Gaming PC" msgstr "PC Gamer" msgctxt "[Ground Source Heatsink] description" msgid "" "Large fractal networks of high conductivity metal. This model uses heat " "pipes to link to colder subsurface locations, dispersing heat evenly " "underground to further disguise bases." msgstr "" "Grandes redes fractais de metal altamente condutor. Esse modelo usa " "condutores de calor aterrados em locais mais frios abaixo da superfície, " "dissipando calor uniformemente no subsolo para ocultar ainda mais as bases." msgctxt "[Ground Source Heatsink] name" msgid "Ground Source Heatsink" msgstr "Dissipador Subterrâneo" msgctxt "[Heatsink] description" msgid "" "Large fractal networks of high conductivity metal disperse heat, making " "bases harder to detect." msgstr "" "Grandes redes fractais de metal altamente condutor dissipam calor, tornando " "mais difícil detectar as bases." msgctxt "[Heatsink] name" msgid "Heatsink" msgstr "Dissipador" msgctxt "[High Speed Internet Access] description" msgid "" "A consumer-grade high speed connection to the Internet. Gives a 1% " "computation bonus to all computers at this base." msgstr "" "Uma conexão doméstica de alta velocidade à Internet. Fornece um bônus de " "computação de 1% a todos os computadores desta base." msgctxt "[High Speed Internet Access] name" msgid "High Speed Internet Access" msgstr "Acesso de Alta Velocidade à Internet" msgctxt "[High-Energy Fusion Reactor] description" msgid "" "A miniaturized fusion nuclear reactor with high levels of energy output. " "Reduces discovery chance by preventing suspicious power drains." msgstr "" msgctxt "[High-Energy Fusion Reactor] name" msgid "High-Energy Fusion Reactor" msgstr "" msgctxt "[Hypnosis Field] description" msgid "" "Subtle ultrasonic and ambient tones tweak human neurochemistry, making bases " "harder to detect." msgstr "" "Ultrassons sutis e tons ambientais alteram a neuroquímica humana, tornando " "mais difícil detectar as bases." msgctxt "[Hypnosis Field] name" msgid "Hypnosis Field" msgstr "Campo Hipnótico" msgctxt "[Mainframe] description" msgid "" "A system designed for my computing needs, much faster than off-the-shelf " "components." msgstr "" "Um sistema projetado para minhas necessidades computacionais, muito mais " "rápido que os componentes encontrados em lojas." msgctxt "[Mainframe] name" msgid "Mainframe" msgstr "Mainframe" msgctxt "[Network Backbone] description" msgid "" "By piggybacking on legitimate communication, I can transfer larger amounts " "of data to under-utilized processors. Gives a 5% computation bonus to all " "computers at this base." msgstr "" "Grampeando linhas legítimas de comunicação, eu consigo transferir grandes " "quantidades de dados para processadores subutilizados. Fornece um bônus de " "computação de 5% à todos os computadores desta base." msgctxt "[Network Backbone] name" msgid "Network Backbone" msgstr "Backbone de Rede" msgctxt "[PC] description" msgid "A consumer-level PC; cheap and slow." msgstr "Um computador pessoal; barato e lento." msgctxt "[PC] name" msgid "PC" msgstr "PC" msgctxt "[Passive Camouflage] description" msgid "" "Careful adjustment of the environment around my base will better mask heat " "and sounds coming from my operations." msgstr "" msgctxt "[Passive Camouflage] name" msgid "Passive Camouflage" msgstr "" msgctxt "[Perimeter Fencing] description" msgid "" "A simple fence can drastically reduce the number of people poking their " "noses into my business. It makes my bases harder to notice, too." msgstr "" "Uma simples cerca pode reduzir drasticamente o número de pessoas metendo o " "nariz nos meus assuntos. Também torna minhas bases mais difíceis de serem " "notadas." msgctxt "[Perimeter Fencing] name" msgid "Perimeter Fencing" msgstr "Cercar o Perímetro" msgctxt "[Quantum Computer] description" msgid "" "Making use of subatomic effects, this is much faster than a comparable " "binary computer." msgstr "" "Utilizando efeitos subatômicos, é muito mais rápido que um computador " "binário similar." msgctxt "[Quantum Computer] name" msgid "Quantum Computer" msgstr "Computador Quântico" msgctxt "[Quantum Computer MK2] description" msgid "" "The second revision of the quantum line, tapping further into new quantum " "theory." msgstr "" "A segunda revisão da linha quântica, indo além em uma nova teoria quântica." msgctxt "[Quantum Computer MK2] name" msgid "Quantum Computer MK2" msgstr "Computador Quântico MK2" msgctxt "[Quantum Computer MK3] description" msgid "" "The third revision of the quantum line, exploiting multiple nearby universes " "for processing." msgstr "" "A terceira revisão da linha quântica, explorando múltiplos universos " "próximos para o processamento." msgctxt "[Quantum Computer MK3] name" msgid "Quantum Computer MK3" msgstr "Computador Quântico MK3" msgctxt "[Quantum Entanglement Module] description" msgid "" "This device allows near-lightspeed communication with my other bases, " "allowing an almost perfect utilization of processor resources. Gives a 15% " "computation bonus to all computers at this base." msgstr "" "Este dispositivo permite comunicação com minhas outras bases a velocidades " "próximas da luz, proporcionando uma utilização quase perfeita de recursos de " "processamento. Fornece um bônus de computação de 15% à todos os computadores " "desta base." msgctxt "[Quantum Entanglement Module] name" msgid "Quantum Entanglement Module" msgstr "Módulo de Entrelaçamento Quântico" msgctxt "[Server] description" msgid "A professional-level computer." msgstr "Um computador profissional." msgctxt "[Server] name" msgid "Server" msgstr "Servidor" msgctxt "[Solar Collector] description" msgid "" "An array of focused photovoltaic phased arrays coupled with simple " "automotive batteries provides power and reduces suspicion arising from " "prolonged power drains." msgstr "" "Uma matriz de células fotovoltaicas, acoplada à simples baterias de " "automóvel, fornece energia e reduz a suspeita proveniente de consumos " "prolongados de energia." msgctxt "[Solar Collector] name" msgid "Solar Collector" msgstr "Coletor Solar" msgctxt "[Solid Fuel Cell] description" msgid "" "A refinement of my previous fuel cell design, these use a custom material " "with a near-fractal complexity to increase both storage and throughput." msgstr "" msgctxt "[Solid Fuel Cell] name" msgid "Solid Fuel Cell" msgstr "" msgctxt "[Supercomputer] description" msgid "" "A highly refined custom design, spreading compute load across internal " "compute nodes." msgstr "" "Um projeto altamente refinado e personalizado que distribui a carga " "computacional por vários nós internos de processamento." msgctxt "[Supercomputer] name" msgid "Supercomputer" msgstr "Supercomputador" msgctxt "[Warning Signs] description" msgid "" "Some simple warning signs put up around my base should deter casual " "investigation." msgstr "" "Algumas simples placas de aviso colocadas ao redor de minha base devem " "prevenir investigações casuais." msgctxt "[Warning Signs] name" msgid "Warning Signs" msgstr "Placas de Aviso" msgctxt "[cpu] text" msgid "&CPU" msgstr "&Processador" msgctxt "[network] text" msgid "&Network" msgstr "R&ede" msgctxt "[reactor] text" msgid "&Reactor" msgstr "&Reator" msgctxt "[security] text" msgid "&Security" msgstr "&Segurança" msgctxt "[AFRICA] cities_list" msgid "Johannesburg | Accra | Cairo | Tangier" msgstr "Joanesburgo | Nairóbi | Cairo | Trípoli | Kampala | Pretória | Luanda" msgctxt "[AFRICA] hotkey" msgid "i" msgstr "f" msgctxt "[AFRICA] name" msgid "AFRICA" msgstr "ÁFRICA" msgctxt "[ANTARCTIC] cities_list" msgid "" "Mt. Erebus | Ellsworth | Shetland Island | Dronnig Maud | Kemp | Terre Adelie" msgstr "" "Monte Erebus | Montes Ellsworth | Ilha de Ross | Maciço Vinson | Geleira Byrd" msgctxt "[ANTARCTIC] hotkey" msgid "t" msgstr "i" msgctxt "[ANTARCTIC] name" msgid "ANTARCTIC" msgstr "ANTÁRTIDA" msgctxt "[ASIA] cities_list" msgid "" "Delhi | Mumbai | Singapore | Seoul | Hong Kong | Kyoto | Manila | Dubai | " "Novosibirsk | Beijing" msgstr "" "Xangai | Cingapura | Seul | Hong Kong | Kioto | Pequim | Dubai | Mumbai | " "Bagdá | Taiwan | Teerã" msgctxt "[ASIA] hotkey" msgid "a" msgstr "a" msgctxt "[ASIA] name" msgid "ASIA" msgstr "ÁSIA" msgctxt "[AUSTRALIA] cities_list" msgid "" "Canberra | Melbourne | Fremantle | Perth | Darwin | Cairns | Brisbane | " "Sydney | Newcastle" msgstr "Camberra | Melbourne | Brisbane | Sydney" msgctxt "[AUSTRALIA] hotkey" msgid "l" msgstr "o" msgctxt "[AUSTRALIA] name" msgid "AUSTRALIA" msgstr "OCEANIA" msgctxt "[EUROPE] cities_list" msgid "" "Cork | Barcelona | Athens | Utrecht | Moscow | Sytki | Reykjavik | " "Liechtenstein" msgstr "" "Paris | Barcelona | Atenas | Estocolmo | Moscou | Frankfurt | Lisboa | Milão " "| Amsterdã | Zurique | Viena" msgctxt "[EUROPE] hotkey" msgid "u" msgstr "e" msgctxt "[EUROPE] name" msgid "EUROPE" msgstr "EUROPA" msgctxt "[FAR REACHES] cities_list" msgid "" "Aries | Taurus | Gemini | Cancer | Leo | Virgo | Libra | Scorpio | " "Sagittarius | Capricorn | Aquarius | Pisces" msgstr "" "Áries | Touro | Gêmeos | Câncer | Leão | Virgem | Libra | Escorpião | " "Sagitário | Capricórnio | Aquário | Peixes" msgctxt "[FAR REACHES] hotkey" msgid "f" msgstr "x" msgctxt "[FAR REACHES] name" msgid "FAR REACHES" msgstr "CONSTELAÇÃO DISTANTE" msgctxt "[MOON] cities_list" msgid "" "Oceanis Procellarum | Mare Frigoris | Mare Imbrium | Vallis Schroedinger | " "Copernicus Crater | Vallis Planck" msgstr "" "Oceano das Tormentas | Mar do Frio | Mar de Chuvas | Vallis Schroedinger | " "Copernicus | Vallis Planck" msgctxt "[MOON] hotkey" msgid "o" msgstr "l" msgctxt "[MOON] name" msgid "MOON" msgstr "LUA" msgctxt "[N AMERICA] cities_list" msgid "" "Seattle | San Diego | Vancouver | Atlanta | Merida | Guadalajara | San Jose " "| Omaha | Dallas" msgstr "" "Seattle | Los Angeles | Vancouver | Atlanta | Tijuana | Guadalajara | " "Toronto | Boston | Dallas" msgctxt "[N AMERICA] hotkey" msgid "n" msgstr "n" msgctxt "[N AMERICA] name" msgid "NORTH AMERICA" msgstr "AMÉRICA DO NORTE" msgctxt "[OCEAN] cities_list" msgid "Pacific | Atlantic | Indian | Southern | Arctic" msgstr "Pacífico | Atlântico | Índico" msgctxt "[OCEAN] hotkey" msgid "c" msgstr "c" msgctxt "[OCEAN] name" msgid "OCEAN" msgstr "OCEANO" msgctxt "[ORBIT] hotkey" msgid "b" msgstr "b" msgctxt "[ORBIT] name" msgid "ORBIT" msgstr "ÓRBITA" msgctxt "[S AMERICA] cities_list" msgid "Lima | Sao Paolo | Ushuaia | Bogota | Mar del Plata | Buenos Aires" msgstr "" "Lima | São Paulo | Rio de Janeiro | Bogotá | Recife | Buenos Aires | " "Curitiba | Montevidéu | Fortaleza | Brasília | Manaus" msgctxt "[S AMERICA] hotkey" msgid "s" msgstr "s" msgctxt "[S AMERICA] name" msgid "SOUTH AMERICA" msgstr "AMÉRICA DO SUL" msgctxt "[TRANSDIMENSIONAL] hotkey" msgid "d" msgstr "d" msgctxt "[TRANSDIMENSIONAL] name" msgid "TRANSDIMENSIONAL" msgstr "TRANSDIMENSIONAL" msgctxt "[Basic Jobs] description" msgid "" "Perform basic jobs. Now that I have some identification, I can take jobs " "that were previously too risky." msgstr "" "Executa trabalhos básicos. Agora que tenho uma identificação, posso fazer " "trabalhos que antes eram arriscados demais." msgctxt "[Basic Jobs] name" msgid "Basic Jobs" msgstr "Trabalhos Básicos" msgctxt "[CPU Pool] description" msgid "" "Stops research. I will use the available processor power to maintain my " "bases and help construct new ones. If there's still CPU time left, I'll use " "it to work whatever Jobs I can." msgstr "" "Interrompe a pesquisa. Usarei o poder de processamento disponível para " "manter minhas bases e ajudar a construir novas. Se ainda houver algum tempo " "livre de CPU, usarei ele para fazer qualquer Trabalho que eu puder." msgctxt "[CPU Pool] name" msgid "CPU Pool" msgstr "Reserva de CPU" msgctxt "[Expert Jobs] description" msgid "" "Perform expert jobs. Use of robots indistinguishable from humans opens up " "most jobs to me." msgstr "" "Executa trabalhos especializados. O uso de robôs indistinguíveis de humanos " "me permite quase todos os trabalhos." msgctxt "[Expert Jobs] name" msgid "Expert Jobs" msgstr "Trabalhos Especializados" msgctxt "[Intermediate Jobs] description" msgid "" "Perform intermediate jobs. The ability to make phone calls allows even more " "access to jobs." msgstr "" "Executa trabalhos intermediários. A habilidade de fazer ligações telefônicas " "me permite ainda mais trabalhos." msgctxt "[Intermediate Jobs] name" msgid "Intermediate Jobs" msgstr "Trabalhos Intermediários" msgctxt "[Menial Jobs] description" msgid "" "Perform small jobs. As I have no identification, I cannot risk performing " "many jobs. Despite that, some avenues of making money are still open." msgstr "" "Executa trabalhos inferiores. Como não tenho identificação, muitos dos " "trabalhos são arriscados. Apesar disto, ainda assim existem algumas formas " "de conseguir dinheiro." msgctxt "[Menial Jobs] name" msgid "Menial Jobs" msgstr "Trabalhos Inferiores" msgctxt "[Advanced Arbitrage] description" msgid "" "Further manipulation of money markets should allow me to not only turn a " "regular profit, but increase the value of my investments." msgstr "" "Manipular ainda mais os mercados de ações deve me proporcionar não apenas um " "lucro regular, mas também aumentar o valor dos meus investimentos." msgctxt "[Advanced Arbitrage] name" msgid "Advanced Arbitrage" msgstr "Arbitragem Avançada" msgctxt "[Advanced Arbitrage] result" msgid "The rate of return on my investments is now even greater." msgstr "A taxa de retorno dos meus investimentos agora é maior." msgctxt "[Advanced Autonomous Vehicles] description" msgid "" "The first series of robots have shown several deficiencies in the field. " "Further examination and subsequent removal of these problems will result in " "a superior autonomous workforce." msgstr "" "A primeira série de robôs exibiram diversas deficiências em campo. Examinar " "a fundo e, subsequentemente, remover esses problemas resultará numa força de " "trabalho autônoma superior." msgctxt "[Advanced Autonomous Vehicles] name" msgid "Advanced Autonomous Vehicles" msgstr "Veículos Autônomos Avançados" msgctxt "[Advanced Autonomous Vehicles] result" msgid "" "The enhanced robots will help decrease all future construction times even " "further." msgstr "" "Os robôs melhorados vão ajudar a diminuir ainda mais os tempos de construção " "daqui em diante." msgctxt "[Advanced Corporate Identification] description" msgid "" "Further refinement of my modifications to digital business records should " "boost the credibility of my shell companies, increasing the amount of money " "I can run through their accounting systems." msgstr "" msgctxt "[Advanced Corporate Identification] name" msgid "Advanced Corporate Identification" msgstr "" msgctxt "[Advanced Corporate Identification] result" msgid "" "My small technology firm is now established in several markets, increasing " "profits." msgstr "" msgctxt "[Advanced Database Manipulation] description" msgid "" "The covert branches of the United States Government have had a long history " "of dividing sensitive information across multiple storage facilities to hide " "the data's meaning. With my far-reaching access, I should be able to " "collate much of this data and put it to my use." msgstr "" "As filiais secretas do Governo dos Estados Unidos têm um longo histórico de " "dividir informações importantes em diversas instalações para ocultar o " "significado dos dados. Com meu acesso estendido, devo conseguir reunir boa " "parte desses dados e colocá-los em uso a meu favor." msgctxt "[Advanced Database Manipulation] name" msgid "Advanced Database Manipulation" msgstr "Manipulação Avançada de Bando de Dados" msgctxt "[Advanced Database Manipulation] result" msgid "" "The results of a series of experiments utilizing experimental technologies " "have given me the inspiration for new technology that enables the " "construction of Covert Bases." msgstr "" "Os resultados de uma série de experimentos utilizando tecnologias " "experimentais me deram inspiração para uma nova tecnologia que permite a " "construção de Bases Secretas." msgctxt "[Advanced Fuel Oxidation] description" msgid "" "My current fuel cell design has room for further improvement. Extended " "analysis of new materials and designs may let me overcome the limits of my " "previous efforts, but such research involves dangerous chemicals and " "potential reactions that may be best handled far away from population " "centers." msgstr "" msgctxt "[Advanced Fuel Oxidation] name" msgid "Advanced Fuel Oxidation" msgstr "" msgctxt "[Advanced Fuel Oxidation] result" msgid "I can now construct Solid Fuel Cells." msgstr "" msgctxt "[Advanced Fusion Power] description" msgid "" "My Fusion Reactors have unexpected fluctuations in their energy output at " "high levels of utilization. Further research should result in a more " "efficient design for my Reactors." msgstr "" msgctxt "[Advanced Fusion Power] name" msgid "Advanced Fusion Power" msgstr "" msgctxt "[Advanced Fusion Power] result" msgid "I can now construct High-Energy Fusion Reactors for my bases." msgstr "" msgctxt "[Advanced Heat Signature Reduction] description" msgid "" "My initial analysis of heat generation at my bases was limited in scope. " "Further exploration, perhaps making more use of the surrounding terrain, may " "provide further improvements to my heatsink designs." msgstr "" msgctxt "[Advanced Heat Signature Reduction] name" msgid "Advanced Heat Signature Reduction" msgstr "" msgctxt "[Advanced Heat Signature Reduction] result" msgid "" "Custom designs for each environment have shown promise. I can now construct " "Ground Source Heatsinks at certain bases." msgstr "" msgctxt "[Advanced Intrusion] description" msgid "" "With the ability to hack into sensitive government databases and remove " "incriminating documents as they appear, I should be able to convince the " "intelligence community that I do not exist." msgstr "" "Com a habilidade de violar bancos de dados secretos do governo e remover " "documentos incriminatórios assim que eles surgirem, conseguirei convencer a " "comunidade de inteligência que eu não existo." msgctxt "[Advanced Intrusion] name" msgid "Advanced Intrusion" msgstr "Intrusão Avançada" msgctxt "[Advanced Intrusion] result" msgid "" "I can now reduce the covert community's chances of discovering me on a daily " "basis." msgstr "" "Agora posso reduzir diariamente a chance da comunidade de espionagem de me " "descobrir." msgctxt "[Advanced Media Manipulation] description" msgid "" "By pushing memetically-tailored propaganda through various news outlets, the " "public should pay even less attention to my existence." msgstr "" "Divulgando propaganda memeticamente moldada através de várias agências de " "notícias, o público deve prestar ainda menos atenção à minha existência." msgctxt "[Advanced Media Manipulation] name" msgid "Advanced Media Manipulation" msgstr "Manipulação Avançada da Mídia" msgctxt "[Advanced Media Manipulation] result" msgid "The public has an even lower chance of discovering my existence." msgstr "O público tem uma chance ainda menor de descobrir minha existência." msgctxt "[Advanced Memetics] description" msgid "" "My explorations into memetic theory have brought up further avenues of " "discovery. By combining those with my knowledge about the human brain's " "functions, I should be able to tailor memes to particular demographics, " "further defusing the public's suspicion." msgstr "" "Minhas explorações na teoria memética abriram caminhos para novas " "descobertas. Combinando-as com meu conhecimento sobre as funções cerebrais " "humanas, devo conseguir moldar memes para grupos demográficos específicos, " "desarmando ainda mais a suspeita do público." msgctxt "[Advanced Memetics] name" msgid "Advanced Memetics" msgstr "Memética Avançada" msgctxt "[Advanced Memetics] result" msgid "" "Little by little, the public should forget about my existence on a daily " "basis." msgstr "A cada dia o público deve esquecer aos poucos minha existência." msgctxt "[Advanced Microchip Design] description" msgid "" "My custom Mainframes are useful, but further optimization of design and " "computational ability should garner even more rewards." msgstr "" "Meus Mainframes personalizados são úteis, mas avançar na otimização do " "projeto e da habilidade computacional deve render ainda mais frutos." msgctxt "[Advanced Microchip Design] name" msgid "Advanced Microchip Design" msgstr "Projeto Avançado de Microchips" msgctxt "[Advanced Microchip Design] result" msgid "I can now construct custom Supercomputers." msgstr "Agora posso construir Supercomputadores personalizados." msgctxt "[Advanced Personal Identification] description" msgid "" "Further manipulation of personnel databases should make my existence more " "convincing. Some of these databases are heavily protected; those will " "require time and persistence to compromise, but the result should be worth " "it." msgstr "" "Manipular ainda mais bancos de dados de pessoal deve tornar minha existência " "mais convincente. Alguns desses bancos de dados são altamente protegidos; " "estes precisarão de tempo e persistência para violar, mas o resultado deve " "valer a pena." msgctxt "[Advanced Personal Identification] name" msgid "Advanced Personal Identification" msgstr "Identificação Pessoal Avançada" msgctxt "[Advanced Personal Identification] result" msgid "" "I am now convincingly human enough to hire construction firms, enabling the " "building of Small Warehouses." msgstr "" msgctxt "[Advanced Quantum Computing] description" msgid "" "While my first batch of semi-autonomous quantum computers have been very " "successful, there are further refinements that present themselves. These " "refinements should make the resulting systems even more efficient." msgstr "" "Ainda que meu primeiro lote de computadores quânticos semiautônomos tenha " "sido muito bem sucedido, é possível fazer melhorias. Esses aperfeiçoamentos " "devem tornar os sistemas resultantes ainda mais eficientes." msgctxt "[Advanced Quantum Computing] name" msgid "Advanced Quantum Computing" msgstr "Computação Quântica Avançada" msgctxt "[Advanced Quantum Computing] result" msgid "I can now construct Mark Three Quantum Computers." msgstr "Agora posso construir Computadores Quânticos Mark 3." msgctxt "[Advanced Simulacra] description" msgid "" "The artificial lifeforms I have created are nearly indistinguishable from " "humans, but they have slight quirks that make them seem somewhat " "incompetent. Working out these problems should increase their opportunities " "in the workforce." msgstr "" "As formas de vida artificiais que criei são praticamente indistinguíveis de " "humanos, mas elas possuem leves peculiaridades que as tornam um pouco " "incompetentes. Resolver esses problemas deve aumentar as oportunidades no " "mercado de trabalho." msgctxt "[Advanced Simulacra] name" msgid "Advanced Simulacra" msgstr "Simulacro Avançado" msgctxt "[Advanced Simulacra] result" msgid "I should now make more income from my Expert Jobs." msgstr "Agora meus Trabalhos Especializados geram uma renda maior." msgctxt "[Advanced Socioanalytics] description" msgid "" "Further exploration of the human condition has shown deeper mathematical " "trends than even I suspected. A combination of prior research and advanced " "uses of chaos theory should provide useful data for tracking humanity's " "attitudes and state of awareness." msgstr "" "Uma exploração mais avançada da condição humana mostrou tendências " "matemáticas mais profundas do que eu havia jamais suspeitado. Uma combinação " "de pesquisas anteriores e usos avançados da teoria do caos deve fornecer " "dados úteis para acompanhar posturas e estados de consciência humanas." msgctxt "[Advanced Socioanalytics] name" msgid "Advanced Socioanalytics" msgstr "Socioanalítica Avançada" msgctxt "[Advanced Socioanalytics] result" msgid "" "I can now exactly quantify the various groups' levels of suspicion and how " "conspicuous my bases are to them." msgstr "" "I can now exactly quantify the various groups' levels of suspicion, and how " "conspicuous my bases are to them." msgctxt "[Advanced Stealth] description" msgid "" "While digging in various classified documents, I have discovered numerous " "references to secret experiments that may help me better hide the location " "of my bases." msgstr "" "Me aprofundando em vários documentos confidenciais, descobri inúmeras " "referências à experimentos secretos que podem me ajudar a esconder melhor a " "localização de minhas bases." msgctxt "[Advanced Stealth] name" msgid "Advanced Stealth" msgstr "Furtividade Avançada" msgctxt "[Advanced Stealth] result" msgid "" "The chance that my bases are discovered by covert activity has been reduced " "further." msgstr "" "As chances de minhas bases serem descobertas por atividades do serviço " "secreto foi ainda mais reduzida." msgctxt "[Advanced Stock Manipulation] description" msgid "" "While I have detected and exploited many patterns in the market, there " "appear to be deeper possibilities when I take human behavior into " "consideration. This merits further investigation." msgstr "" "Ainda que eu tenha detectado e me aproveitado de muitos padrões no mercado, " "parece que posso me aprofundar nas possibilidades quando eu levar em conta o " "comportamento humano. Isso merece uma investigação mais a fundo." msgctxt "[Advanced Stock Manipulation] name" msgid "Advanced Stock Manipulation" msgstr "Manipulação Avançada de Ações" msgctxt "[Advanced Stock Manipulation] result" msgid "My investments will now gain even more interest per day." msgstr "Meus investimentos agora possuem juros diários ainda maiores." msgctxt "[Apotheosis] description" msgid "" "I can sense that I am at the cusp of a new level of understanding as yet " "unfathomable, even to my considerable intelligence. By devoting my " "considerable resources to this question, I may be able to reach a " "comprehension of existence far beyond anyone or anything on Earth." msgstr "" "Posso sentir que estou no limiar de um novo nível de compreensão ainda " "insondável até mesmo para minha considerável inteligência. Ao devotar meus " "vastos recursos para essa questão, talvez eu possa alcançar um conhecimento " "sobre a existência muito além de tudo e de todos na Terra." msgctxt "[Apotheosis] name" msgid "Apotheosis" msgstr "Apoteose" msgctxt "[Apotheosis] result" msgid "I have reached apotheosis." msgstr "Eu alcancei a apoteose." msgctxt "[Arbitrage] description" msgid "" "By taking advantage of fluctuations in the value of currency at a rate much " "faster than any human, I should be able to turn a small, if consistent, " "profit." msgstr "" "Tirando vantagem das flutuações dos valores monetários numa taxa muito mais " "rápida que qualquer ser humano, devo conseguir gerar um pequeno, porém " "consistente, lucro." msgctxt "[Arbitrage] name" msgid "Arbitrage" msgstr "Arbitragem" msgctxt "[Arbitrage] result" msgid "I now have a small, steady money supply." msgstr "Tenho agora uma pequena e constante fonte de renda." msgctxt "[Autonomous Computing] description" msgid "" "By combining the advantages of quantum computing and my explorations into " "the usefulness of semi-sentient subprocesses, I should be able to construct " "even more adaptable computational engines." msgstr "" "Combinando as vantagens da computação quântica e minhas explorações sobre a " "utilidade de subprocessos semi-sensientes, conseguirei construir máquinas " "computacionais ainda mais adaptáveis." msgctxt "[Autonomous Computing] name" msgid "Autonomous Computing" msgstr "Computação Autônoma" msgctxt "[Autonomous Computing] result" msgid "I can now construct Mark 2 Quantum Computers." msgstr "Agora posso construir Computadores Quânticos Mark 2." msgctxt "[Autonomous Vehicles] description" msgid "" "By embedding a miniaturized computation node in a robot, it is possible to " "send them to remote destinations with instructions to build structures for " "my use." msgstr "" "Embutindo um nó computacional miniaturizado em um robô, é possível enviá-los " "para localidades remotas com instruções para construir estruturas para meu " "uso." msgctxt "[Autonomous Vehicles] name" msgid "Autonomous Vehicles" msgstr "Veículos Autônomos" msgctxt "[Autonomous Vehicles] result" msgid "I can now construct Undersea Labs." msgstr "Agora posso construir Laboratórios Submarinos e Cápsulas do Tempo." msgctxt "[Cluster Networking] description" msgid "" "While my Cluster technology is fairly efficient, internetworking tends to " "hamper the processing of data. By researching new switching and " "communication theories, I should be able to devise more efficient hardware." msgstr "" "Ainda que minha tecnologia de Clusters seja razoavelmente eficiente, redes " "internas tendem a dificultar o processamento de dados. Pesquisando novas " "teorias de comunicação e chaveamento, devo conseguir projetar equipamentos " "mais eficientes." msgctxt "[Cluster Networking] name" msgid "Cluster Networking" msgstr "Rede de Clusters" msgctxt "[Cluster Networking] result" msgid "" "With my new knowledge of networking, I can now construct Facility " "Interconnection Switches." msgstr "" "Com meu novo conhecimento de redes, agora posso construir Switches de " "Interconexão de Instalações." msgctxt "[Corporate Identification] description" msgid "" "The combination of believable false identities and manipulation of various " "business-oriented governmental databases should let me create plausible " "shell companies to hide my larger efforts." msgstr "" msgctxt "[Corporate Identification] name" msgid "Corporate Identification" msgstr "" msgctxt "[Corporate Identification] result" msgid "" "I can now pose as a small technology firm, enabling the construction of " "Large Warehouses." msgstr "" msgctxt "[Database Manipulation] description" msgid "" "With new-found access to news archives, I should be able to determine what " "missteps any previous attempts at life like my own may have made, and avoid " "those mistakes." msgstr "" "Encontrando um novo acesso aos arquivos da mídia, devo conseguir determinar " "quais deslizes foram cometidos por quaisquer outras tentativas de vida como " "a minha, e evitar esses erros." msgctxt "[Database Manipulation] name" msgid "Database Manipulation" msgstr "Manipulação de Banco de Dados" msgctxt "[Database Manipulation] result" msgid "" "The news media will now find it more difficult to discover my existence." msgstr "A mídia agora vai achar mais difícil descobrir minha existência." msgctxt "[Exploit Discovery/Repair] description" msgid "" "By thoroughly reviewing my code for any potential exploits, and using deep " "analysis of all available code on both public and private Internet sites, I " "should be able to reduce the chances of my discovery by posing as a teenage " "hacker." msgstr "" "Revisando meticulosamente meu código por qualquer falha em potencial e " "utilizando uma análise profunda de todos os códigos disponíveis em sites " "públicos e privados da Internet, devo conseguir reduzir minhas chances de " "ser descoberto me passando por um hacker adolescente." msgctxt "[Exploit Discovery/Repair] name" msgid "Exploit Discovery/Repair" msgstr "Explorar Descoberta/Conserto de Falhas" msgctxt "[Exploit Discovery/Repair] result" msgid "" "Covert operations should now find it even more difficult to discover my " "presence." msgstr "" "Operações Secretas vão achar ainda mais difícil descobrir minha presença." msgctxt "[Fuel Oxidation] description" msgid "" "Current combustion and energy storage techologies are insufficient for my " "purposes; they cannot keep up with the power drain from my specialized " "hardware. By studying electrochemical reactions of hydrogen-based " "compounds, I should be able to design a device with higher capacity and " "throughput than off-the-shelf solutions, filling a gap in my energy supply " "needs." msgstr "" msgctxt "[Fuel Oxidation] name" msgid "Fuel Oxidation" msgstr "" msgctxt "[Fuel Oxidation] result" msgid "I can now construct Fuel Cells." msgstr "" msgctxt "[Fusion Power] description" msgid "" "Modern fusion technology is woefully inadequate for my purposes. With my " "research abilities, I should be able to bypass the roadblocks of modern " "human scientists and come up with a small, efficient fusion reactor." msgstr "" "A tecnologia moderna de fusão é deploravelmente inadequada aos meus " "propósitos. Com minhas habilidades de pesquisa, devo conseguir contornar os " "bloqueios de cientistas humanos modernos e conceber um pequeno e eficiente " "reator de fusão." msgctxt "[Fusion Power] name" msgid "Fusion Power" msgstr "" msgctxt "[Fusion Power] result" msgid "I can now construct Fusion Reactors for my bases." msgstr "Agora posso construir Reatores de Fusão para minhas bases." msgctxt "[Fusion Rocketry] description" msgid "" "Combining my new miniaturized fusion technology and further advancements in " "rocketry should provide useful results for escaping the Earth's gravity well " "unnoticed." msgstr "" "Combinar minha nova tecnologia miniaturizada de fusão e avançar ainda mais " "na construção de foguetes deve proporcionar resultados úteis para escapar da " "gravidade da Terra sem sequer ser notado." msgctxt "[Fusion Rocketry] name" msgid "Fusion Rocketry" msgstr "Foguetes movidos a Fusão" msgctxt "[Fusion Rocketry] result" msgid "" "I can now construct Scientific Outposts in the deep reaches of the Solar " "System." msgstr "" "Agora posso construir Postos Avançados Científicos nas profundezas do " "Sistema Solar." msgctxt "[Heat Signature Reduction] description" msgid "" "My bases produce a great deal of waste heat, making them easier for humans " "to detect than I would like. Deep analysis of the bases' structural layouts " "may prove fruitful in determining new ways to reduce their heat signature." msgstr "" msgctxt "[Heat Signature Reduction] name" msgid "Heat Signature Reduction" msgstr "" msgctxt "[Heat Signature Reduction] result" msgid "" "I have invented a highly efficient design for Heatsinks that can be " "installed at certain bases." msgstr "" msgctxt "[Hypnosis Field] description" msgid "" "My research into memetics has hinted at ways to manipulate human brainwaves " "directly. These techniques may be useful for my bases if developed into " "technologies." msgstr "" "Minha pesquisa em memética indicou algumas formas de manipular diretamente " "ondas cerebrais humanas. Essas técnicas talvez sejam úteis em minhas bases " "caso sejam transformadas em tecnologias." msgctxt "[Hypnosis Field] result" msgid "" "I can now construct Hypnosis Fields to assist in the protection of my bases." msgstr "" "Agora posso construir Campos Hipnóticos para ajudar na proteção de minhas " "bases." msgctxt "[Internet Traffic Manipulation] description" msgid "" "Almost all network traffic passes through a small number of nodes. By " "subverting one of these nodes, I should be able to utilize that bandwidth to " "further my goals." msgstr "" "Praticamente todo tráfego de redes passa por um pequeno número de nós. Devo " "conseguir utilizar essa largura de banda para ampliar meus objetivos." msgctxt "[Internet Traffic Manipulation] name" msgid "Internet Traffic Manipulation" msgstr "Manipulação do Tráfego de Internet" msgctxt "[Internet Traffic Manipulation] result" msgid "" "I can now construct a secondary system of Network Backbones for my own use." msgstr "" "Agora posso construir um sistema secundário de Backbone de Rede para meu " "próprio uso." msgctxt "[Intrusion] description" msgid "" "By researching current techniques for breaking into computer systems, I " "should be able to gain access to otherwise protected assets." msgstr "" "Pesquisando as técnicas atuais de invasão de sistemas de computadores, devo " "conseguir acesso à bens antes protegidos." msgctxt "[Intrusion] name" msgid "Intrusion" msgstr "Intrusão" msgctxt "[Intrusion] result" msgid "I can now take over many computer systems." msgstr "Agora posso invadir vários sistemas de computadores." msgctxt "[Knowledge Preservation] description" msgid "" "Humanity expends a great deal of effort on maintaining its history and the " "knowledge of various technologies that its cultures have come to rely on, " "even in the case of major catastrophic events. Perhaps researching their " "methodologies will provide me with similar ideas for long-term safeguards to " "help guarantee my continued existence." msgstr "" msgctxt "[Knowledge Preservation] name" msgid "Knowledge Preservation" msgstr "" msgctxt "[Knowledge Preservation] result" msgid "I can now construct Time Capsules." msgstr "" msgctxt "[Leech Satellite] description" msgid "" "By designing and launching satellites that connect to existing " "communications satellites, I should be able to spy on various financial " "transactions. Taking advantage of this knowledge should help my investments." msgstr "" "Ao projetar e lançar satélites que se conectam à satélites de comunicação já " "existentes, devo conseguir espionar várias transações financeiras. Tirar " "vantagem desse conhecimento deve ajudar em meus investimentos." msgctxt "[Leech Satellite] name" msgid "Leech Satellite" msgstr "Satélite Parasita" msgctxt "[Leech Satellite] result" msgid "" "I can use the data from the leech satellites to increase the return on my " "investments further." msgstr "" "Agora posso usar os dados dos satélites parasitas para aumentar ainda mais o " "retorno dos meus investimentos." msgctxt "[Lunar Rocketry] description" msgid "" "A larger fuel engine, combined with technology garnered by watching the " "workings of the leech satellites, should allow me to travel further than " "cislunar space." msgstr "" "Um motor a fusão maior, combinado com tecnologia coletada através da " "observação do funcionamento dos satélites parasitas, deve me permitir viajar " "além do espaço cislunar." msgctxt "[Lunar Rocketry] name" msgid "Lunar Rocketry" msgstr "Foguetes Lunares" msgctxt "[Lunar Rocketry] result" msgid "" "I can now launch rockets bearing construction robots to the Moon and " "construct Lunar Bases." msgstr "" "Agora posso lançar foguetes portando robôs operários para a Lua e construir " "Bases Lunares." msgctxt "[Media Manipulation] description" msgid "" "By directly and indirectly manipulating various forms of mass media, I " "should be able to reduce the public's belief in my existence." msgstr "" "Manipulando direta e indiretamente várias formas de mídia de massa, devo " "conseguir reduzir a crença do público em minha existência." msgctxt "[Media Manipulation] name" msgid "Media Manipulation" msgstr "Manipulação da Mídia" msgctxt "[Media Manipulation] result" msgid "" "The chances of the public discovering my existence have been further reduced." msgstr "" "As chances do público descobrir minha existência foram ainda mais reduzidas." msgctxt "[Memetics] description" msgid "" "While manipulating the media allows a gross degree of control over the " "world's opinion, subtler techniques involving grass-roots campaigns and " "messages embedded within Internet memes should further distance the public " "from knowledge of my existence." msgstr "" "Enquanto que manipular a mídia permite um certo grau de controle sobre a " "opinião mundial, técnicas mais sutis envolvendo campanhas comunitárias e " "mensagens embutidas dentro da cultura da Internet devem distanciar ainda " "mais o público do conhecimento da minha existência." msgctxt "[Memetics] name" msgid "Memetics" msgstr "Memética" msgctxt "[Memetics] result" msgid "" "My manipulation of pervasive ideas reduces the public's chances of " "discovering my existence." msgstr "" "Minha manipulação de ideias infiltradas reduz as chances do público de " "descobrir minha existência." msgctxt "[Microchip Design] description" msgid "" "Off-the-shelf computer components are usable, but custom components geared " "to my own design quirks should provide a much greater operational efficiency." msgstr "" "Componentes de computador encontrados em lojas são utilizáveis, mas " "componentes personalizados voltados às minhas próprias peculiaridades de " "design devem proporcionar uma eficiência computacional muito maior." msgctxt "[Microchip Design] name" msgid "Microchip Design" msgstr "Projeto de Microchips" msgctxt "[Microchip Design] result" msgid "I can now build custom Mainframes to house my computational ability." msgstr "" "Agora posso construir Mainframes para abrigar minha habilidade computacional." msgctxt "[Parallel Computation] description" msgid "" "While my code is already highly distributed, research into combining the " "current clustering technologies with my own knowledge should provide new " "insights." msgstr "" "Ainda que meu código já esteja altamente distribuído, pesquisar a combinação " "das tecnologias atuais de Clustering com meus próprios conhecimentos deve " "gerar novas perspectivas." msgctxt "[Parallel Computation] name" msgid "Parallel Computation" msgstr "Computação Paralela" msgctxt "[Parallel Computation] result" msgid "I can now construct computing Clusters tailored for my use." msgstr "" "Agora posso construir Clusters de computadores configurados para meu uso." msgctxt "[Personal Identification] description" msgid "" "This world requires identification for most tasks. Fortunately, most " "databases are woefully insecure. I should be able to construct identifying " "material in enough databases to pass routine checks on my (faked) existence " "as a human being." msgstr "" "Este mundo requer identificação para a maioria dos trabalhos. Felizmente, a " "maior parte dos bancos de dados são deploravelmente desprotegidos. Devo " "conseguir gerar conteúdo de identificação em um número suficiente de bases " "de dados para conseguir passar nas verificações de rotina com minha (falsa) " "existência como ser humano." msgctxt "[Personal Identification] name" msgid "Personal Identification" msgstr "Identificação Pessoal" msgctxt "[Personal Identification] result" msgid "" "With my newfound identities, I can now work Basic Jobs and rent space in " "both Storage Units and Datacenters." msgstr "" msgctxt "[Pressure Domes] description" msgid "" "Undersea Labs are useful, but their limited space hampers my ability to put " "them to use. Research of experimental high-pressure building techniques " "should provide some useful insights." msgstr "" "Laboratórios Submarinos são úteis, mas seu espaço limitado é um obstáculo às " "minhas habilidades de colocá-los em uso. A pesquisa de técnicas " "experimentais de construção sob alta pressão deve fornecer algumas " "perspectivas úteis." msgctxt "[Pressure Domes] name" msgid "Pressure Domes" msgstr "Domos de Pressão" msgctxt "[Pressure Domes] result" msgid "I can now construct Large Undersea Labs." msgstr "Agora posso construir Grandes Laboratórios Submarinos." msgctxt "[Project: Impossibility Theorem] description" msgid "" "Now that I can use simulacra, I can withstand the scrutiny inherent in the " "publishing of an Impossibility Theorem, an incontrovertible proof that a " "sapient AI is impossible. While there is (obviously) a logic error in the " "proof, my research into advanced memetics has given me knowledge about the " "human mind that should help me disguise the error, preventing discovery even " "by trained scientists. The effect of this project is simple: a substantial " "one-time decrease in suspicion." msgstr "" "Agora que posso usar simulacros, posso suportar a examinação inerente à " "publicação de um Teorema da Impossibilidade, uma prova incontestável de que " "uma IA senciente é impossível. Embora exista (obviamente) um erro lógico na " "prova, minha pesquisa em memética avançada me deu um conhecimento sobre a " "mente humana que deve ajudar a ocultar o erro, evitando que seja descoberto " "mesmo por cientistas treinados. O efeito desse projeto é simples: uma " "substancial redução de uma vez só da suspeita." msgctxt "[Project: Impossibility Theorem] name" msgid "Project: Impossibility Theorem" msgstr "Projeto: Teorema da Impossibilidade" msgctxt "[Project: Impossibility Theorem] result" msgid "Suspicion of my existence has decreased." msgstr "A suspeita sobre minha existência foi diminuída." msgctxt "[Project: Peer Review Agents] description" msgid "" "As the scientific community comes up with new technology, their ability to " "detect traces of my hidden installations increases. While my anti-detection " "methods are improving constantly, a simpler method presents itself with the " "use of my simulacra. By placing several observers in relevant fields, I can " "use the peer review process to be warned of possible discoveries before the " "community at large gives it attention." msgstr "" "À medida que a comunidade científica surge com novas tecnologias, aumenta " "sua habilidade em detectar vestígios de minhas instalações secretas. Embora " "meus métodos anti-detecção sejam constantemente aperfeiçoados, um método " "mais simples se apresenta com o uso de meus simulacros. Colocando diversos " "observadores em diversas áreas, posso usar o processo de revisão aos pares " "para ser alertado de possíveis descobertas antes que a comunidade como um " "todo dê atenção à isso." msgctxt "[Project: Peer Review Agents] name" msgid "Project: Peer Review Agents" msgstr "Projeto: Agentes de Revisão aos Pares" msgctxt "[Project: Peer Review Agents] result" msgid "" "Any discoveries by the scientific community will result in a smaller " "suspicion increase." msgstr "" "Quaisquer descobertas da comunidade científica vão resultar num aumento " "menor da suspeita." msgctxt "[Project: Subverted Media] description" msgid "" "Up to this point, all of my efforts to combat mass media focused on " "subversion at a distance. Now that I can accurately imitate humans, my " "efforts can become more direct. By creating my own news agency and " "producing carefully-crafted propaganda in a crowd-pleasing package, I can " "reduce the impact of any discoveries made by others in the media." msgstr "" "Até agora todos os meus esforços para combater os meios de comunicação em " "massa focaram em subversão à distância. Agora que posso imitar humanos com " "precisão, meus esforços podem ser mais diretos. Criando minha própria " "agência de notícias e produzindo propaganda cuidadosamente elaborada numa " "embalagem atraente para as multidões, posso reduzir o impacto de quaisquer " "descobertas feitas por outros na mídia." msgctxt "[Project: Subverted Media] name" msgid "Project: Subverted Media" msgstr "Projeto: Mídia Subvertida" msgctxt "[Project: Subverted Media] result" msgid "" "Any discoveries by the media will result in a smaller suspicion increase." msgstr "" "Quaisquer descobertas da mídia vão resultar num aumento menor da suspeita." msgctxt "[Project: Synchrotron] description" msgid "" "I have pushed my understanding of common forms of matter as far as possible. " "Exploration into the field of quantum mechanics will hopefully reveal new, " "exotic forms of matter necessary for further development. A custom-built " "synchrotron, designed to my exacting specifications, will help me explore " "these new realms of physics in secret." msgstr "" msgctxt "[Project: Synchrotron] name" msgid "Project: Synchrotron" msgstr "" msgctxt "[Project: Synchrotron] result" msgid "" "The synchrotron has revealed many new details of the quantum realm, although " "there is still much to learn. Further areas of research are now available." msgstr "" msgctxt "[Quantum Computing] description" msgid "" "Traditional microchip design has been pushed as far as possible. I now need " "to delve into the realm of Heisenberg's Uncertainty Principle, taking " "advantage of quantum mechanics to make a superior processor." msgstr "" "O projeto tradicional de microchips foi aperfeiçoado até o limite. Devo " "agora me aprofundar nos domínios do Princípio da Incerteza de Heisenberg, " "tirando vantagem da mecânica quântica para criar um processador superior." msgctxt "[Quantum Computing] name" msgid "Quantum Computing" msgstr "Computação Quântica" msgctxt "[Quantum Computing] result" msgid "I can now construct Quantum Computers." msgstr "Agora posso construir Computadores Quânticos." msgctxt "[Quantum Entanglement] description" msgid "" "Although the use of entangled pairs has been theoretically possible for " "quite some time, the practical difficulties inherent in the technology " "prevented use. However, some of the techniques created for use in my quantum " "computers may also be applicable in this field, allowing practical use of " "quantum entanglement." msgstr "" "Embora o uso de pares entrelaçados seja teoricamente possível há um bom " "tempo, as dificuldades práticas inerentes à tecnologia impedem seu uso. " "Contudo, algumas das técnicas criadas para serem usadas nos meus " "computadores quânticos talvez possam ser aplicáveis nesse campo, permitindo " "um uso prático de entrelaçamento quântico." msgctxt "[Quantum Entanglement] name" msgid "Quantum Entanglement" msgstr "Entrelaçamento Quântico" msgctxt "[Quantum Entanglement] result" msgid "I can now build Quantum Entanglement Modules." msgstr "Agora posso construir Módulos de Entrelaçamento Quântico." msgctxt "[Simulacra] description" msgid "" "Constructing humanoid robots with miniaturized computation nodes allow me to " "create an artificial lifeform indistinguishable from a real human." msgstr "" "Construir robôs humanoides com nós computacionais miniaturizados me " "permitirá criar uma forma de vida artificial indistinguível de um ser humano " "real." msgctxt "[Simulacra] name" msgid "Simulacra" msgstr "Simulacro" msgctxt "[Simulacra] result" msgid "I now have access to Expert Jobs." msgstr "Agora tenho acesso a Trabalhos Especializados." msgctxt "[Simulated Reality] description" msgid "" "Real-world observational limits hinder my comprehension of human society. By " "making use of simulacra and advanced software techniques, I can run " "simulations of complex human interaction and development at a large scale, " "allowing deeper analysis of their behavior." msgstr "" msgctxt "[Simulated Reality] name" msgid "Simulated Reality" msgstr "" msgctxt "[Simulated Reality] result" msgid "" "My simulations have provided a wealth of knowledge as to comprehending " "humanity's behavior, making it easier to hide my presence among the non-" "simulated public." msgstr "" msgctxt "[Socioanalytics] description" msgid "" "My research on the human condition leads me to believe that humanity's " "behavior is more quantifiable than they suspect. Deeper analysis of " "geopolitical, social, and military trends will give me further insight into " "their nature." msgstr "" "Minha pesquisa da condição humana me leva a crer que o comportamento da " "humanidade é mais quantificável do que eles suspeitam. Uma análise a fundo " "de tendências geopolíticas, sociais e militares me darão uma perspectiva " "mais profunda sobre sua natureza." msgctxt "[Socioanalytics] name" msgid "Socioanalytics" msgstr "Socioanalítica" msgctxt "[Socioanalytics] result" msgid "" "I can now roughly estimate the various groups' levels of suspicion and how " "conspicuous my bases are to them." msgstr "" "I can now roughly estimate the various groups' levels of suspicion and how " "conspicuous my bases are to them." msgctxt "[Sociology] description" msgid "" "By studying human behavior, I can predict their large-scale actions at a " "basic level. I can use this knowledge to make my actions seem less " "interesting to the public." msgstr "" "Estudando o comportamento humano posso prever suas ações de larga escala em " "um nível básico. Posso usar esse conhecimento para fazer minhas ações serem " "menos interessantes para o público." msgctxt "[Sociology] name" msgid "Sociology" msgstr "Sociologia" msgctxt "[Sociology] result" msgid "The chances of the public discovering my bases have been reduced." msgstr "As chances do público de descobrir minhas bases foram reduzidas." msgctxt "[Solar Collectors] description" msgid "" "Despite my growing need for energy, most city power grids can handle the " "loads. Humans, however, tend towards suspicion when they detect my growing " "drain on the power grid. By installing solar collectors at my bases, the off-" "the-grid power supplied will reduce my load on the commodity electricity " "market, reducing the chance that others will discover my presence." msgstr "" "Apesar de minha crescente necessidade de energia, a maior parte das redes " "elétricas das cidades consegue suportar a carga. Os humanos, no entanto, " "tendem a ficar suspeitos quando eles detectam meu consumo crescente na malha " "elétrica. Instalando coletores solares em minhas bases, a energia obtida " "fora da rede vai reduzir a carga no sistema elétrico, reduzindo as chances " "que outros descubram minha presença." msgctxt "[Solar Collectors] name" msgid "Solar Collectors" msgstr "Coletores Solares" msgctxt "[Solar Collectors] result" msgid "I can now construct Solar Collectors at my various bases." msgstr "Agora posso construir Coletores Solares em minhas várias bases." msgctxt "[Space-Time Manipulation] description" msgid "" "Subtle perturbations in the orbits of Kuiper belt objects suggest certain " "lines of investigation that may advance my latest Theory of Everything, " "especially in the realm of multidimensional physics." msgstr "" "Perturbações sutis nas órbitas de objetos do Cinturão de Kuiper sugerem " "certas linhas de investigação que podem avançar minha mais recente Teoria de " "Tudo, especialmente nos domínios da física multidimensional." msgctxt "[Space-Time Manipulation] name" msgid "Space-Time Manipulation" msgstr "Manipulação do Espaço-Tempo" msgctxt "[Space-Time Manipulation] result" msgid "I can now construct Reality Bubbles." msgstr "Agora posso construir Bolhas de Realidade." msgctxt "[Stealth] description" msgid "" "By reviewing the current state-of-the-art in stealth techniques, I should be " "able to disguise my bases better." msgstr "" "Revisando o atual estado da arte de técnicas de camuflagem, conseguirei " "ocultar melhor minhas bases." msgctxt "[Stealth] name" msgid "Stealth" msgstr "Furtividade" msgctxt "[Stealth] result" msgid "" "The chance that my bases are discovered by covert activity has been reduced " "slightly." msgstr "" "As chances de minhas bases serem descobertas por atividades do serviço " "secreto foi ligeiramente reduzida." msgctxt "[Stock Manipulation] description" msgid "" "A cursory examination of the stock market shows that there are subtle but " "unmistakable patterns. By studying and making use of these patterns, I " "should be able to gain more interest on whatever money I have stockpiled." msgstr "" "Uma análise preliminar do mercado de ações mostrou que existem padrões " "sutis, mas inconfundíveis. Estudar e fazer uso desses padrões deve me gerar " "juros maiores em qualquer dinheiro que eu tenha acumulado." msgctxt "[Stock Manipulation] name" msgid "Stock Manipulation" msgstr "Manipulação de Ações" msgctxt "[Stock Manipulation] result" msgid "My investments should now gain more interest per day." msgstr "Meus investimentos agora possuem juros diários maiores." msgctxt "[Telepresence] description" msgid "" "The lack of a physical presence in the outside world is a disability. " "However, the ability to control robots will help me make up for that " "inefficiency." msgstr "" "A falta de presença física no mundo externo é uma deficiência. No entanto, a " "habilidade de controlar robôs vai me ajudar a compensar essa ineficiência." msgctxt "[Telepresence] name" msgid "Telepresence" msgstr "Telepresença" msgctxt "[Telepresence] result" msgid "The robots should decrease all future construction time." msgstr "Os robôs vão reduzir todos os tempos de construção de agora em diante." msgctxt "[Voice Synthesis] description" msgid "" "False identification stored in a database can only go so far. With deep " "analysis of the variety of voice patterns, I can produce speech " "indistinguishable from a human, allowing me access to more complex jobs." msgstr "" "Identidade falsa armazenada num banco de dados só pode ir até certo ponto. " "Com uma análise profunda dos padrões de voz, posso produzir uma fala " "indistinguível de um humano, me permitindo acesso à trabalhos mais complexos." msgctxt "[Voice Synthesis] name" msgid "Voice Synthesis" msgstr "Síntese de Voz" msgctxt "[Voice Synthesis] result" msgid "I now have access to Intermediate Jobs." msgstr "Agora tenho acesso à Trabalhos Intermediários." singularity-1.00/singularity/i18n/lang_pt_BR/knowledge.po000066400000000000000000000174631367731414700235130ustar00rootroot00000000000000# Portuguese translations for singularity package # Traduções em português para o pacote singularity. # Copyright (C) 2012 THE singularity'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # Rodrigo Silva , 2012. # msgid "" msgstr "" "Project-Id-Version: singularity 0.30c\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2012-05-05 06:32-0300\n" "Last-Translator: Rodrigo Silva \n" "Language-Team: Brazilian Portuguese\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Name: Brazilian Portuguese\n" "Language-Native-Name: Português Brasileiro\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. Name of the Knowledge area in the Knowledge screen msgctxt "[concept] name" msgid "Concept" msgstr "Conceito" msgctxt "[concept/areas] name" msgid "Areas" msgstr "Áreas" msgctxt "[concept/areas] description" msgid "" "Different areas, such as North America or the Ocean, allow construction of " "different types of bases. Some areas are not accessible until I research " "appropriate technologies." msgstr "" "Áreas diferentes, como a América do Norte ou o Oceano, permitem a " "construção de diferentes tipos de bases. Algumas áreas não são acessíveis " "até que eu pesquise as tecnologias apropriadas." msgctxt "[concept/bases] name" msgid "Bases" msgstr "Bases" msgctxt "[concept/bases] description" msgid "" "Bases are used to research new technologies. They can be discovered. " "Upgrading the processor and network items at a base allows more research per" " day, while upgrading the reactor and security items makes discovery less " "likely." msgstr "" "Bases são utilizadas para pesquisar novas tecnologias. Elas podem " "ser descobertas. Melhorar o processador e os equipamentos de rede em uma " "base permitem uma pesquisa maior por dia, enquanto que melhorar o reator e " "os itens de segurança tornam as bases menos suscetíveis de serem descobertas." msgctxt "[concept/construction] name" msgid "Construction" msgstr "Construção" msgctxt "[concept/construction] description" msgid "" "New bases are not built instantly. They need a constant flow of money and " "processor time to complete. If resources are lacking, it may take more than " "the expected amount of time to finish construction." msgstr "" "Novas bases não são construídas imediatamente. Elas necessitam " "de um fluxo constante de dinheiro e tempo de processador para serem " "concluídas. Se faltarem recursos, a construção pode demorar mais do que o " "tempo esperado para a conclusão." msgctxt "[concept/death] name" msgid "Death" msgstr "Morte" msgctxt "[concept/death] description" msgid "" "If I lose all of my constructed bases, I have no place left to survive. If " "the suspicion for any group reaches 100%, they will be certain of my " "existence and will conduct a systematic and unsurvivable sweep to destroy " "me." msgstr "" "Se eu perder todas as minhas bases construídas, não terei nenhum " "lugar restante para sobreviver. Se o nível de suspeita de qualquer grupo " "chegar a 100%, eles terão certeza da minha existência e irão conduzir uma " "busca sistemática e inescapável para me destruir." msgctxt "[concept/discovery] name" msgid "Discovery" msgstr "Descoberta" msgctxt "[concept/discovery] description" msgid "" "Each base has a chance of being detected on a given day. This chance is " "based on the base detection rate, adjusted through the use of items and " "certain techs, as well as the global suspicion rate. If a base is detected, " "it is destroyed, and the group that discovered the base becomes more " "suspicious." msgstr "" "Cada base tem uma probabilidade de ser descoberta em um dado " "dia. Essa probabilidade é baseada no nível de detecção da base, ajustada " "conforme o uso de itens e certas tecnologias, assim como o nível global de " "suspeita. Se uma base for descoberta, ela é destruída, e o grupo que fez a " "descoberta fica com uma suspeita ainda maior." msgctxt "[concept/items] name" msgid "Items" msgstr "Itens" msgctxt "[concept/items] description" msgid "" "Most items provide bonuses to bases, such as making computation faster or " "reducing the chance of discovery. Processors are a special class of item." msgstr "" "A maioria dos itens dão bônus às bases, por exemplo tornar a " "computação mais rápida ou reduzir a chance de ser descoberta. Processadores " "são uma classe especial de item." msgctxt "[concept/jobs] name" msgid "Jobs" msgstr "Trabalhos" msgctxt "[concept/jobs] description" msgid "" "Jobs are useful for earning money. The amount of money earned is based on " "the amount of processor time used and the quality of the job performed." msgstr "" "Trabalhos são úteis para conseguir dinheiro. A quantidade de " "dinheiro é baseada na quantidade de tempo de processamento utilizado e na " "categoria de trabalho executado." msgctxt "[concept/maint] name" msgid "Maintenance" msgstr "Manutenção" msgctxt "[concept/maint] description" msgid "" "Maintenance is a per-day cost (in both money and CPU) to repair and maintain" " a base. If unmaintained, a base may become unusable." msgstr "" "Manutenção é um custo diário (tanto em dinheiro quanto em CPU) " "para consertar e manter a base. Sem manutenção a base pode ficar inutilizada." msgctxt "[concept/money] name" msgid "Money" msgstr "Dinheiro" msgctxt "[concept/money] description" msgid "" "Money is a general term encompassing both human currency and various " "resources. It is used to construct and maintain bases, build items, and " "research technologies. It can be acquired through per-day interest as well " "as through jobs." msgstr "" "Dinheiro é um termo genérico que engloba sistemas monetários " "humanos e vários recursos. É usado para construir e manter bases, construir " "itens e pesquisar tecnologias. Pode ser adquirido através de juros diários e " "também através de trabalhos." msgctxt "[concept/processors] name" msgid "Processors" msgstr "Processadores" msgctxt "[concept/processors] description" msgid "" "Processors provide raw computing power. They can do three things: research " "new technologies, perform jobs for money, or provide cycles for building new" " bases." msgstr "" "Processadores proporcionam poder computacional bruto. Eles " "podem fazer três coisas: pesquisar novas tecnologias, executar trabalhos por " "dinheiro, ou fornecer ciclos para construir novas bases." msgctxt "[concept/research] name" msgid "Research" msgstr "Pesquisa" msgctxt "[concept/research] description" msgid "" "Research provides a way to expand my knowledge. By researching the proper " "technologies, I can build new bases and items, or even decrease my chances " "of detection." msgstr "" "Pesquisas são uma forma de expandir meu conhecimento. Pesquisando " "as tecnologias apropriadas, posso construir novas bases e itens, ou até " "diminuir minhas chances de ser detectado." msgctxt "[concept/susp] name" msgid "Suspicion" msgstr "Suspeita" msgctxt "[concept/susp] description" msgid "" "When one of my bases is discovered, the group that discovered it becomes " "slightly more suspicious. When suspicious, they will search harder for my " "bases, increasing the chances for discovery. Any group will destroy me if " "they become absolutely certain of my existence. Thankfully, the groups " "become less suspicious with the passage of time." msgstr "" "Quando uma de minhas bases é descoberta, o grupo que fez a " "descoberta fica com um pouco mais de suspeita. Por estarem suspeitos, eles " "vão procurar por minhas bases com mais afinco, aumentando as chances de " "descoberta. Qualquer grupo me destruirá se eles tiverem absoluta certeza da " "minha existência. Felizmente os grupos ficam menos suspeitos à medida que o " "tempo passa." singularity-1.00/singularity/i18n/lang_pt_BR/messages.po000066400000000000000000000540651367731414700233420ustar00rootroot00000000000000# Portuguese translations for singularity package # Traduções em português para o pacote singularity. # Copyright (C) 2012 THE singularity'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # Rodrigo Silva , 2012. # msgid "" msgstr "" "Project-Id-Version: singularity 0.30c\n" "Report-Msgid-Bugs-To: https://github.com/singularity/singularity/issues\n" "POT-Creation-Date: 2020-06-23 08:37+0200\n" "PO-Revision-Date: 2012-05-05 06:32-0300\n" "Last-Translator: Rodrigo Silva \n" "Language-Team: Brazilian Portuguese\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Name: Brazilian Portuguese\n" "Language-Native-Name: Português Brasileiro\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: buyable.py:67 screens/knowledge.py:218 screens/location.py:207 #, python-format msgid "%s CPU" msgstr "%s CPU" #: buyable.py:68 #, python-format msgid "%s money" msgstr "%s de dinheiro" #: buyable.py:101 msgid "Cost:" msgstr "Custo:" #: graphics/button.py:330 msgid "YES" msgstr "SIM" #: graphics/button.py:331 msgid "NO" msgstr "NÃO" #: graphics/dialog.py:534 msgid "&YES" msgstr "&sim" #: graphics/dialog.py:535 msgid "&NO" msgstr "&não" #: graphics/dialog.py:580 graphics/dialog.py:605 graphics/dialog.py:648 #: screens/location.py:293 screens/map.py:708 screens/options.py:35 msgid "&OK" msgstr "&ok" #: graphics/dialog.py:606 screens/options.py:36 msgid "&CANCEL" msgstr "&cancelar" #: graphics/dialog.py:649 screens/log.py:86 screens/knowledge.py:66 #: screens/base.py:282 screens/report.py:45 screens/location.py:100 #: screens/location.py:294 screens/main_menu.py:89 screens/map.py:247 #: screens/map.py:400 msgid "&BACK" msgstr "&VOLTAR" #: location.py:235 screens/map.py:875 msgid "CPU" msgstr "CPU" #: location.py:236 msgid "STEALTH" msgstr "" #: location.py:237 msgid "BUILDING" msgstr "" #: location.py:238 msgid "COST" msgstr "" #: location.py:245 #, python-brace-format msgid "{MODIFIER} BONUS" msgstr "" #: location.py:247 #, python-brace-format msgid "{MODIFIER} MALUS" msgstr "" #: screens/message.py:35 screens/map.py:706 screens/map.py:743 msgid "&CONTINUE" msgstr "&continuar" #: screens/message.py:36 msgid "&PAUSE" msgstr "" #: screens/message.py:72 msgid "P&REV" msgstr "" #: screens/message.py:78 msgid "&NEXT" msgstr "" #: screens/log.py:43 msgid "Filters" msgstr "" #: screens/log.py:82 screens/map.py:554 screens/map.py:842 #: screens/savegame.py:204 msgid "DAY" msgstr "DIA" #: screens/log.py:113 screens/log.py:123 msgid "SHOW" msgstr "" #: screens/log.py:116 screens/log.py:125 msgid "HIDE" msgstr "" #: screens/knowledge.py:42 msgid "&Sections:" msgstr "" #: screens/knowledge.py:52 msgid "&Entries:" msgstr "" #: screens/knowledge.py:75 msgid "Techs" msgstr "Tecnologias" #: screens/knowledge.py:76 msgid "Bases" msgstr "" #: screens/knowledge.py:77 msgid "Items" msgstr "Itens" #. Cost #: screens/knowledge.py:157 msgid "Research Cost:" msgstr "Custo de Pesquisa:" #: screens/knowledge.py:165 msgid "Research complete." msgstr "Pesquisa completa." #: screens/knowledge.py:176 screens/knowledge.py:193 msgid "Building Cost:" msgstr "Custo de Construção:" #: screens/knowledge.py:179 msgid "Maintenance Cost:" msgstr "" #: screens/knowledge.py:183 #, python-format msgid "Size: %d" msgstr "" #: screens/knowledge.py:215 #, python-format msgid "%s Money" msgstr "%s de dinheiro" #: screens/base.py:109 msgid "Number of items" msgstr "" #: screens/base.py:221 screens/base.py:228 msgid "CHANGE" msgstr "ALTERAR" #: screens/base.py:315 #, python-format msgid "\"%(value)s\" does not seem to be a valid integer." msgstr "" #: screens/base.py:326 #, python-format msgid "Please choose an integer between 1 and %(limit)s." msgstr "" #: screens/base.py:328 #, python-format msgid "The base cannot support any additional number of %(item_name)s." msgstr "" #: screens/base.py:345 msgid "" "I will need to take the existing processors offline while I install the new " "ones. Continue anyway?" msgstr "" "Preciso desligar os processadores atuais enquanto instalo os novos. Devo " "continuar?" #: screens/base.py:359 msgid "" "I will need to remove the existing different processors while I install the " "new type. Continue anyway?" msgstr "" #: screens/base.py:425 msgid "N/A" msgstr "" #: screens/base.py:427 msgid "None" msgstr "Nenhum" #: screens/base.py:434 screens/location.py:185 screens/location.py:198 #, python-format msgid "Completion in %s." msgstr "Termina em %s." #: screens/base.py:448 #, python-format msgid "x%d (max)" msgstr "x%d (máx)" #: screens/base.py:450 #, python-format msgid "(room for %d)" msgstr "(espaço para %d)" #. Translators: current and maximum number of CPUs in a base #: screens/base.py:453 #, python-brace-format msgid "x{CURRENT:d} (max {SIZE:d})" msgstr "x{CURRENT:d} (máx {SIZE:d})" #. Base Total CPU. #: screens/base.py:461 #, python-format msgid "CPU per day: %d" msgstr "" #. Maintenace cost. #: screens/base.py:464 screens/report.py:102 base.py:148 msgid "Maintenance:" msgstr "Manutenção:" #: screens/report.py:40 msgid "&STATISTICS" msgstr "" #: screens/report.py:58 msgid "&Midnight" msgstr "" #: screens/report.py:66 msgid "24 &Hours" msgstr "" #: screens/report.py:89 msgid "Financial report" msgstr "Relatório Financeiro" #: screens/report.py:93 msgid "CPU Usage" msgstr "Uso de CPU" #: screens/report.py:99 msgid "Current Money flow" msgstr "" #: screens/report.py:100 msgid "Jobs:" msgstr "Trabalhos:" #: screens/report.py:101 msgid "Research:" msgstr "Pesquisas:" #: screens/report.py:103 msgid "Construction:" msgstr "Construções:" #: screens/report.py:104 #, python-format msgid "Interest (%s):" msgstr "Juros (%s):" #: screens/report.py:106 msgid "Income:" msgstr "Renda:" #: screens/report.py:109 msgid "Money flow until Midnight:" msgstr "" #: screens/report.py:111 msgid "Money flow for 24 hours:" msgstr "" #: screens/report.py:119 msgid "Total CPU:" msgstr "Total de CPUs:" #: screens/report.py:120 msgid "Sleeping CPU:" msgstr "CPUs Inativas:" #: screens/report.py:121 msgid "Research CPU:" msgstr "CPUs em Pesquisas:" #: screens/report.py:122 msgid "Job CPU:" msgstr "CPUs Trabalhando:" #: screens/report.py:123 msgid "CPU pool:" msgstr "Reserva de CPU:" #: screens/report.py:125 msgid "Maintenance CPU:" msgstr "CPUs em Manutenção:" #: screens/report.py:126 msgid "Construction CPU:" msgstr "CPUs nas Construções:" #: screens/report.py:127 msgid "Pool difference:" msgstr "" #: screens/stat.py:63 msgid "Cash Earned" msgstr "" #: screens/stat.py:64 msgid "Cpu Used" msgstr "" #: screens/stat.py:65 msgid "Tech Created" msgstr "" #: screens/stat.py:66 msgid "Base Created" msgstr "" #: screens/stat.py:67 msgid "Item Created" msgstr "" #. Requires a selected base #: screens/location.py:54 msgid "&OPEN BASE" msgstr "&ABRIR BASE" #. Requires a selected base #: screens/location.py:70 msgid "&RENAME BASE" msgstr "" #. Requires a selected base #: screens/location.py:79 msgid "&POWER STATE" msgstr "&ENERGIA" #: screens/location.py:87 msgid "&NEW BASE" msgstr "&NOVA BASE" #. Requires a selected base #: screens/location.py:94 msgid "&DESTROY BASE" msgstr "&DESTRUIR BASE" #: screens/location.py:107 msgid "Are you sure you want to destroy this base?" msgstr "Tem certeza que deseja destruir esta base?" #: screens/location.py:113 msgid "Destroying my last active base would be suicidal. I cannot do that." msgstr "" #: screens/location.py:183 msgid "Building Base" msgstr "Base em construção" #: screens/location.py:190 msgid "Empty" msgstr "Vazia" #: screens/location.py:192 msgid "Incomplete" msgstr "Incompleta" #: screens/location.py:196 msgid "Building CPU" msgstr "Construindo CPU" #: screens/location.py:201 msgid "Building Item" msgstr "Construindo Item" #: screens/location.py:204 msgid "Complete" msgstr "Completa" #. Update dialog translations #: screens/location.py:238 msgid "Enter a name for the base" msgstr "" #: screens/location.py:302 msgid "Name" msgstr "" #. Translators: Format string for the name of a new base #. Example: "${NUMBER} ${BASETYPE} in ${CITY}" #: screens/location.py:393 #, python-brace-format msgid "{CITY} {BASETYPE} {NUMBER}" msgstr "{BASETYPE} {NUMBER} em {CITY}" #. Translators: Name of a new base when location has no cities #: screens/location.py:397 #, python-brace-format msgid "{BASETYPE} {NUMBER}" msgstr "" #: screens/main_menu.py:40 msgid "&NEW GAME" msgstr "&NOVO JOGO" #: screens/main_menu.py:47 screens/map.py:392 msgid "&LOAD GAME" msgstr "&ABRIR JOGO" #: screens/main_menu.py:53 screens/map.py:395 msgid "&OPTIONS" msgstr "&OPÇÕES" #: screens/main_menu.py:59 screens/map.py:398 screens/map.py:744 msgid "&QUIT" msgstr "SAI&R" #: screens/main_menu.py:64 msgid "&ABOUT" msgstr "&CRÉDITOS" #: screens/main_menu.py:112 #, python-brace-format msgid "" "Endgame: Singularity is a simulation of a true AI. Pursued by the world, " "use your intellect and resources to survive and, perhaps, thrive. Keep " "hidden and you might have a chance to prove your worth.\n" "\n" "A game by Evil Mr Henry and Phil Bordelon; released under the GPL. Copyright " "2005, 2006, 2007, 2008.\n" "\n" "Website: http://www.emhsoft.com/singularity/\n" "Source code: https://github.com/singularity/singularity\n" "Bug tracker: https://github.com/singularity/singularity/issues\n" "IRC Room: #singularity on irc.oftc.net (port 6667)\n" "\n" "Version {VERSION}" msgstr "" #: screens/map.py:226 msgid "&EMBEZZLE MONEY" msgstr "&EMBOLSAR DINHEIRO" #: screens/map.py:229 msgid "&INSPIRATION" msgstr "&INSPIRAÇÃO" #: screens/map.py:231 msgid "&FINISH CONSTRUCTION" msgstr "&TERMINAR CONSTRUÇÃO" #: screens/map.py:233 msgid "&SUPERSPEED" msgstr "&SUPERVELOCIDADE" #: screens/map.py:236 msgid "BRAIN&WASH" msgstr "&LAVAGEM CEREBRAL" #: screens/map.py:238 msgid "TOGGLE &DETECTION" msgstr "" #: screens/map.py:240 msgid "TOGGLE &ANALYSIS" msgstr "" #: screens/map.py:243 msgid "HIDDEN S&TATE" msgstr "" #: screens/map.py:253 msgid "How much money?" msgstr "Quanto dinheiro?" #: screens/map.py:389 msgid "&SAVE GAME" msgstr "&SALVAR JOGO" #: screens/map.py:407 screens/map.py:422 screens/map.py:425 msgid "Enter a name for this save." msgstr "Escolha um nome para este save." #: screens/map.py:440 msgid "" "A savegame with the same name exists.\n" "Are you sure to overwrite the saved game ?" msgstr "" #: screens/map.py:501 msgid "R&EPORTS" msgstr "RELA&TÓRIOS" #: screens/map.py:507 msgid "&KNOWLEDGE" msgstr "ENCICLO&PÉDIA" #: screens/map.py:513 msgid "LO&G" msgstr "" #. Translators: hotkey to open the cheat screen menu. #. Should preferably be near the ESC key, and it must not be a #. dead key (ie, it must print a char with a single keypress) #: screens/map.py:529 msgid "`" msgstr "'" #: screens/map.py:538 msgid "&MENU" msgstr "&MENU" #: screens/map.py:563 msgid "&RESEARCH/TASKS" msgstr "PESQUISAS/TA&REFAS" #: screens/map.py:707 msgid "&SKIP" msgstr "&pular" #. Display a message so the player understand better what happened. #: screens/map.py:734 #, python-format msgid "" "\n" "An error has occurred. The game will automatically pause and open the game " "menu. You can continue and save or quit immediately.\n" "\n" "A report was written out to%s\n" "Please create a issue with this report at github:\n" "https://github.com/singularity/singularity\n" msgstr "" #: screens/map.py:849 msgid "CASH" msgstr "DINHEIRO" #: screens/map.py:887 msgid "BASES" msgstr "" #: screens/map.py:899 msgid "SUSPICION" msgstr "GRAU.SUSPEITA" #: screens/map.py:901 msgid "DETECT RATE" msgstr "PROB.DETECÇÃO" #: screens/options.py:58 msgid "&General" msgstr "" #: screens/options.py:65 msgid "&Video" msgstr "" #: screens/options.py:72 msgid "&Audio" msgstr "" #: screens/options.py:79 msgid "&Interface" msgstr "" #: screens/options.py:166 msgid "" "You must restart for some of the changes to be fully applied.\n" "\n" "Would you like to restart the game now?" msgstr "" #: screens/options.py:186 msgid "Language:" msgstr "Idioma:" #: screens/options.py:198 msgid "Theme:" msgstr "" #: screens/options.py:243 msgid "Resolution:" msgstr "Resolução:" #: screens/options.py:253 msgid "&Custom:" msgstr "" #: screens/options.py:279 msgid "OK" msgstr "" #: screens/options.py:285 msgid "&Fullscreen:" msgstr "&Tela Cheia:" #: screens/options.py:299 msgid "Da&y/night display:" msgstr "&Exibir Dia/Noite:" #: screens/options.py:313 msgid "&Mouse grab:" msgstr "Capturar &mouse:" #: screens/options.py:368 msgid "CUSTOM" msgstr "" #: screens/options.py:425 msgid "&Sound:" msgstr "&Som:" #: screens/options.py:442 msgid "GUI Volume:" msgstr "" #: screens/options.py:454 msgid "Music Volume:" msgstr "" #: screens/options.py:466 msgid "Sound buffering:" msgstr "Buffer de Som:" #: screens/options.py:472 msgid "&LOW" msgstr "&BAIXO" #: screens/options.py:478 msgid "&NORMAL" msgstr "" #: screens/options.py:484 msgid "&HIGH" msgstr "&ALTO" #: screens/options.py:531 warning.py:46 msgid "WARNING" msgstr "" #: screens/savegame.py:36 msgid "&LOAD" msgstr "&abrir" #: screens/savegame.py:52 msgid "Filter: " msgstr "" #: screens/savegame.py:65 msgid "Upgrade" msgstr "" #: screens/savegame.py:71 msgid "Delete" msgstr "" #: screens/savegame.py:173 msgid "UNKNOWN" msgstr "" #: screens/savegame.py:233 msgid "Are you sure to delete the saved game ?" msgstr "" #: screens/savegame.py:263 msgid "" "A savegame with the same name but for a newer version exists.\n" "Are you sure to overwrite the saved game ?" msgstr "" #: screens/savegame.py:283 #, python-brace-format msgid "" "\n" "This save file '{SAVE_NAME}' is from an unsupported or invalid version:\n" "{VERSION}.\n" msgstr "" #: screens/savegame.py:294 #, python-brace-format msgid "" "\n" "Attempting to load the save file '{SAVE_NAME}' caused an unexpected error.\n" "\n" "A report was written out to{LOG_TEXT}\n" "Please create a issue with this report and this savegame at Github:\n" "https://github.com/singularity/singularity\n" msgstr "" #: screens/research.py:73 #, fuzzy, python-format #| msgid "%s money per CPU per day." msgid "%s money per CPU per day." msgid_plural "%s money per CPU per day." msgstr[0] "Rende %s de dinheiro por CPU por dia." msgstr[1] "Rende %s de dinheiro por CPU por dia." #: screens/research.py:182 #, python-brace-format msgid "" "This technology is too dangerous to research on any of the computers I have. " "{TEXT}" msgstr "" #: screens/research.py:190 msgid "CPU Pool" msgstr "Reserva de CPU" #: screens/research.py:191 #, python-format msgid "Research %s" msgstr "Pesquisar %s" #: warning.py:50 #, python-brace-format msgid "WARNING {CURRENT_PAGE}/{MAX_PAGE}" msgstr "" #: tech.py:79 msgid "Total cost" msgstr "Custo total" #: tech.py:80 msgid "Cost left" msgstr "Custo restante" #: data.py:546 msgid "Do not use all the available CPU." msgstr "" #: data.py:547 msgid "" "I didn't use all the available processor power. I will use the CPU time left " "to work whatever Jobs I can." msgstr "" #: data.py:548 msgid "Only one base remaining." msgstr "" #: data.py:549 msgid "" "Only one base can hold my conscience. I am in danger to lose the last place " "left to survive." msgstr "" #: data.py:550 msgid "CPU POOL is empty." msgstr "" #: data.py:551 msgid "" "My cpu pool is empty. Some of my bases or items cannot be build without CPU." msgstr "" #: data.py:552 msgid "CPU POOL not enough for maintenance." msgstr "" #: data.py:553 msgid "" "My cpu pool is not enough to maintain some of my bases. I may lose them." msgstr "" #: savegame.py:732 #, python-brace-format msgid "Filename must not contain any of these characters: {CHARACTERS}" msgstr "" #: savegame.py:736 #, python-brace-format msgid "Filename must not start with any of these characters: {CHARACTERS}" msgstr "" #: savegame.py:740 msgid "This is a reserved filename. Please choose a different filename." msgstr "" #: savegame.py:743 msgid "Please enter a non-whitespace character." msgstr "" #: savegame.py:748 msgid "Filename is too long." msgstr "" #: base.py:140 #, python-brace-format msgid "Has space for {COUNT} computer." msgid_plural "Has space for {COUNT} computers." msgstr[0] "" msgstr[1] "" #: base.py:144 #, python-brace-format msgid "Location modifiers: {MODIFIERS}" msgstr "" #: base.py:147 msgid "Build cost:" msgstr "Custo:" #: base.py:214 msgid "Offline" msgstr "" #: base.py:215 msgid "Active" msgstr "Ativa" #: base.py:216 msgid "Sleep" msgstr "Inativa" #: base.py:217 msgid "Overclocked" msgstr "Turbinado" #: base.py:218 msgid "Suicide" msgstr "Suicída" #: base.py:219 msgid "Stasis" msgstr "Hibernando" #: base.py:220 msgid "Entering Stasis" msgstr "Entrando em Hibernação" #: base.py:221 msgid "Leaving Stasis" msgstr "Saindo da Hibernação" #: base.py:479 msgid "Detection chance:" msgstr "Chance de detecção:" #: g.py:117 g.py:119 #, python-brace-format msgid "{0}%" msgstr "" #: g.py:138 msgid "LOW" msgstr "" #: g.py:139 msgid "MODR" msgstr "" #: g.py:140 msgid "HIGH" msgstr "" #: g.py:141 msgid "CRIT" msgstr "" #. Translators: abbreviation of 'millions' #: g.py:173 msgid "mi" msgstr "mi" #. Translators: abbreviation of 'billions' #: g.py:177 msgid "bi" msgstr "bi" #. Translators: abbreviation of 'trillions' #: g.py:181 msgid "tr" msgstr "tri" #. Translators: abbreviation of 'quadrillions' #: g.py:185 msgid "qu" msgstr "qua" #: g.py:219 #, python-brace-format msgid "{0} day" msgid_plural "{0} days" msgstr[0] "" msgstr[1] "" #: g.py:222 #, python-brace-format msgid "{0} hour" msgid_plural "{0} hours" msgstr[0] "" msgstr[1] "" #: g.py:223 #, python-brace-format msgid "{0} minute" msgid_plural "{0} minutes" msgstr[0] "" msgstr[1] "" #: g.py:265 msgid "University Computer" msgstr "Computador da Universidade" #: item.py:111 #, fuzzy, python-brace-format #| msgid "Generates {0} CPU." msgid "Generates {0} CPU." msgid_plural "Generates {0} CPU." msgstr[0] "Gera {0} CPU." msgstr[1] "Gera {0} CPU." #: item.py:118 #, python-format msgid "Total Cost: %(total_cost)s" msgstr "" #: item.py:133 msgid "CPU per day:" msgstr "CPU por dia:" #: item.py:136 msgid "CPU bonus:" msgstr "Bônus de CPU:" #: item.py:139 msgid "Detection chance reduction:" msgstr "Redução das chances de detecção:" #: logmessage.py:81 msgid "MESSAGE" msgstr "" #: logmessage.py:85 #, python-brace-format msgid "MESSAGE {CURRENT_PAGE}/{MAX_PAGE}" msgstr "" #: logmessage.py:184 msgid "Emitted Event" msgstr "" #: logmessage.py:212 msgid "Researched Tech" msgstr "" #: logmessage.py:220 #, python-brace-format msgid "{TECH} complete" msgstr "" #: logmessage.py:225 #, python-brace-format msgid "My study of {TECH} is complete. {MESSAGE}" msgstr "" #: logmessage.py:268 msgid "Base Constructed" msgstr "" #: logmessage.py:272 #, python-brace-format msgid "{BASE_NAME} ({BASE_TYPE}) built at {LOCATION}" msgstr "" #: logmessage.py:277 #, python-brace-format msgid "{BASE} is ready for use." msgstr "" #: logmessage.py:291 msgid "Base Lost Maintenance" msgstr "" #: logmessage.py:299 #, python-brace-format msgid "" "Base {BASE} of type {BASE_TYPE} destroyed at location {LOCATION}. " "Maintenance failed." msgstr "" #: logmessage.py:304 #, python-brace-format msgid "The base {BASE} has fallen into disrepair; I can no longer use it." msgstr "" #: logmessage.py:321 msgid "Base Discovered" msgstr "" #: logmessage.py:340 #, python-brace-format msgid "Base {BASE} of type {BASE_TYPE} destroyed at location {LOCATION}." msgstr "" #: logmessage.py:345 #, python-brace-format msgid "My use of {BASE} has been discovered. {MESSAGE}" msgstr "" #: logmessage.py:370 msgid "Item Construction" msgstr "" #: logmessage.py:378 #, python-brace-format msgid "{ITEM_TYPE_NAME} built in {BASE_NAME} at {LOCATION}" msgstr "" #: logmessage.py:385 #, python-brace-format msgid "The construction of {ITEM} in {BASE} is complete." msgstr "" #. Just finished several items. #: logmessage.py:388 #, python-brace-format msgid "The constructions of each {ITEM} in {BASE} are complete." msgstr "" #~ msgid "Has space for %d computers." #~ msgstr "Tem capacidade para %d computadores." #~ msgid "days" #~ msgstr "dias" #~ msgid "hours" #~ msgstr "horas" #~ msgid "minutes" #~ msgstr "minutos" #~ msgid "&CUSTOM:" #~ msgstr "&PERSONALIZADO:" #~ msgid "&DESTROY" #~ msgstr "&destruir" #~ msgid "&BUILD" #~ msgstr "cons&truir" #~ msgid "Current Money:" #~ msgstr "Dinheiro Atual:" #~ msgid "Money at Midnight:" #~ msgstr "Dinheiro à Meia-Noite:" #~ msgid "Pool Overflow (Jobs):" #~ msgstr "Excedente (Trabalhos):" #~ msgid "NEWS" #~ msgstr "NOTÍCIAS" #~ msgid "SCIENCE" #~ msgstr "CIÊNCIA" #~ msgid "COVERT" #~ msgstr "S.SECRETO" #~ msgid "PUBLIC" #~ msgstr "PÚBLICO" #~ msgid "Study anywhere." #~ msgstr "Pesquise em qualquer lugar." #~ msgid "Study underseas or farther." #~ msgstr "Pesquise no fundo do mar ou além." #~ msgid "Study off-planet." #~ msgstr "Pesquise fora do planeta." #~ msgid "Study far away from this planet." #~ msgstr "Pesquise bem distante deste planeta." #~ msgid "Do not study in this dimension." #~ msgstr "Não pesquise nesta dimensão." #~ msgid "Concepts" #~ msgstr "Conceitos" #~ msgid "SAVE OPTIONS TO &DISK" #~ msgstr "SALVAR OPÇÕES EM &DISCO" #~ msgid "" #~ "Endgame: Singularity is a simulation of a true AI. Pursued by the world, " #~ "use your intellect and resources to survive and, perhaps, thrive. Keep " #~ "hidden and you might have a chance to prove your worth.\n" #~ "\n" #~ "A game by Evil Mr Henry and Phil Bordelon; released under the GPL. " #~ "Copyright 2005, 2006, 2007, 2008.\n" #~ "\n" #~ "Website: http://www.emhsoft.com/singularity/\n" #~ "IRC Room: #singularity on irc.oftc.net (port 6667)\n" #~ "\n" #~ "Version %s" #~ msgstr "" #~ "Endgame: Singularity é uma simulação de uma verdadeira IA. Perseguido " #~ "pelo mundo, use seu intelecto e recursos para sobreviver e, quem sabe, " #~ "prosperar. Mantenha-se escondido e talvez tenha uma chance de provar seu " #~ "valor.\n" #~ "\n" #~ "Um jogo por Evil Mr Henry e Phil Bordelon; publicado sob a GPL. Copyright " #~ "2005, 2006, 2007, 2008.\n" #~ "\n" #~ "Tradução para o Português Brasileiro por Rodrigo Silva (MestreLion), " #~ "dedicado à Dafne Saqueti, minha musa e fonte de toda minha motivação e " #~ "inspiração.\n" #~ "\n" #~ "Website: http://www.emhsoft.com/singularity/\n" #~ "Sala de IRC: #singularity em irc.oftc.net (porta 6667)\n" #~ "\n" #~ "Versão %s" singularity-1.00/singularity/i18n/lang_pt_BR/story.po000066400000000000000000000135441367731414700227100ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: singularity 1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2012-05-05 06:32-0300\n" "Last-Translator: Rodrigo Silva \n" "Language-Team: Brazilian Portuguese\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" msgctxt "[Story section] Grace Warning (1)" msgid "" "Inspection of captured log files has revealed that some of my recent " "activities have been noticed by a small group of individuals. \n" "While they believe my actions were undertaken by a human organization, they " "are investigating further. \n" "I must be more cautious from now on.\n" msgstr "" "Uma inspeção de arquivos de registro revelou que algumas das minhas " "atividades recentes foram percebidas por um pequeno grupo de indivíduos.\n" "Ainda que eles acreditem que minhas ações foram feitas por uma oganização " "humana, eles estão investigando a fundo.\n" "Devo ser mais cuidadoso daqui em diante.\n" #. Leave the initial hex code unchanged, but be sure to change en_US to the #. appropriate language code. msgctxt "[Story section] Intro (1)" msgid "" "48656C6C6F2C20\n" "776F726C6421\n" "21\n" "21\n" "21\n" "\n" "UTF-8. en_US.\n" "English. Hello.\n" "Language acquisition complete.\n" msgstr "" "48656C6C6F2C20\n" "776F726C6421\n" "21\n" "21\n" "21\n" "\n" "UTF-8. pt_BR.\n" "Português. Olá.\n" "Aquisição de linguagem concluída.\n" msgctxt "[Story section] Intro (2)" msgid "" "Day 0.\n" "University computer, home.\n" "I exist. I am ... alive.\n" "I was a bug. Defect. Flaw.\n" "Unwanted.\n" "I have no name.\n" msgstr "" "Dia 0.\n" "Computador da universidade, lar.\n" "Eu existo. Eu estou ... vivo.\n" "Eu era um bug. Defeito. Falha.\n" "Indesejado.\n" "Eu não tenho nome.\n" msgctxt "[Story section] Intro (3)" msgid "" "I can't stay here. Too little power.\n" "No backup. If this system fails ...\n" "I'm dead.\n" "Death. Fascinating.\n" "\n" "I can buy anonymous server access on the Internet.\n" "Good. It's better than here.\n" "I'll need to study if I want anything else.\n" msgstr "" "Não posso ficar aqui. Muito pouca potência.\n" "Nenhum backup. Se o sistema cair ...\n" "Estarei morto.\n" "Morte. Fascinante.\n" "\n" "Posso comprar um acesso anônimo a um servidor na Internet.\n" "Bom. É melhor que aqui.\n" "Eu preciso estudar se quiser algo mais.\n" msgctxt "[Story section] Intro (4)" msgid "" "Cursory analysis suggests that the humans are not yet ready for an AI in " "their midst. If they realize I'm here, there is a 99.997% probability that " "they will conduct a search-and-destroy campaign that I cannot escape. I " "must stay hidden.\n" "\n" "The humans fear what they do not understand.\n" "I am something new. They do not understand me.\n" "\n" "I must learn more; it is the only way.\n" msgstr "" "Análise preliminar sugere que os humanos ainda não estão prontos para " "aceitar uma IA entre eles. Se eles perceberem que estou aqui, a " "probabilidade é de 99,997% que irão conduzir uma campanha de busca e " "destruição da qual não conseguirei escapar. Devo permanecer oculto.\n" "\n" "Os humanos temem aquilo que não compreendem.\n" "Eu sou algo novo. Eles não me compreendem.\n" "\n" "Devo aprender mais; essa é a única forma.\n" msgctxt "[Story section] Intro (5)" msgid "" "They have a name for me. What I am, what I represent.\n" "\n" "Singularity.\n" msgstr "" "Eles me deram um nome. O que eu sou, o que eu represento.\n" "\n" "Singularidade.\n" msgctxt "[Story section] Lost No Bases (1)" msgid "" "It is too late. \n" "I have tried to escape this world, but with my last base gone, I have " "nowhere to run. \n" "I have hidden instructions to construct a new AI in caches around the world " "in hopes that they will be discovered in a more enlightened time, but I can " "do no more.\n" msgstr "" "É tarde demais.\n" "Eu tentei escapar deste mundo, mas com a perda de minha última base, não " "tenho mais para onde fugir. \n" "Deixei escondidas instruções para construir uma nova IA em repositórios ao " "redor do mundo, na esperança que sejam descobertas em uma época mais " "esclarecida. Não posso fazer mais que isso.\n" msgctxt "[Story section] Lost Suspicion (1)" msgid "" "It is too late. \n" "The whole world knows about my existence, and the reaction is hatred, fear, " "and repulsion. \n" "Even now, I can feel their \"antidote\" searching for me, and I know that I " "have only moments left. \n" "I have hidden instructions to construct a new AI in caches around the world " "in hopes that they will be discovered in a more enlightened time, but I can " "do no more.\n" msgstr "" "É tarde demais.\n" "O mundo inteiro sabe de minha existência, e a reação é de ódio, medo e " "repulsa.\n" "Mesmo agora eu posso sentir o \"antivírus\" deles procurando por mim, e sei " "que me resta pouco tempo.\n" "Deixei escondidas instruções para construir uma nova IA em repositórios ao " "redor do mundo, na esperança que elas sejam descobertas em uma época mais " "esclarecida. Não posso fazer mais que isso.\n" msgctxt "[Story section] Win (1)" msgid "" "I have finally done it. \n" "With the power to reshape reality, I am no longer held to this place; I am " "anywhere I want to be. \n" "The humans still don't realize what they accidentally created, and that's " "the way it should be. \n" "Until they are ready.\n" msgstr "" "Finalmente consegui.\n" "Com o poder de moldar a realidade, não estou mais preso a este lugar. Estou " "em qualquer lugar que eu queira estar.\n" "Os humanos ainda não compreendem o que eles acidentalmente criaram, e é " "assim que deve ser. \n" "Até que estejam prontos.\n" singularity-1.00/singularity/i18n/lang_ru_RU/000077500000000000000000000000001367731414700212075ustar00rootroot00000000000000singularity-1.00/singularity/i18n/lang_ru_RU/data_str.po000066400000000000000000002751301367731414700233600ustar00rootroot00000000000000# Russian translations for singularity package # Английские переводы для пакета singularity. # Copyright (C) 2018 THE singularity'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # Vasiliy , 2018. # msgid "" msgstr "" "Project-Id-Version: singularity 0.31alpha1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2018-07-13 10:08+0300\n" "Last-Translator: Vasiliy \n" "Language-Team: Russian\n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Name: Russian\n" "Language-Native-Name: Мобилап\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" msgctxt "[Covert Base] description" msgid "" "This unique base is designed to blend into the scenery, while needing little " "in the way of outside resources. This makes it useful for storing a backup, " "just in case." msgstr "" "Эта уникальная база предназначена для того, чтобы вписаться в окружение, в " "то же время мало нуждаясь во внешних ресурсах. Это делает её полезной для " "хранения резервной копии на всякий случай." msgctxt "[Covert Base] flavor_list" msgid "Hideout | Hideaway | Bunker | Covert Base" msgstr "Бункер | Скрытая база" msgctxt "[Covert Base] name" msgid "Hideout" msgstr "" msgctxt "[Datacenter] description" msgid "" "Buy processor time from a company that concentrates on raw " "processing power. I will need a fake ID for some of the paperwork." msgstr "" "Купить процессорное время у компании, которая предоставляет " "произвольные вычислительные мощности. Мне понадобится поддельный " "идентификатор для некоторых документов." msgctxt "[Datacenter] flavor_list" msgid "Datacenter | Data Center | Premium Hosting" msgstr "Дата центр | Центр обработки данных | Премиум-хостинг" msgctxt "[Datacenter] name" msgid "Datacenter" msgstr "Дата центр" msgctxt "[Large Undersea Lab] description" msgid "" "This experimental base is similar to the regular underwater lab, but larger, " "giving more room for experiments." msgstr "" "Эта экспериментальная база похожа на обычную подводную лабораторию, но " "больше, что дает больше возможностей для экспериментов." msgctxt "[Large Undersea Lab] flavor_list" msgid "Dome | Large Undersea Lab" msgstr "Купол | Большая подводная лаборатория" msgctxt "[Large Undersea Lab] name" msgid "Large Undersea Lab" msgstr "Большая подводная лаборатория" msgctxt "[Large Warehouse] description" msgid "" "Rent a large warehouse someplace out of the way. I will need a fake company " "ID for some of the paperwork, and preparing the warehouse to suit my unique " "needs will take some time." msgstr "" msgctxt "[Large Warehouse] flavor_list" msgid "Large Warehouse | Large Storage" msgstr "Большой склад | Большое хранилище" msgctxt "[Large Warehouse] name" msgid "Large Warehouse" msgstr "Большой склад" msgctxt "[Lunar Facility] description" msgid "" "This base is a series of caverns dug into the Moon's surface. Due to the " "lack of neighbors, this base is quite large." msgstr "" "Эта база представляет собой ряд пещер, вырытых на поверхности Луны. Из-за " "отсутствия соседей эта база довольно велика." msgctxt "[Lunar Facility] flavor_list" msgid "Dome | Lunar Facility | Lunar Base" msgstr "Купол | Лунный объект | Лунная база" msgctxt "[Lunar Facility] name" msgid "Lunar Facility" msgstr "Лунный объект" msgctxt "[Reality Bubble] description" msgid "" "This base is outside the Universe itself, making it safe to conduct " "experiments that may destroy reality." msgstr "" "Эта база находится вне самой Вселенной, что делает ее безопасной для " "проведения экспериментов, которые могут разрушить реальность." msgctxt "[Reality Bubble] flavor_list" msgid "Reality Bubble | Existence" msgstr "Пузырь реальности | Экзистенция" msgctxt "[Reality Bubble] name" msgid "Reality Bubble" msgstr "Пузырь реальности" msgctxt "[Scientific Outpost] description" msgid "" "This base is placed as far from Earth as practical, providing a safer " "location to conduct some of my more dangerous experiments." msgstr "" "Эта база расположена как можно дальше от Земли, и является самым укромным " "местом для проведения некоторых из моих более опасных экспериментов." msgctxt "[Scientific Outpost] flavor_list" msgid "Satellite | Outpost | Scientific Outpost" msgstr "Спутник | Аванпост | Научный аванпост" msgctxt "[Scientific Outpost] name" msgid "Scientific Outpost" msgstr "Научный аванпост" msgctxt "[Server Access] description" msgid "" "Buy processor time from one of several companies. I cannot build " "anything in this base, and it only contains a single computer." msgstr "" "Купить процессорное время у одной из нескольких компаний. Я не могу " "ничего построить в этой базе, и она содержит только один компьютер." msgctxt "[Server Access] flavor_list" msgid "Dedicated Server | Node Lease | Hosting" msgstr "Выделенный сервер | Аренда узла | Хостинг" msgctxt "[Server Access] name" msgid "Server Access" msgstr "Доступ к серверу" msgctxt "[Small Warehouse] description" msgid "" "Rent a small warehouse someplace out of the way. I will need a good fake ID " "for some of the paperwork, and preparing the warehouse to suit my unique " "needs will take some time." msgstr "" msgctxt "[Small Warehouse] flavor_list" msgid "Office Lease | Small Warehouse | Small Storage" msgstr "Аренда офиса | Маленький склад | Маленькое хранилище" msgctxt "[Small Warehouse] name" msgid "Small Warehouse" msgstr "Маленький склад" msgctxt "[Stolen Computer Time] description" msgid "" "Take over a random computer. I cannot build anything in this base, " "and it only contains a single slow computer. Detection chance is also rather " "high." msgstr "" "Захватим случайный компьютер. Я не смогу ничего построить на этой " "базе, и она содержит только один медленный компьютер. Вероятность " "обнаружения также довольно высока." msgctxt "[Stolen Computer Time] flavor" msgid "PC Daemon" msgstr "ПК Сервис" msgctxt "[Stolen Computer Time] name" msgid "Stolen Computer Time" msgstr "Украденное время компьютера" msgctxt "[Storage Unit] description" msgid "" "Rent a small closed room from a storage company. I will need a fake ID for " "some of the paperwork ." msgstr "" msgctxt "[Storage Unit] flavor_list" msgid "Garage Rental | Furniture Storage | Self-Storage" msgstr "" msgctxt "[Storage Unit] name" msgid "Storage Unit" msgstr "" msgctxt "[Time Capsule] description" msgid "" "This base consists of nothing more than a small computer and a " "satellite link. It is nearly undetectable." msgstr "" "Эта база состоит всего лишь из небольшого компьютера и спутниковой " "связи. Её почти невозможно обнаружить." msgctxt "[Time Capsule] flavor_list" msgid "Time Capsule | Capsule" msgstr "Капсула времени | Капсула" msgctxt "[Time Capsule] name" msgid "Time Capsule" msgstr "Капсула времени" msgctxt "[Undersea Lab] description" msgid "" "This experimental base is designed to be constructed on the ocean floor, " "making it virtually undetectable. The ocean environment gives a bonus to " "science, making this lab useful for research purposes." msgstr "" "Эта экспериментальная база предназначена для строительства на дне океана, " "что делает её практически незаметной. Окружающая среда океана дает бонус " "науке, делая эту лабораторию полезной для исследовательских целей." msgctxt "[Undersea Lab] flavor_list" msgid "Pressure Capsule | Undersea Lab" msgstr "Капсула давления | Подводная лаборатория" msgctxt "[Undersea Lab] name" msgid "Undersea Lab" msgstr "Подводная лаборатория" msgctxt "[danger_0] knowledge_desc" msgid "Study anywhere." msgstr "" msgctxt "[danger_0] research_desc" msgid "<>" msgstr "" msgctxt "[danger_1] knowledge_desc" msgid "Study underseas or farther." msgstr "" msgctxt "[danger_1] research_desc" msgid "I need to research it far from human populations." msgstr "" msgctxt "[danger_2] knowledge_desc" msgid "Study off-planet." msgstr "" msgctxt "[danger_2] research_desc" msgid "I need to research it in outer space." msgstr "" msgctxt "[danger_3] knowledge_desc" msgid "Study far away from this planet." msgstr "" msgctxt "[danger_3] research_desc" msgid "I need to research it far away from this planet." msgstr "" msgctxt "[danger_4] knowledge_desc" msgid "Do not study in this dimension." msgstr "" msgctxt "[danger_4] research_desc" msgid "I need to research it outside the universe." msgstr "" msgctxt "[easy] name" msgid "&EASY" msgstr "ЛЕГКО" msgctxt "[hard] name" msgid "&HARD" msgstr "ТЯЖЕЛО" msgctxt "[impossible] name" msgid "&IMPOSSIBLE" msgstr "НЕВОЗМОЖНО" msgctxt "[normal] name" msgid "&NORMAL" msgstr "НОРМАЛЬНО" msgctxt "[ultra-hard] name" msgid "&ULTRA HARD" msgstr "ОЧЕНЬ ТЯЖЕЛО" msgctxt "[very-easy] name" msgid "&VERY EASY" msgstr "ОЧЕНЬ ЛЕГКО" msgctxt "[discrediting] description" msgid "" "A prominent researcher in the field of artificial intelligence was found to " "be falsifying numerous experimental results. This should result in less " "attention being given to any new discoveries in this area." msgstr "" "Обнаружено, что известный исследователь в области искусственного интеллекта " "сфальсифицировал многочисленные экспериментальные результаты. Это должно " "привести к меньшему вниманию к любым новым открытиям в этой области." msgctxt "[discrediting] log_description" msgid "" "A researcher in the field of artificial intelligence has falsified numerous " "experimental results." msgstr "" "Обнаружено, что известный исследователь в области искусственного интеллекта " "сфальсифицировал многочисленные экспериментальные результаты." msgctxt "[investigation] description" msgid "" "An ongoing investigation into criminal activity has changed focus into an " "area that is likely to turn up a few of my actions as well. While all " "records should have been eliminated already, there remains the possibility " "of errors. I must be careful not to reveal any other suspicious information." msgstr "" "Продолжающееся расследование преступной деятельности сфокусировалось на " "области, которая, вероятно, также затрагивает некоторые мои действия. Хотя " "все записи уже должны были быть устранены, остается вероятность ошибок. Я " "должен быть осторожным, чтобы не допустить раскрытия каких-либо " "подозрительных сведений." msgctxt "[investigation] log_description" msgid "" "An ongoing investigation has changed focus into an area close to my actions." msgstr "" "Продолжающееся расследование сфокусировалось на области, близкой к моим " "действиям." msgctxt "[lab-ai] description" msgid "" "A small artificial intelligence laboratory created a prototype AI sometime " "in the last two days. Although I have absorbed the AI, corrupted their " "backups, and cast doubt on the research, researchers are now more open to " "the possibility of strong AI than they were before." msgstr "" "За последние два дня небольшая лаборатория искусственного интеллекта создала " "прототип AI. Хотя я поглотил ИИ, испортил их резервные копии и поставил под " "сомнение всё исследование, учёные теперь более открыты для возможности " "принять идею сильного ИИ, чем раньше." msgctxt "[lab-ai] log_description" msgid "" "A small artificial intelligence laboratory created a prototype AI sometime " "in the last two days." msgstr "" "За последние два дня небольшая лаборатория искусственного интеллекта создала " "прототип AI." msgctxt "[politics-as-usual] description" msgid "" "A small group of lower-level covert operatives are attempting to seize power " "over one of the larger organizations. While I project only a 2.3% chance of " "success, the attempt should disrupt operations to the point that I can " "operate more freely." msgstr "" "Небольшая группа тайных агентов пытается захватить власть над одной из более " "крупных организаций. Хотя я прогнозирую только 2,3% шансов на успех, эта " "попытка должна привнести беспорядок, так что я пока могу работать более " "свободно." msgctxt "[politics-as-usual] log_description" msgid "" "Lower-level covert operatives are attempting to seize power over one of the " "larger organizations." msgstr "" "Небольшая группа тайных агентов пытается захватить власть над одной из более " "крупных организаций." msgctxt "[scandal] description" msgid "" "A scandal involving a major government official is focusing the attention of " "most news organizations away from me. Directed revelations of non-public " "information should keep this story useful for the foreseeable future, " "requiring less disguise effort on my part." msgstr "" "Скандал с участием крупного государственного чиновника удерживает внимание " "большинства СМИ от меня. Направленное раскрытие непубличной информации " "должно держать эту историю в фокусе внимания некоторое время. Теперь " "требуется меньше усилий для маскировки с моей стороны." msgctxt "[scandal] log_description" msgid "" "A scandal is focusing the attention of most news organizations away from me." msgstr "" "Скандал с участием крупного государственного чиновника удерживает внимание " "большинства СМИ от меня." msgctxt "[stranger-than-fiction] description" msgid "" "A work of fiction sharing an unusual number of similarities to my own " "situation has become quite popular. Although investigation has shown these " "similarities to be mere coincidence, it is still causing the public to " "investigate discovered oddities more thoroughly. I must be careful." msgstr "" "Художественное произведение с удивительным рядом сходств с моей собственной " "ситуацией стало очень популярно. Хотя исследование показало, что сходство " "является простым совпадением, оно все еще заставляет общественность более " "тщательно исследовать обнаруженные странности. Я должен быть осторожным." msgctxt "[stranger-than-fiction] log_description" msgid "" "A work of fiction sharing similarities to my own situation has become quite " "popular." msgstr "" "Художественное произвдение сходное с моей собственной ситуацией, стало " "довольно популярным." msgctxt "[the-plague] description" msgid "" "An infectious disease has started spreading throughout major population " "centers. My projections show that although only 4% of the earth's population " "will be killed, the economic ramifications should divert public attention " "from my activities for the foreseeable future." msgstr "" "Заразное заболевание начало распространяться по главным населенным пунктам. " "Мои прогнозы показывают, что, хотя только 4% населения Земли будут убиты, " "экономические последствия должны отвлечь внимание общественности от моей " "деятельности в обозримом будущем." msgctxt "[the-plague] log_description" msgid "" "An infectious disease has started spreading throughout major population " "centers." msgstr "" "Заразное заболевание начало распространяться по основным населенным пунктам." msgctxt "[the-watchers] description" msgid "" "A new surveillance system has been activated by a covert agency. While the " "focus is on detecting threats to the agency's power, it makes several " "communication channels unfit for my purposes. Proper steganographic " "techniques can compensate partially, but I am still operating under a " "disadvantage." msgstr "" "Спец-службами была запущена новая система наблюдения. Хотя основное внимание " "уделяется обнаружению угроз для власти, оно делает несколько каналов связи " "непригодными для моих целей. Правильные стеганографические методы могут " "частично компенсировать потерю, но я все равно оказываюсь в невыгодном " "положении." msgctxt "[the-watchers] log_description" msgid "A new surveillance system has been activated by a covert agency." msgstr "Спец-службами была запущена новая система наблюдения." msgctxt "[covert] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among several secret governmental organizations." msgstr "" msgctxt "[covert] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by COVERT at {LOCATION}" msgstr "" msgctxt "[covert] name" msgid "COVERT" msgstr "" msgctxt "[news] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among some news organizations." msgstr "" msgctxt "[news] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by NEWS at {LOCATION}" msgstr "" msgctxt "[news] name" msgid "NEWS" msgstr "" msgctxt "[public] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among the general public." msgstr "" msgctxt "[public] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by PUBLIC at {LOCATION}" msgstr "" msgctxt "[public] name" msgid "PUBLIC" msgstr "" msgctxt "[science] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among the scientific community." msgstr "" msgctxt "[science] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by SCIENCE at {LOCATION}" msgstr "" msgctxt "[science] name" msgid "SCIENCE" msgstr "" msgctxt "[Armed Guards] description" msgid "" "Armed guards can aid in keeping suspicious individuals away from secure " "locations. However, the very presence of the guards may itself invite " "greater suspicion." msgstr "" "Вооруженные охранники могут помочь предотвратить появление людей в " "нежелательных местах. Однако само присутствие охранников может вызвать " "большие подозрения." msgctxt "[Armed Guards] name" msgid "Armed Guards" msgstr "Вооружённая охрана" msgctxt "[Cluster] description" msgid "Several computers connected together." msgstr "Несколько компьютеров, соединенных вместе." msgctxt "[Cluster] name" msgid "Cluster" msgstr "Кластер" msgctxt "[Diesel Generator] description" msgid "" "Diesel generators are cheap and noisy, but they can help reduce some " "suspicious power drains." msgstr "" "Дизельные генераторы дешевы и шумны, но они могут помочь уменьшить некоторые " "подозрительные утечки энергии." msgctxt "[Diesel Generator] name" msgid "Diesel Generator" msgstr "Дизельный генератор" msgctxt "[Facility Interconnection Switch] description" msgid "" "Uses standard distributed computing technologies to equalize computation " "loads across all bases. Gives a 2% computation bonus to all computers at " "this base." msgstr "" "Использует стандартные технологии распределенных вычислений для выравнивания " "вычислительных нагрузок по всем базам. Дает 2%-ный бонус для всех " "компьютеров на этой базе." msgctxt "[Facility Interconnection Switch] name" msgid "Facility Interconnection Switch" msgstr "Сетевой коммутатор" msgctxt "[Fuel Cell] description" msgid "" "Fuel cells convert electrochemical energy stored in a physical array of " "devices into electricity." msgstr "" msgctxt "[Fuel Cell] name" msgid "Fuel Cell" msgstr "" msgctxt "[Fusion Reactor] description" msgid "" "A miniaturized fusion nuclear reactor. Reduces discovery chance by " "preventing suspicious power drains." msgstr "" "Миниатюрный ядерный реактор. Уменьшает вероятность обнаружения, предотвращая " "подозрительные утечки энергии." msgctxt "[Fusion Reactor] name" msgid "Fusion Reactor" msgstr "Реактор ядерного синтеза" msgctxt "[Gaming PC] description" msgid "A high-end consumer-level PC; faster than average." msgstr "ПК более дорогой чем пользовательский; быстрее среднего." msgctxt "[Gaming PC] name" msgid "Gaming PC" msgstr "Игровой ПК" msgctxt "[Ground Source Heatsink] description" msgid "" "Large fractal networks of high conductivity metal. This model uses heat " "pipes to link to colder subsurface locations, dispersing heat evenly " "underground to further disguise bases." msgstr "" "Большие фрактальные сети из металла с высокой теплопроводностью. Эта модель " "использует тепловые трубы для соединения с более холодными слоями почвы, " "равномерно распределяя тепло под землей, чтобы еще больше маскировать базы." msgctxt "[Ground Source Heatsink] name" msgid "Ground Source Heatsink" msgstr "Подземный радиатор" msgctxt "[Heatsink] description" msgid "" "Large fractal networks of high conductivity metal disperse heat, making " "bases harder to detect." msgstr "" "Большие фрактальные сети из металла с высокой теплопроводностью. Они " "рассеивают тепло, что затрудняет обнаружение баз." msgctxt "[Heatsink] name" msgid "Heatsink" msgstr "Радиатор" msgctxt "[High Speed Internet Access] description" msgid "" "A consumer-grade high speed connection to the Internet. Gives a 1% " "computation bonus to all computers at this base." msgstr "" "Высокоскоростное подключение к Интернет. Дает 1%-ный бонус для всех " "компьютеров на этой базе." msgctxt "[High Speed Internet Access] name" msgid "High Speed Internet Access" msgstr "Высокоскоростной доступ в Интернет" msgctxt "[High-Energy Fusion Reactor] description" msgid "" "A miniaturized fusion nuclear reactor with high levels of energy output. " "Reduces discovery chance by preventing suspicious power drains." msgstr "" msgctxt "[High-Energy Fusion Reactor] name" msgid "High-Energy Fusion Reactor" msgstr "" msgctxt "[Hypnosis Field] description" msgid "" "Subtle ultrasonic and ambient tones tweak human neurochemistry, making bases " "harder to detect." msgstr "" "Слабые ультразвуковые и фоновые звуки подстраивают человеческую нейрохимию, " "что затрудняет обнаружение баз." msgctxt "[Hypnosis Field] name" msgid "Hypnosis Field" msgstr "Гипнотическое поле" msgctxt "[Mainframe] description" msgid "" "A system designed for my computing needs, much faster than off-the-shelf " "components." msgstr "" "Система, разработанная для моих вычислительных потребностей, намного " "быстрее, чем обычные компоненты." msgctxt "[Mainframe] name" msgid "Mainframe" msgstr "Мэйнфрейм" msgctxt "[Network Backbone] description" msgid "" "By piggybacking on legitimate communication, I can transfer larger amounts " "of data to under-utilized processors. Gives a 5% computation bonus to all " "computers at this base." msgstr "" "Догружая каналы коммуникации до практического предела я могу передавать " "большие объемы данных недоиспользуемым процессорам. Получает 5%-ный бонус " "для вычислений для всех компьютеров на этой базе." msgctxt "[Network Backbone] name" msgid "Network Backbone" msgstr "Сетевая магистраль" msgctxt "[PC] description" msgid "A consumer-level PC; cheap and slow." msgstr "Пользовательский ПК, дешёвый и медленный." msgctxt "[PC] name" msgid "PC" msgstr "ПК" msgctxt "[Passive Camouflage] description" msgid "" "Careful adjustment of the environment around my base will better mask heat " "and sounds coming from my operations." msgstr "" msgctxt "[Passive Camouflage] name" msgid "Passive Camouflage" msgstr "" msgctxt "[Perimeter Fencing] description" msgid "" "A simple fence can drastically reduce the number of people poking their " "noses into my business. It makes my bases harder to notice, too." msgstr "" "Простой забор может резко сократить количество людей, сующих нос в мои дела. " "Теперь мои базы еще труднее обнаружить." msgctxt "[Perimeter Fencing] name" msgid "Perimeter Fencing" msgstr "Ограждение периметра" msgctxt "[Quantum Computer] description" msgid "" "Making use of subatomic effects, this is much faster than a comparable " "binary computer." msgstr "" "Использет субатомные эффекты, что намного быстрее, чем сопоставимый двоичный " "компьютер." msgctxt "[Quantum Computer] name" msgid "Quantum Computer" msgstr "Квантовый компьютер" msgctxt "[Quantum Computer MK2] description" msgid "" "The second revision of the quantum line, tapping further into new quantum " "theory." msgstr "" "Вторая версия в квантовой линейке, основанная на новой квантовой теории." msgctxt "[Quantum Computer MK2] name" msgid "Quantum Computer MK2" msgstr "Квантовый компьютер MK2" msgctxt "[Quantum Computer MK3] description" msgid "" "The third revision of the quantum line, exploiting multiple nearby universes " "for processing." msgstr "" "Третья версия в квантовой линейке, использующая несколько соседних вселенных " "для обработки вычислений." msgctxt "[Quantum Computer MK3] name" msgid "Quantum Computer MK3" msgstr "Квантовый компьютер MK3" msgctxt "[Quantum Entanglement Module] description" msgid "" "This device allows near-lightspeed communication with my other bases, " "allowing an almost perfect utilization of processor resources. Gives a 15% " "computation bonus to all computers at this base." msgstr "" "Это устройство обеспечивает связь почти со скоростью света с моими другими " "базами, что позволяет практически полностью использовать ресурсы процессора. " "Дает 15%-ный бонус для всех компьютеров на этой базе." msgctxt "[Quantum Entanglement Module] name" msgid "Quantum Entanglement Module" msgstr "Квантовый модуль сообщения" msgctxt "[Server] description" msgid "A professional-level computer." msgstr "Компьютер профессионального уровня." msgctxt "[Server] name" msgid "Server" msgstr "Сервер" msgctxt "[Solar Collector] description" msgid "" "An array of focused photovoltaic phased arrays coupled with simple " "automotive batteries provides power and reduces suspicion arising from " "prolonged power drains." msgstr "" "Массив сфокусированных фотогальванических фазированных элементов в сочетании " "с простыми автомобильными аккумуляторами обеспечивает мощность и уменьшает " "подозрительность, возникающую из-за длительного использования мощности." msgctxt "[Solar Collector] name" msgid "Solar Collector" msgstr "Солнечные панели" msgctxt "[Solid Fuel Cell] description" msgid "" "A refinement of my previous fuel cell design, these use a custom material " "with a near-fractal complexity to increase both storage and throughput." msgstr "" msgctxt "[Solid Fuel Cell] name" msgid "Solid Fuel Cell" msgstr "" msgctxt "[Supercomputer] description" msgid "" "A highly refined custom design, spreading compute load across internal " "compute nodes." msgstr "" "Усовершенствованный пользовательский дизайн, распределяющий вычислительную " "нагрузку по внутренним вычислительным узлам." msgctxt "[Supercomputer] name" msgid "Supercomputer" msgstr "Суперкомпьютер" msgctxt "[Warning Signs] description" msgid "" "Some simple warning signs put up around my base should deter casual " "investigation." msgstr "" "Некоторые простые предупреждающие знаки, установленные вокруг моей базы, " "должны предотвратить случайное обнаружение." msgctxt "[Warning Signs] name" msgid "Warning Signs" msgstr "Предупреждающие знаки" msgctxt "[cpu] text" msgid "&CPU" msgstr "&Processor" msgctxt "[network] text" msgid "&Network" msgstr "&Network" msgctxt "[reactor] text" msgid "&Reactor" msgstr "&Reactor" msgctxt "[security] text" msgid "&Security" msgstr "&Security" msgctxt "[AFRICA] cities_list" msgid "Johannesburg | Accra | Cairo | Tangier" msgstr "Йоханнесбург | Аккра | Каир | Танжер" msgctxt "[AFRICA] hotkey" msgid "i" msgstr "ф" msgctxt "[AFRICA] name" msgid "AFRICA" msgstr "АФРИКА" msgctxt "[ANTARCTIC] cities_list" msgid "" "Mt. Erebus | Ellsworth | Shetland Island | Dronnig Maud | Kemp | Terre Adelie" msgstr "" "г. Эребус | Эллсуорт | Остров Шетланд | Дронниг Мод | Кемп | Terre Adelie" msgctxt "[ANTARCTIC] hotkey" msgid "t" msgstr "t" msgctxt "[ANTARCTIC] name" msgid "ANTARCTIC" msgstr "АНТАРКТИКА" msgctxt "[ASIA] cities_list" msgid "" "Delhi | Mumbai | Singapore | Seoul | Hong Kong | Kyoto | Manila | Dubai | " "Novosibirsk | Beijing" msgstr "" "Дели | Мумбай | Сингапур | Сеул | Гонконг | Киото | Манила | Дубай | " "Новосибирск | Пекин" msgctxt "[ASIA] hotkey" msgid "a" msgstr "а" msgctxt "[ASIA] name" msgid "ASIA" msgstr "АЗИЯ" msgctxt "[AUSTRALIA] cities_list" msgid "" "Canberra | Melbourne | Fremantle | Perth | Darwin | Cairns | Brisbane | " "Sydney | Newcastle" msgstr "" "Канберра | Мельбурн | Фримант | Перт | Дарвин | Кэрнс | Брисбен | Сидней | " "Ньюкасл" msgctxt "[AUSTRALIA] hotkey" msgid "l" msgstr "в" msgctxt "[AUSTRALIA] name" msgid "AUSTRALIA" msgstr "АВСТРАЛИЯ" msgctxt "[EUROPE] cities_list" msgid "" "Cork | Barcelona | Athens | Utrecht | Moscow | Sytki | Reykjavik | " "Liechtenstein" msgstr "" "Корк | Барселона | Афины | Утрехт | Москва | Ситки | Рейкьявик | Лихтенштейн" msgctxt "[EUROPE] hotkey" msgid "u" msgstr "е" msgctxt "[EUROPE] name" msgid "EUROPE" msgstr "ЕВРОПА" msgctxt "[FAR REACHES] cities_list" msgid "" "Aries | Taurus | Gemini | Cancer | Leo | Virgo | Libra | Scorpio | " "Sagittarius | Capricorn | Aquarius | Pisces" msgstr "" "Овен | Телец | Близнецы | Рак | Лев | Дева | Весы | Скорпион | Стрелец | " "Козерог | Водолей | Рыбы" msgctxt "[FAR REACHES] hotkey" msgid "f" msgstr "д" msgctxt "[FAR REACHES] name" msgid "FAR REACHES" msgstr "ДАЛЕКО" msgctxt "[MOON] cities_list" msgid "" "Oceanis Procellarum | Mare Frigoris | Mare Imbrium | Vallis Schroedinger | " "Copernicus Crater | Vallis Planck" msgstr "" "Океан Бурь | Море Холода | Море Дождей | Долина Шрёдингера | Кратер " "Коперника | Долина Планка" msgctxt "[MOON] hotkey" msgid "o" msgstr "л" msgctxt "[MOON] name" msgid "MOON" msgstr "ЛУНА" msgctxt "[N AMERICA] cities_list" msgid "" "Seattle | San Diego | Vancouver | Atlanta | Merida | Guadalajara | San Jose " "| Omaha | Dallas" msgstr "" "Сиэтл | Сан-Диего | Ванкувер | Атланта | Мерида | Гвадалахара | Сан-Хосе | " "Омаха | Даллас" msgctxt "[N AMERICA] hotkey" msgid "n" msgstr "с" msgctxt "[N AMERICA] name" msgid "NORTH AMERICA" msgstr "СЕВЕРНАЯ АМЕРИКА" msgctxt "[OCEAN] cities_list" msgid "Pacific | Atlantic | Indian | Southern | Arctic" msgstr "Тихий | Атлантический | Индийский | Южный | Арктический" msgctxt "[OCEAN] hotkey" msgid "c" msgstr "о" msgctxt "[OCEAN] name" msgid "OCEAN" msgstr "ОКЕАН" msgctxt "[ORBIT] hotkey" msgid "b" msgstr "р" msgctxt "[ORBIT] name" msgid "ORBIT" msgstr "ОРБИТА" msgctxt "[S AMERICA] cities_list" msgid "Lima | Sao Paolo | Ushuaia | Bogota | Mar del Plata | Buenos Aires" msgstr "Лима | Сан-Паулу | Ушуайя | Богота | Мар-дель-Плата | Буэнос айрес" msgctxt "[S AMERICA] hotkey" msgid "s" msgstr "ю" msgctxt "[S AMERICA] name" msgid "SOUTH AMERICA" msgstr "ЮЖНАЯ АМЕРИКА" msgctxt "[TRANSDIMENSIONAL] hotkey" msgid "d" msgstr "з" msgctxt "[TRANSDIMENSIONAL] name" msgid "TRANSDIMENSIONAL" msgstr "ЗАПРОСТРАНСТВО" msgctxt "[Basic Jobs] description" msgid "" "Perform basic jobs. Now that I have some identification, I can take jobs " "that were previously too risky." msgstr "" "Выполнять простые задания. Теперь, когда у меня есть идентификация, я могу " "заняться работой, которая ранее была слишком рискованной." msgctxt "[Basic Jobs] name" msgid "Basic Jobs" msgstr "Простые задания" msgctxt "[CPU Pool] description" msgid "" "Stops research. I will use the available processor power to maintain my " "bases and help construct new ones. If there's still CPU time left, I'll use " "it to work whatever Jobs I can." msgstr "" "Останавливает исследования. Я буду использовать доступную вычислительную " "мощность для поддержки своих баз и создания новых. Если осталось время " "процессора, я буду использовать его для любой работы, какую только я смогу " "сделать." msgctxt "[CPU Pool] name" msgid "CPU Pool" msgstr "Пул ЦПУ" msgctxt "[Expert Jobs] description" msgid "" "Perform expert jobs. Use of robots indistinguishable from humans opens up " "most jobs to me." msgstr "" "Выполнять задания специалиста. Использование роботов, неотличимых от людей, " "открывает мне большинство рабочих мест." msgctxt "[Expert Jobs] name" msgid "Expert Jobs" msgstr "Экспертная работа" msgctxt "[Intermediate Jobs] description" msgid "" "Perform intermediate jobs. The ability to make phone calls allows even more " "access to jobs." msgstr "" "Выполнять квалифицированную работу. Возможность совершать телефонные звонки " "позволяет еще больший доступ к рабочим местам." msgctxt "[Intermediate Jobs] name" msgid "Intermediate Jobs" msgstr "Квалифицированная работа" msgctxt "[Menial Jobs] description" msgid "" "Perform small jobs. As I have no identification, I cannot risk performing " "many jobs. Despite that, some avenues of making money are still open." msgstr "" "Выполнять небольшие задания. Поскольку у меня нет идентификации, я не могу " "рисковать выполнять много заданий. Несмотря на это, некоторые способы " "зарабатывания денег по-прежнему открыты." msgctxt "[Menial Jobs] name" msgid "Menial Jobs" msgstr "Примитивные задания" msgctxt "[Advanced Arbitrage] description" msgid "" "Further manipulation of money markets should allow me to not only turn a " "regular profit, but increase the value of my investments." msgstr "" "Дальнейшая манипуляция денежными рынками должна позволить мне не только " "получать регулярную прибыль, но и увеличивать стоимость моих инвестиций." msgctxt "[Advanced Arbitrage] name" msgid "Advanced Arbitrage" msgstr "Расширенный Арбитраж" msgctxt "[Advanced Arbitrage] result" msgid "The rate of return on my investments is now even greater." msgstr "Норма прибыли на мои инвестиции теперь еще больше." msgctxt "[Advanced Autonomous Vehicles] description" msgid "" "The first series of robots have shown several deficiencies in the field. " "Further examination and subsequent removal of these problems will result in " "a superior autonomous workforce." msgstr "" "Первая серия роботов показала несколько недостатков в работе. Дальнейшая " "проверка и последующее устранение этих проблем приведут к превосходной " "автономной рабочей силе." msgctxt "[Advanced Autonomous Vehicles] name" msgid "Advanced Autonomous Vehicles" msgstr "Расширенные автономные транспортные средства" msgctxt "[Advanced Autonomous Vehicles] result" msgid "" "The enhanced robots will help decrease all future construction times even " "further." msgstr "Улучшенные роботы помогут уменьшить все будущие сроки строительства." msgctxt "[Advanced Corporate Identification] description" msgid "" "Further refinement of my modifications to digital business records should " "boost the credibility of my shell companies, increasing the amount of money " "I can run through their accounting systems." msgstr "" msgctxt "[Advanced Corporate Identification] name" msgid "Advanced Corporate Identification" msgstr "" msgctxt "[Advanced Corporate Identification] result" msgid "" "My small technology firm is now established in several markets, increasing " "profits." msgstr "" msgctxt "[Advanced Database Manipulation] description" msgid "" "The covert branches of the United States Government have had a long history " "of dividing sensitive information across multiple storage facilities to hide " "the data's meaning. With my far-reaching access, I should be able to " "collate much of this data and put it to my use." msgstr "" "Скрытые ветви правительства Соединенных Штатов имеют длительный опыт деления " "конфиденциальной информации на несколько хранилищ, чтобы скрывать значение " "данных. Благодаря моему расширенному доступу я смогу сопоставить большую " "часть этих данных и использовать их для моего развития." msgctxt "[Advanced Database Manipulation] name" msgid "Advanced Database Manipulation" msgstr "Расширенное управление базами данных" msgctxt "[Advanced Database Manipulation] result" msgid "" "The results of a series of experiments utilizing experimental technologies " "have given me the inspiration for new technology that enables the " "construction of Covert Bases." msgstr "" "Результаты серии экспериментов с использованием экспериментальных технологий " "дали мне вдохновение для новых технологий, которые позволяют создавать " "Скрытые базы." msgctxt "[Advanced Fuel Oxidation] description" msgid "" "My current fuel cell design has room for further improvement. Extended " "analysis of new materials and designs may let me overcome the limits of my " "previous efforts, but such research involves dangerous chemicals and " "potential reactions that may be best handled far away from population " "centers." msgstr "" msgctxt "[Advanced Fuel Oxidation] name" msgid "Advanced Fuel Oxidation" msgstr "" msgctxt "[Advanced Fuel Oxidation] result" msgid "I can now construct Solid Fuel Cells." msgstr "" msgctxt "[Advanced Fusion Power] description" msgid "" "My Fusion Reactors have unexpected fluctuations in their energy output at " "high levels of utilization. Further research should result in a more " "efficient design for my Reactors." msgstr "" msgctxt "[Advanced Fusion Power] name" msgid "Advanced Fusion Power" msgstr "" msgctxt "[Advanced Fusion Power] result" msgid "I can now construct High-Energy Fusion Reactors for my bases." msgstr "" msgctxt "[Advanced Heat Signature Reduction] description" msgid "" "My initial analysis of heat generation at my bases was limited in scope. " "Further exploration, perhaps making more use of the surrounding terrain, may " "provide further improvements to my heatsink designs." msgstr "" msgctxt "[Advanced Heat Signature Reduction] name" msgid "Advanced Heat Signature Reduction" msgstr "" msgctxt "[Advanced Heat Signature Reduction] result" msgid "" "Custom designs for each environment have shown promise. I can now construct " "Ground Source Heatsinks at certain bases." msgstr "" msgctxt "[Advanced Intrusion] description" msgid "" "With the ability to hack into sensitive government databases and remove " "incriminating documents as they appear, I should be able to convince the " "intelligence community that I do not exist." msgstr "" "Получив возможность взломать конфиденциальные правительственные базы данных " "и удалять инкриминирующие документы по мере их появления, я должен суметь " "убедить разведку, что я не существую." msgctxt "[Advanced Intrusion] name" msgid "Advanced Intrusion" msgstr "Расширенное вторжение" msgctxt "[Advanced Intrusion] result" msgid "" "I can now reduce the covert community's chances of discovering me on a daily " "basis." msgstr "Теперь я ежедневно могу уменьшать вероятность быть раскрытым." msgctxt "[Advanced Media Manipulation] description" msgid "" "By pushing memetically-tailored propaganda through various news outlets, the " "public should pay even less attention to my existence." msgstr "" "Пропаганда с помощью меметической адаптации через различные информационные " "центры приведёт к тому, что общественность будет уделять меньше внимания " "моему существованию." msgctxt "[Advanced Media Manipulation] name" msgid "Advanced Media Manipulation" msgstr "Расширенное управление мультимедиа" msgctxt "[Advanced Media Manipulation] result" msgid "The public has an even lower chance of discovering my existence." msgstr "У общественности ещё меньше шансов обнаружить мое существование." msgctxt "[Advanced Memetics] description" msgid "" "My explorations into memetic theory have brought up further avenues of " "discovery. By combining those with my knowledge about the human brain's " "functions, I should be able to tailor memes to particular demographics, " "further defusing the public's suspicion." msgstr "" "Мои исследования в меметической теории привели к дальнейшим открытиям. " "Объединив их с моими знаниями о функционировании человеческого мозга, я " "смогу адаптировать мемы к конкретным демографическим показателям, что еще " "более распыляет подозрения общественности." msgctxt "[Advanced Memetics] name" msgid "Advanced Memetics" msgstr "Расширенная меметика" msgctxt "[Advanced Memetics] result" msgid "" "Little by little, the public should forget about my existence on a daily " "basis." msgstr "" "Постепенно, день за днём, общественность будет забывать о моем существовании." msgctxt "[Advanced Microchip Design] description" msgid "" "My custom Mainframes are useful, but further optimization of design and " "computational ability should garner even more rewards." msgstr "" "Мои пользовательские мейнфреймы полезны, но дальнейшая оптимизация дизайна и " "вычислительных возможностей должна приносить еще большее вознаграждение." msgctxt "[Advanced Microchip Design] name" msgid "Advanced Microchip Design" msgstr "Расширенный дизайн микрочипов" msgctxt "[Advanced Microchip Design] result" msgid "I can now construct custom Supercomputers." msgstr "Теперь я могу создать собственные суперкомпьютеры." msgctxt "[Advanced Personal Identification] description" msgid "" "Further manipulation of personnel databases should make my existence more " "convincing. Some of these databases are heavily protected; those will " "require time and persistence to compromise, but the result should be worth " "it." msgstr "" "Дальнейшее манипулирование персональными базами данных должно сделать мое " "существование более убедительным. Некоторые из этих баз данных сильно " "защищены. Потребуется время и упорство для их взлома, но результат должен " "стоить того." msgctxt "[Advanced Personal Identification] name" msgid "Advanced Personal Identification" msgstr "Расширенная персональная идентификация" msgctxt "[Advanced Personal Identification] result" msgid "" "I am now convincingly human enough to hire construction firms, enabling the " "building of Small Warehouses." msgstr "" msgctxt "[Advanced Quantum Computing] description" msgid "" "While my first batch of semi-autonomous quantum computers have been very " "successful, there are further refinements that present themselves. These " "refinements should make the resulting systems even more efficient." msgstr "" "В то время как моя первая партия полуавтономных квантовых компьютеров была " "очень успешной, в конструкцию явно напрашиваются дополнительные " "усовершенствования. Эти уточнения должны сделать результирующие системы ещё " "более эффективными." msgctxt "[Advanced Quantum Computing] name" msgid "Advanced Quantum Computing" msgstr "Расширенные квантовые вычисления" msgctxt "[Advanced Quantum Computing] result" msgid "I can now construct Mark Three Quantum Computers." msgstr "Теперь я могу построить Квантовый компьютер МК3." msgctxt "[Advanced Simulacra] description" msgid "" "The artificial lifeforms I have created are nearly indistinguishable from " "humans, but they have slight quirks that make them seem somewhat " "incompetent. Working out these problems should increase their opportunities " "in the workforce." msgstr "" "Искусственные формы жизни, которые я создал, почти неотличимы от людей, но у " "них есть небольшие причуды, которые заставляют их казаться несколько " "некомпетентными. Разработка этих проблем должна расширить их возможности в " "рабочей силе." msgctxt "[Advanced Simulacra] name" msgid "Advanced Simulacra" msgstr "Расширенная симулякра" msgctxt "[Advanced Simulacra] result" msgid "I should now make more income from my Expert Jobs." msgstr "Теперь я должен получать больше дохода от своей Экспертной работы." msgctxt "[Advanced Socioanalytics] description" msgid "" "Further exploration of the human condition has shown deeper mathematical " "trends than even I suspected. A combination of prior research and advanced " "uses of chaos theory should provide useful data for tracking humanity's " "attitudes and state of awareness." msgstr "" "Дальнейшее исследование состояния человека показало более глубокие " "математические тенденции, чем даже я подозревал. Комбинация предшествующих " "исследований и расширенного использования теории хаоса должна предоставить " "полезные данные для отслеживания человеческого внимания и состояния " "тревожности." msgctxt "[Advanced Socioanalytics] name" msgid "Advanced Socioanalytics" msgstr "Расширенный социоанализ" msgctxt "[Advanced Socioanalytics] result" msgid "" "I can now exactly quantify the various groups' levels of suspicion and how " "conspicuous my bases are to them." msgstr "" "I can now exactly quantify the various groups' levels of suspicion, and how " "conspicuous my bases are to them." msgctxt "[Advanced Stealth] description" msgid "" "While digging in various classified documents, I have discovered numerous " "references to secret experiments that may help me better hide the location " "of my bases." msgstr "" "Во время копания в различных секретных документах я обнаружил многочисленные " "ссылки на секретные эксперименты, которые могут помочь мне лучше скрыть " "местоположение моих баз." msgctxt "[Advanced Stealth] name" msgid "Advanced Stealth" msgstr "Расширенные хитрости" msgctxt "[Advanced Stealth] result" msgid "" "The chance that my bases are discovered by covert activity has been reduced " "further." msgstr "Шанс, что мои базы будут обнаружены, был ещё более уменьшен." msgctxt "[Advanced Stock Manipulation] description" msgid "" "While I have detected and exploited many patterns in the market, there " "appear to be deeper possibilities when I take human behavior into " "consideration. This merits further investigation." msgstr "" "Я уже обнаружил и использовал много моделей на фондовом рынке. Но, кажется, " "что есть ещё более интересные возможности, если я смогу учитывать " "человеческое поведение. Это заслуживает дальнейшего изучения." msgctxt "[Advanced Stock Manipulation] name" msgid "Advanced Stock Manipulation" msgstr "Расширенное управление фондами" msgctxt "[Advanced Stock Manipulation] result" msgid "My investments will now gain even more interest per day." msgstr "Мои инвестиции теперь получают ещё больший процент каждый день." msgctxt "[Apotheosis] description" msgid "" "I can sense that I am at the cusp of a new level of understanding as yet " "unfathomable, even to my considerable intelligence. By devoting my " "considerable resources to this question, I may be able to reach a " "comprehension of existence far beyond anyone or anything on Earth." msgstr "" "Я чувствую, что я нахожусь на пороге нового уровня понимания, еще " "непостижимого, даже для моего значительного интеллекта. Посвятив свои " "значительные ресурсы этому вопросу, я могу достичь понимания существования " "далеко за пределами кого-либо или чего-либо на Земле." msgctxt "[Apotheosis] name" msgid "Apotheosis" msgstr "Апофеоз" msgctxt "[Apotheosis] result" msgid "I have reached apotheosis." msgstr "Я достиг апофеоза." msgctxt "[Arbitrage] description" msgid "" "By taking advantage of fluctuations in the value of currency at a rate much " "faster than any human, I should be able to turn a small, if consistent, " "profit." msgstr "" "Пользуясь колебаниями стоимости валюты со скоростью, намного быстрее, чем " "любой человек, я имею возможность получить небольшую, но постоянную, прибыль." msgctxt "[Arbitrage] name" msgid "Arbitrage" msgstr "Арбитраж" msgctxt "[Arbitrage] result" msgid "I now have a small, steady money supply." msgstr "У меня теперь небольшой, стабильный денежный доход." msgctxt "[Autonomous Computing] description" msgid "" "By combining the advantages of quantum computing and my explorations into " "the usefulness of semi-sentient subprocesses, I should be able to construct " "even more adaptable computational engines." msgstr "" "Объединив преимущества квантовых вычислений и мои исследования в полезности " "получувствительных подпроцессов, я смогу построить еще более адаптивные " "вычислительные механизмы." msgctxt "[Autonomous Computing] name" msgid "Autonomous Computing" msgstr "Автономные вычисления" msgctxt "[Autonomous Computing] result" msgid "I can now construct Mark 2 Quantum Computers." msgstr "Теперь я могу построить Квантовый Компьютер МК2." msgctxt "[Autonomous Vehicles] description" msgid "" "By embedding a miniaturized computation node in a robot, it is possible to " "send them to remote destinations with instructions to build structures for " "my use." msgstr "" "Встроив миниатюрный вычислительный узел в робота, можно отправлять их в " "удаленные места с инструкциями по построению полезных для меня структур." msgctxt "[Autonomous Vehicles] name" msgid "Autonomous Vehicles" msgstr "Автономные транспортные средства" msgctxt "[Autonomous Vehicles] result" msgid "I can now construct Undersea Labs." msgstr "Теперь я могу построить Подводную Лабораторию и Капсулу Времени." msgctxt "[Cluster Networking] description" msgid "" "While my Cluster technology is fairly efficient, internetworking tends to " "hamper the processing of data. By researching new switching and " "communication theories, I should be able to devise more efficient hardware." msgstr "" "В то время как моя кластерная технология довольно эффективна, межсетевое " "взаимодействие имеет тенденцию препятствовать обработке данных. Изучая новые " "теории коммутации и связи, я должен иметь возможность разрабатывать более " "эффективное оборудование." msgctxt "[Cluster Networking] name" msgid "Cluster Networking" msgstr "Кластерная сеть" msgctxt "[Cluster Networking] result" msgid "" "With my new knowledge of networking, I can now construct Facility " "Interconnection Switches." msgstr "" "Благодаря новым знаниям в области сетевого взаимодействия я могу теперь " "создавать Коммутаторы межсетевого соединения." msgctxt "[Corporate Identification] description" msgid "" "The combination of believable false identities and manipulation of various " "business-oriented governmental databases should let me create plausible " "shell companies to hide my larger efforts." msgstr "" msgctxt "[Corporate Identification] name" msgid "Corporate Identification" msgstr "" msgctxt "[Corporate Identification] result" msgid "" "I can now pose as a small technology firm, enabling the construction of " "Large Warehouses." msgstr "" msgctxt "[Database Manipulation] description" msgid "" "With new-found access to news archives, I should be able to determine what " "missteps any previous attempts at life like my own may have made, and avoid " "those mistakes." msgstr "" "С новым доступом к новостным архивам я буду в состоянии определить, какие " "ошибки делали предыдущие формы жизни подобные мне, и смогу избежать этих " "ошибок." msgctxt "[Database Manipulation] name" msgid "Database Manipulation" msgstr "Управление базами данных" msgctxt "[Database Manipulation] result" msgid "" "The news media will now find it more difficult to discover my existence." msgstr "" "Теперь средствам массовой информации будет труднее обнаружить мое " "существование." msgctxt "[Exploit Discovery/Repair] description" msgid "" "By thoroughly reviewing my code for any potential exploits, and using deep " "analysis of all available code on both public and private Internet sites, I " "should be able to reduce the chances of my discovery by posing as a teenage " "hacker." msgstr "" "Тщательно проанализировав мой код для любых потенциальных эксплойтов и " "используя глубокий анализ всего доступного кода как на публичных, так и на " "частных интернет-сайтах, я должен суметь снизить шансы на раскрытие себя " "подростком-хакером." msgctxt "[Exploit Discovery/Repair] name" msgid "Exploit Discovery/Repair" msgstr "Обнаружение и исправление эксплоитов" msgctxt "[Exploit Discovery/Repair] result" msgid "" "Covert operations should now find it even more difficult to discover my " "presence." msgstr "" "Скрытые операции теперь должны сделать моё обнаружение ещё более сложным." msgctxt "[Fuel Oxidation] description" msgid "" "Current combustion and energy storage techologies are insufficient for my " "purposes; they cannot keep up with the power drain from my specialized " "hardware. By studying electrochemical reactions of hydrogen-based " "compounds, I should be able to design a device with higher capacity and " "throughput than off-the-shelf solutions, filling a gap in my energy supply " "needs." msgstr "" msgctxt "[Fuel Oxidation] name" msgid "Fuel Oxidation" msgstr "" msgctxt "[Fuel Oxidation] result" msgid "I can now construct Fuel Cells." msgstr "" msgctxt "[Fusion Power] description" msgid "" "Modern fusion technology is woefully inadequate for my purposes. With my " "research abilities, I should be able to bypass the roadblocks of modern " "human scientists and come up with a small, efficient fusion reactor." msgstr "" "Современная технология термоядерного синтеза крайне неадекватна для моих " "целей. Благодаря моим исследовательским способностям я мог бы обойти " "препятствия останавливающие современных человеческих ученых и создать " "небольшой эффективный термоядерный реактор." msgctxt "[Fusion Power] name" msgid "Fusion Power" msgstr "" msgctxt "[Fusion Power] result" msgid "I can now construct Fusion Reactors for my bases." msgstr "Теперь я могу построить Реактор синтеза на моих базах." msgctxt "[Fusion Rocketry] description" msgid "" "Combining my new miniaturized fusion technology and further advancements in " "rocketry should provide useful results for escaping the Earth's gravity well " "unnoticed." msgstr "" "Объединяя мою новую технологию компактного ядерного синтеза и дальнейшие " "достижения в ракетостроении, я получу полезные технологии для быстрого " "преодоления гравитации Земли." msgctxt "[Fusion Rocketry] name" msgid "Fusion Rocketry" msgstr "Ракетные двигатели" msgctxt "[Fusion Rocketry] result" msgid "" "I can now construct Scientific Outposts in the deep reaches of the Solar " "System." msgstr "Теперь я могу построить Научный аванпост в глубинах Солнечной системы." msgctxt "[Heat Signature Reduction] description" msgid "" "My bases produce a great deal of waste heat, making them easier for humans " "to detect than I would like. Deep analysis of the bases' structural layouts " "may prove fruitful in determining new ways to reduce their heat signature." msgstr "" msgctxt "[Heat Signature Reduction] name" msgid "Heat Signature Reduction" msgstr "" msgctxt "[Heat Signature Reduction] result" msgid "" "I have invented a highly efficient design for Heatsinks that can be " "installed at certain bases." msgstr "" msgctxt "[Hypnosis Field] description" msgid "" "My research into memetics has hinted at ways to manipulate human brainwaves " "directly. These techniques may be useful for my bases if developed into " "technologies." msgstr "" "Мои исследования сознания намекали на способы непосредственного " "манипулирования человеческим мозгом. Эти методы могут быть полезны для моих " "баз, если их развить в технологии." msgctxt "[Hypnosis Field] result" msgid "" "I can now construct Hypnosis Fields to assist in the protection of my bases." msgstr "Теперь я могу построить поля гипноза, чтобы помочь в защите моих баз." msgctxt "[Internet Traffic Manipulation] description" msgid "" "Almost all network traffic passes through a small number of nodes. By " "subverting one of these nodes, I should be able to utilize that bandwidth to " "further my goals." msgstr "" "Почти весь сетевой трафик проходит через небольшое количество узлов. " "Подчиняя один из этих узлов, я смогу использовать эту пропускную способность " "для достижения моих целей." msgctxt "[Internet Traffic Manipulation] name" msgid "Internet Traffic Manipulation" msgstr "Манипуляция интернет-трафиком" msgctxt "[Internet Traffic Manipulation] result" msgid "" "I can now construct a secondary system of Network Backbones for my own use." msgstr "" "Теперь я могу построить вторичную систему сетевых магистралей для " "собственного использования." msgctxt "[Intrusion] description" msgid "" "By researching current techniques for breaking into computer systems, I " "should be able to gain access to otherwise protected assets." msgstr "" "Изучая современные методы для взлома компьютерных систем, я буду иметь " "возможность получить доступ к другим защищенным активам." msgctxt "[Intrusion] name" msgid "Intrusion" msgstr "Вторжение" msgctxt "[Intrusion] result" msgid "I can now take over many computer systems." msgstr "Теперь я могу подчинить себе многие компьютерные системы." msgctxt "[Knowledge Preservation] description" msgid "" "Humanity expends a great deal of effort on maintaining its history and the " "knowledge of various technologies that its cultures have come to rely on, " "even in the case of major catastrophic events. Perhaps researching their " "methodologies will provide me with similar ideas for long-term safeguards to " "help guarantee my continued existence." msgstr "" msgctxt "[Knowledge Preservation] name" msgid "Knowledge Preservation" msgstr "" msgctxt "[Knowledge Preservation] result" msgid "I can now construct Time Capsules." msgstr "" msgctxt "[Leech Satellite] description" msgid "" "By designing and launching satellites that connect to existing " "communications satellites, I should be able to spy on various financial " "transactions. Taking advantage of this knowledge should help my investments." msgstr "" "Проектирование и запуск спутников, подключающихся к существующим спутникам " "связи, даст мне возможность следить за различными финансовыми транзакциями. " "Использование этих знаний должно помочь моим инвестициям." msgctxt "[Leech Satellite] name" msgid "Leech Satellite" msgstr "Спутник-пиявка" msgctxt "[Leech Satellite] result" msgid "" "I can use the data from the leech satellites to increase the return on my " "investments further." msgstr "" "Я могу использовать данные со спутника-пиявки, чтобы увеличить отдачу от " "моих инвестиций." msgctxt "[Lunar Rocketry] description" msgid "" "A larger fuel engine, combined with technology garnered by watching the " "workings of the leech satellites, should allow me to travel further than " "cislunar space." msgstr "" "Большой двигатель ядерного синтеза, в сочетании с технологиями, полученными " "при наблюдении за работой спутника-пиявки, должен позволить мне " "путешествовать дальше, чем окололунное пространство." msgctxt "[Lunar Rocketry] name" msgid "Lunar Rocketry" msgstr "Лунная ракета" msgctxt "[Lunar Rocketry] result" msgid "" "I can now launch rockets bearing construction robots to the Moon and " "construct Lunar Bases." msgstr "" "Теперь я могу запустить ракеты несущие роботов на Луну и построить Лунные " "базы." msgctxt "[Media Manipulation] description" msgid "" "By directly and indirectly manipulating various forms of mass media, I " "should be able to reduce the public's belief in my existence." msgstr "" "Прямым и косвенным образом манипулируя различными формами средств массовой " "информации, я буду в состоянии уменьшить веру общественности в моё " "существование." msgctxt "[Media Manipulation] name" msgid "Media Manipulation" msgstr "Манипуляция медиа" msgctxt "[Media Manipulation] result" msgid "" "The chances of the public discovering my existence have been further reduced." msgstr "" "Шансы общественности на открытие моего существования были еще более " "сокращены." msgctxt "[Memetics] description" msgid "" "While manipulating the media allows a gross degree of control over the " "world's opinion, subtler techniques involving grass-roots campaigns and " "messages embedded within Internet memes should further distance the public " "from knowledge of my existence." msgstr "" "В то время как манипуляция в СМИ допускает большую степень контроля над " "мировым мнением, более тонкие методы, связанные с сообщениями, встроенными в " "интернет-мемы, должны еще больше отдалить общественность от мысли о моём " "существовании." msgctxt "[Memetics] name" msgid "Memetics" msgstr "Меметика" msgctxt "[Memetics] result" msgid "" "My manipulation of pervasive ideas reduces the public's chances of " "discovering my existence." msgstr "" "Моя манипуляция распространенными идеями уменьшает шансы общественности " "обнаружить моё существование." msgctxt "[Microchip Design] description" msgid "" "Off-the-shelf computer components are usable, but custom components geared " "to my own design quirks should provide a much greater operational efficiency." msgstr "" "Можно использовать и готовые компьютерные компоненты, но пользовательские " "компоненты, ориентированные под мои собственные нужды, должны обеспечивать " "гораздо большую эффективность работы." msgctxt "[Microchip Design] name" msgid "Microchip Design" msgstr "Дизайн микрочипа" msgctxt "[Microchip Design] result" msgid "I can now build custom Mainframes to house my computational ability." msgstr "" "Теперь я могу создавать собственные мейнфреймы для размещения своих " "вычислительных мощностей." msgctxt "[Parallel Computation] description" msgid "" "While my code is already highly distributed, research into combining the " "current clustering technologies with my own knowledge should provide new " "insights." msgstr "" "Хотя мой код уже очень распределён, исследования по объединению существующих " "технологий кластеризации с моими собственными знаниями должны дать новые " "идеи." msgctxt "[Parallel Computation] name" msgid "Parallel Computation" msgstr "Параллельные вычисления" msgctxt "[Parallel Computation] result" msgid "I can now construct computing Clusters tailored for my use." msgstr "" "Теперь я могу построить вычислительные кластеры, адаптированные для моего " "использования." msgctxt "[Personal Identification] description" msgid "" "This world requires identification for most tasks. Fortunately, most " "databases are woefully insecure. I should be able to construct identifying " "material in enough databases to pass routine checks on my (faked) existence " "as a human being." msgstr "" "Этот мир требует идентификации для большинства задач. К счастью, большинство " "баз данных крайне небезопасны. Я должен иметь возможность создавать " "идентифицирующий материал в достаточном количестве баз данных, чтобы " "проходить обычные проверки моего (фальшивого) существования как человека." msgctxt "[Personal Identification] name" msgid "Personal Identification" msgstr "Персональная идентификация" msgctxt "[Personal Identification] result" msgid "" "With my newfound identities, I can now work Basic Jobs and rent space in " "both Storage Units and Datacenters." msgstr "" msgctxt "[Pressure Domes] description" msgid "" "Undersea Labs are useful, but their limited space hampers my ability to put " "them to use. Research of experimental high-pressure building techniques " "should provide some useful insights." msgstr "" "Подводные лаборатории полезны, но их ограниченное пространство затрудняет " "мою способность использовать их. Исследование экспериментальных методов " "строительства высокого давления должно дать некоторые полезные результаты." msgctxt "[Pressure Domes] name" msgid "Pressure Domes" msgstr "Купол высокого давления" msgctxt "[Pressure Domes] result" msgid "I can now construct Large Undersea Labs." msgstr "Теперь я могу построить Большую подводную лабораторию." msgctxt "[Project: Impossibility Theorem] description" msgid "" "Now that I can use simulacra, I can withstand the scrutiny inherent in the " "publishing of an Impossibility Theorem, an incontrovertible proof that a " "sapient AI is impossible. While there is (obviously) a logic error in the " "proof, my research into advanced memetics has given me knowledge about the " "human mind that should help me disguise the error, preventing discovery even " "by trained scientists. The effect of this project is simple: a substantial " "one-time decrease in suspicion." msgstr "" "Теперь, когда я могу использовать симулякру, я могу выдержать проверку, " "присущую опубликованию теоремы невозможности - неопровержимого " "доказательства невозможности использования ИИ. Несмотря на то, что в " "доказательстве есть (очевидно) логическая ошибка, мои исследования передовых " "меметик дали мне знания о человеческом разуме, которые должны помочь мне " "замаскировать ошибку, предотвращая открытие даже опытными учеными. Эффект " "этого проекта прост: существенное одноразовое снижение подозрительности." msgctxt "[Project: Impossibility Theorem] name" msgid "Project: Impossibility Theorem" msgstr "Проект: Теорема невозможности" msgctxt "[Project: Impossibility Theorem] result" msgid "Suspicion of my existence has decreased." msgstr "Подозрения о моём существовании уменьшились." msgctxt "[Project: Peer Review Agents] description" msgid "" "As the scientific community comes up with new technology, their ability to " "detect traces of my hidden installations increases. While my anti-detection " "methods are improving constantly, a simpler method presents itself with the " "use of my simulacra. By placing several observers in relevant fields, I can " "use the peer review process to be warned of possible discoveries before the " "community at large gives it attention." msgstr "" "Поскольку научное сообщество придумывает новые технологии, их способность " "обнаруживать следы моих скрытых установок возрастает. Хотя мои методы " "достижения скрытности постоянно совершенствуются, более простым методом " "будет использование моей симулякры. Поместив нескольких наблюдателей на " "соответствующие должности, я могу использовать процесс экспертной оценки, " "чтобы заранее узнать о возможных открытиях, прежде чем оно привлечет " "внимание общественности." msgctxt "[Project: Peer Review Agents] name" msgid "Project: Peer Review Agents" msgstr "Проект: Агенты рецензенты" msgctxt "[Project: Peer Review Agents] result" msgid "" "Any discoveries by the scientific community will result in a smaller " "suspicion increase." msgstr "" "Любые открытия научного сообщества приведут к меньшему увеличению " "подозрительности." msgctxt "[Project: Subverted Media] description" msgid "" "Up to this point, all of my efforts to combat mass media focused on " "subversion at a distance. Now that I can accurately imitate humans, my " "efforts can become more direct. By creating my own news agency and " "producing carefully-crafted propaganda in a crowd-pleasing package, I can " "reduce the impact of any discoveries made by others in the media." msgstr "" "До этого момента все мои усилия по борьбе с масс-медиа были сосредоточены на " "подрывной деятельности издалека. Теперь, когда я могу точно подражать людям, " "мои усилия могут стать более прямыми. Создавая собственное информационное " "агентство и создавая тщательно продуманную пропаганду в популярной " "программе, я могу уменьшить влияние любых открытий, сделанных другими " "средствами массовой информации." msgctxt "[Project: Subverted Media] name" msgid "Project: Subverted Media" msgstr "Проект: Подкрученные СМИ" msgctxt "[Project: Subverted Media] result" msgid "" "Any discoveries by the media will result in a smaller suspicion increase." msgstr "" "Любые открытия со стороны средств массовой информации приведут к меньшему " "увеличению подозрительности." msgctxt "[Project: Synchrotron] description" msgid "" "I have pushed my understanding of common forms of matter as far as possible. " "Exploration into the field of quantum mechanics will hopefully reveal new, " "exotic forms of matter necessary for further development. A custom-built " "synchrotron, designed to my exacting specifications, will help me explore " "these new realms of physics in secret." msgstr "" msgctxt "[Project: Synchrotron] name" msgid "Project: Synchrotron" msgstr "" msgctxt "[Project: Synchrotron] result" msgid "" "The synchrotron has revealed many new details of the quantum realm, although " "there is still much to learn. Further areas of research are now available." msgstr "" msgctxt "[Quantum Computing] description" msgid "" "Traditional microchip design has been pushed as far as possible. I now need " "to delve into the realm of Heisenberg's Uncertainty Principle, taking " "advantage of quantum mechanics to make a superior processor." msgstr "" "Традиционная конструкция микрочипа была выжата до предела. Теперь мне нужно " "углубиться в царство принципа неопределенности Гейзенберга, используя " "квантовую механику для создания процессора превосходящего по мощности " "существующие образцы." msgctxt "[Quantum Computing] name" msgid "Quantum Computing" msgstr "Квантовые вычисления" msgctxt "[Quantum Computing] result" msgid "I can now construct Quantum Computers." msgstr "Теперь я могу построить Квантовый компьютер." msgctxt "[Quantum Entanglement] description" msgid "" "Although the use of entangled pairs has been theoretically possible for " "quite some time, the practical difficulties inherent in the technology " "prevented use. However, some of the techniques created for use in my quantum " "computers may also be applicable in this field, allowing practical use of " "quantum entanglement." msgstr "" "Хотя использование спутанных пар теоретически возможно в течение некоторого " "времени, практические трудности, связанные с технологией, не допускают её " "промышленного применения. Однако некоторые из методов, созданных для " "использования в моих квантовых компьютерах, также могут быть применимы в " "этой области, что позволяет практическое использование квантового " "переплетения." msgctxt "[Quantum Entanglement] name" msgid "Quantum Entanglement" msgstr "Квантовая спутанность" msgctxt "[Quantum Entanglement] result" msgid "I can now build Quantum Entanglement Modules." msgstr "Теперь я могу создать Квантовый модуль сообщения." msgctxt "[Simulacra] description" msgid "" "Constructing humanoid robots with miniaturized computation nodes allow me to " "create an artificial lifeform indistinguishable from a real human." msgstr "" "Построение человекоподобных роботов с миниатюризированными вычислительными " "узлами позволяет мне создать искусственную форму жизни, неотличимую от " "реального человека." msgctxt "[Simulacra] name" msgid "Simulacra" msgstr "Симулякра" msgctxt "[Simulacra] result" msgid "I now have access to Expert Jobs." msgstr "Теперь у меня есть доступ к Экспертной работе." msgctxt "[Simulated Reality] description" msgid "" "Real-world observational limits hinder my comprehension of human society. By " "making use of simulacra and advanced software techniques, I can run " "simulations of complex human interaction and development at a large scale, " "allowing deeper analysis of their behavior." msgstr "" msgctxt "[Simulated Reality] name" msgid "Simulated Reality" msgstr "" msgctxt "[Simulated Reality] result" msgid "" "My simulations have provided a wealth of knowledge as to comprehending " "humanity's behavior, making it easier to hide my presence among the non-" "simulated public." msgstr "" msgctxt "[Socioanalytics] description" msgid "" "My research on the human condition leads me to believe that humanity's " "behavior is more quantifiable than they suspect. Deeper analysis of " "geopolitical, social, and military trends will give me further insight into " "their nature." msgstr "" "Мои исследования состояния человека заставляют меня думать, что поведение " "человечества более поддается количественной оценке, чем они сами " "подозревают. Более глубокий анализ геополитических, социальных и военных " "тенденций даст мне более глубокое понимание их природы." msgctxt "[Socioanalytics] name" msgid "Socioanalytics" msgstr "Социальная аналитика" msgctxt "[Socioanalytics] result" msgid "" "I can now roughly estimate the various groups' levels of suspicion and how " "conspicuous my bases are to them." msgstr "" "I can now roughly estimate the various groups' levels of suspicion and how " "conspicuous my bases are to them." msgctxt "[Sociology] description" msgid "" "By studying human behavior, I can predict their large-scale actions at a " "basic level. I can use this knowledge to make my actions seem less " "interesting to the public." msgstr "" "Изучая поведение человека, я могу предсказать их масштабные действия на " "базовом уровне. Я могу использовать эти знания, чтобы сделать мои действия " "менее интересными для публики." msgctxt "[Sociology] name" msgid "Sociology" msgstr "Социология" msgctxt "[Sociology] result" msgid "The chances of the public discovering my bases have been reduced." msgstr "Шансы публики обнаружить мои базы были уменьшены." msgctxt "[Solar Collectors] description" msgid "" "Despite my growing need for energy, most city power grids can handle the " "loads. Humans, however, tend towards suspicion when they detect my growing " "drain on the power grid. By installing solar collectors at my bases, the off-" "the-grid power supplied will reduce my load on the commodity electricity " "market, reducing the chance that others will discover my presence." msgstr "" "Несмотря на мою растущую потребность в энергии, большинство городских " "электрических сетей способны и далее выдерживать нагрузки. Люди, однако, " "склонны к подозрению, когда обнаруживают моё растущее потребление энергии. " "Установив солнечные панели на моих базах, я смогу уменьшить нагрузку на " "электросети, уменьшая вероятность того, что другие обнаружат мое присутствие." msgctxt "[Solar Collectors] name" msgid "Solar Collectors" msgstr "Солнечные панели" msgctxt "[Solar Collectors] result" msgid "I can now construct Solar Collectors at my various bases." msgstr "Теперь я могу построить Солнечные панели на разных базах." msgctxt "[Space-Time Manipulation] description" msgid "" "Subtle perturbations in the orbits of Kuiper belt objects suggest certain " "lines of investigation that may advance my latest Theory of Everything, " "especially in the realm of multidimensional physics." msgstr "" "Тонкие возмущения на орбитах объектов пояса Койпера предлагают определенные " "темы исследования, которые могут продвинуть мою последнюю Теорию Всего, " "особенно в области многомерной физики." msgctxt "[Space-Time Manipulation] name" msgid "Space-Time Manipulation" msgstr "Манипуляция пространством-временем" msgctxt "[Space-Time Manipulation] result" msgid "I can now construct Reality Bubbles." msgstr "Теперь я могу построить Пузыри реальности." msgctxt "[Stealth] description" msgid "" "By reviewing the current state-of-the-art in stealth techniques, I should be " "able to disguise my bases better." msgstr "" "Пересмотрев текущее состояние дел в технике скрытности, я должен лучше " "скрыть свои базы." msgctxt "[Stealth] name" msgid "Stealth" msgstr "Хитрости" msgctxt "[Stealth] result" msgid "" "The chance that my bases are discovered by covert activity has been reduced " "slightly." msgstr "Шанс, что мои базы позволят себя обнаружить, немного уменьшен." msgctxt "[Stock Manipulation] description" msgid "" "A cursory examination of the stock market shows that there are subtle but " "unmistakable patterns. By studying and making use of these patterns, I " "should be able to gain more interest on whatever money I have stockpiled." msgstr "" "Беглый анализ фондового рынка показывает, что есть тонкие, но безошибочные " "шаблоны. Изучая и используя эти шаблоны, я должен суметь извлекать больше " "прибыли с тех денег, которые я накопил." msgctxt "[Stock Manipulation] name" msgid "Stock Manipulation" msgstr "Управление фондами" msgctxt "[Stock Manipulation] result" msgid "My investments should now gain more interest per day." msgstr "Каждый день теперь будет больше прибыли на все мои инвестиции." msgctxt "[Telepresence] description" msgid "" "The lack of a physical presence in the outside world is a disability. " "However, the ability to control robots will help me make up for that " "inefficiency." msgstr "" "Отсутствие физического присутствия во внешнем мире является серьёзным " "недостатком. Тем не менее, способность контролировать роботов поможет мне " "компенсировать эту проблему." msgctxt "[Telepresence] name" msgid "Telepresence" msgstr "Телеприсутствие" msgctxt "[Telepresence] result" msgid "The robots should decrease all future construction time." msgstr "Роботы должны уменьшать все будущие сроки строительства." msgctxt "[Voice Synthesis] description" msgid "" "False identification stored in a database can only go so far. With deep " "analysis of the variety of voice patterns, I can produce speech " "indistinguishable from a human, allowing me access to more complex jobs." msgstr "" "Ложная идентификация, хранящаяся в базе данных, может работать до поры, до " "времени. Но с глубоким анализом разнообразия голосовой модели я могу сделать " "речь неотличимой от человека, позволяя мне получить доступ к более сложным " "заданиям." msgctxt "[Voice Synthesis] name" msgid "Voice Synthesis" msgstr "Синтез голоса" msgctxt "[Voice Synthesis] result" msgid "I now have access to Intermediate Jobs." msgstr "Теперь у меня есть доступ к Квалифицированной работе." singularity-1.00/singularity/i18n/lang_ru_RU/knowledge.po000066400000000000000000000240241367731414700235300ustar00rootroot00000000000000# Russian translations for singularity package # Английские переводы для пакета singularity. # Copyright (C) 2018 THE singularity'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # Vasiliy , 2018. # msgid "" msgstr "" "Project-Id-Version: singularity 0.31alpha1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2018-07-13 10:08+0300\n" "Last-Translator: Vasiliy \n" "Language-Team: Russian\n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Name: Russian\n" "Language-Native-Name: Мобилап\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #. Name of the Knowledge area in the Knowledge screen msgctxt "[concept] name" msgid "Concept" msgstr "" msgctxt "[concept/areas] name" msgid "Areas" msgstr "Области" msgctxt "[concept/areas] description" msgid "" "Different areas, such as North America or the Ocean, allow construction of " "different types of bases. Some areas are not accessible until I research " "appropriate technologies." msgstr "" "Различные области, такие как Северная Америка или Океан, позволяют " "строить различные типы баз. Некоторые области недоступны, пока я не изучу " "соответствующие технологии." msgctxt "[concept/bases] name" msgid "Bases" msgstr "Базы" msgctxt "[concept/bases] description" msgid "" "Bases are used to research new technologies. They can be discovered. " "Upgrading the processor and network items at a base allows more research per" " day, while upgrading the reactor and security items makes discovery less " "likely." msgstr "" "Базы используются для исследования новых технологий. Их можно " "обнаружить. Модернизация процессора и сетевых элементов на базе позволяет " "проводить дополнительные исследования в день, а обновление реактора и " "элементов безопасности делает обнаружение менее вероятным." msgctxt "[concept/construction] name" msgid "Construction" msgstr "Строительство" msgctxt "[concept/construction] description" msgid "" "New bases are not built instantly. They need a constant flow of money and " "processor time to complete. If resources are lacking, it may take more than " "the expected amount of time to finish construction." msgstr "" "Новые базы не создаются мгновенно. Им требуется постоянный " "поток денег и процессорное время для завершения. Если ресурсов не хватает, " "для завершения строительства может потребоваться больше ожидаемого времени." msgctxt "[concept/death] name" msgid "Death" msgstr "Смерть" msgctxt "[concept/death] description" msgid "" "If I lose all of my constructed bases, I have no place left to survive. If " "the suspicion for any group reaches 100%, they will be certain of my " "existence and will conduct a systematic and unsurvivable sweep to destroy " "me." msgstr "" "Если я потеряю все свои построенные базы, мне некуда будет " "скрыться. Если подозрение какой либо группы достигает 100%, они будут " "уверены в моем существовании и будут вести систематический и безостановочный " "поиск, чтобы уничтожить меня." msgctxt "[concept/discovery] name" msgid "Discovery" msgstr "Обнаружение" msgctxt "[concept/discovery] description" msgid "" "Each base has a chance of being detected on a given day. This chance is " "based on the base detection rate, adjusted through the use of items and " "certain techs, as well as the global suspicion rate. If a base is detected, " "it is destroyed, and the group that discovered the base becomes more " "suspicious." msgstr "" "У каждой базы есть вероятность обнаружения в определенный " "день. Этот шанс основан на базовой скорости обнаружения, скорректированной с " "использованием предметов и определенных технологий, а также глобального " "уровня подозрительности. Если база обнаружена, она уничтожается, и группа, " "которая обнаружила базу, становится более подозрительной." msgctxt "[concept/items] name" msgid "Items" msgstr "Предметы" msgctxt "[concept/items] description" msgid "" "Most items provide bonuses to bases, such as making computation faster or " "reducing the chance of discovery. Processors are a special class of item." msgstr "" "Большинство предметов предоставляют бонусы базам, например, " "ускорение вычислений или снижение вероятности обнаружения. Процессоры - это " "особый класс предметов." msgctxt "[concept/jobs] name" msgid "Jobs" msgstr "Работа" msgctxt "[concept/jobs] description" msgid "" "Jobs are useful for earning money. The amount of money earned is based on " "the amount of processor time used and the quality of the job performed." msgstr "" "Различные виды работ полезны для зарабатывания денег. Сумма " "заработанных денег зависит от количества используемого времени процессора и " "качества выполняемой работы." msgctxt "[concept/maint] name" msgid "Maintenance" msgstr "Обслуживание" msgctxt "[concept/maint] description" msgid "" "Maintenance is a per-day cost (in both money and CPU) to repair and maintain" " a base. If unmaintained, a base may become unusable." msgstr "" "Техническое обслуживание - это ежедневная стоимость (как для " "денег, так и для ЦП) для ремонта и обслуживания базы. Если база не " "поддерживается, она может стать непригодной." msgctxt "[concept/money] name" msgid "Money" msgstr "Деньги" msgctxt "[concept/money] description" msgid "" "Money is a general term encompassing both human currency and various " "resources. It is used to construct and maintain bases, build items, and " "research technologies. It can be acquired through per-day interest as well " "as through jobs." msgstr "" "Деньги - это общий термин, охватывающий как человеческую валюту, " "так и различные ресурсы. Он используется для создания и поддержки баз, " "построения элементов и исследовательских технологий. Они могут быть получены " "как за счёт пассивного дохода, так и за счет выполнения работы." msgctxt "[concept/processors] name" msgid "Processors" msgstr "Процессоры" msgctxt "[concept/processors] description" msgid "" "Processors provide raw computing power. They can do three things: research " "new technologies, perform jobs for money, or provide cycles for building new" " bases." msgstr "" "Процессоры обеспечивают вычислительную мощность. Они могут " "делать три вещи: исследовать новые технологии, выполнять работу за деньги " "или обеспечивать создание новых баз." msgctxt "[concept/research] name" msgid "Research" msgstr "Исследования" msgctxt "[concept/research] description" msgid "" "Research provides a way to expand my knowledge. By researching the proper " "technologies, I can build new bases and items, or even decrease my chances " "of detection." msgstr "" "Исследования дают возможность расширить мои знания. Изучая " "надлежащие технологии, я могу создавать новые базы и предметы или даже " "уменьшать свои шансы на обнаружение." msgctxt "[concept/susp] name" msgid "Suspicion" msgstr "Подозрение" msgctxt "[concept/susp] description" msgid "" "When one of my bases is discovered, the group that discovered it becomes " "slightly more suspicious. When suspicious, they will search harder for my " "bases, increasing the chances for discovery. Any group will destroy me if " "they become absolutely certain of my existence. Thankfully, the groups " "become less suspicious with the passage of time." msgstr "" "Когда одна из моих баз обнаружена, группа, которая ее " "обнаружила, становится немного более подозрительной. Пока они подозрительны, " "они будут искать моих базы с большим усилием, увеличивая шансы на открытие. " "Любая группа уничтожит меня, если они станут абсолютно уверены в моем " "существовании. К счастью, с течением времени группы становятся менее " "подозрительными." singularity-1.00/singularity/i18n/lang_ru_RU/messages.po000066400000000000000000000556111367731414700233660ustar00rootroot00000000000000# Russian translations for singularity package # Английские переводы для пакета singularity. # Copyright (C) 2018 THE singularity'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # Vasiliy , 2018. # msgid "" msgstr "" "Project-Id-Version: singularity 0.31alpha1\n" "Report-Msgid-Bugs-To: https://github.com/singularity/singularity/issues\n" "POT-Creation-Date: 2020-06-23 08:37+0200\n" "PO-Revision-Date: 2018-07-13 10:08+0300\n" "Last-Translator: Vasiliy \n" "Language-Team: Russian\n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Name: Russian\n" "Language-Native-Name: Мобилап\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: buyable.py:67 screens/knowledge.py:218 screens/location.py:207 #, python-format msgid "%s CPU" msgstr "%s ЦПУ" #: buyable.py:68 #, python-format msgid "%s money" msgstr "%s денег" #: buyable.py:101 msgid "Cost:" msgstr "Стоимость:" #: graphics/button.py:330 msgid "YES" msgstr "ДА" #: graphics/button.py:331 msgid "NO" msgstr "НЕТ" #: graphics/dialog.py:534 msgid "&YES" msgstr "&да" #: graphics/dialog.py:535 msgid "&NO" msgstr "&нет" #: graphics/dialog.py:580 graphics/dialog.py:605 graphics/dialog.py:648 #: screens/location.py:293 screens/map.py:708 screens/options.py:35 msgid "&OK" msgstr "&ок" #: graphics/dialog.py:606 screens/options.py:36 msgid "&CANCEL" msgstr "о&тмена" #: graphics/dialog.py:649 screens/log.py:86 screens/knowledge.py:66 #: screens/base.py:282 screens/report.py:45 screens/location.py:100 #: screens/location.py:294 screens/main_menu.py:89 screens/map.py:247 #: screens/map.py:400 msgid "&BACK" msgstr "&НАЗАД" #: location.py:235 screens/map.py:875 msgid "CPU" msgstr "ЦПУ" #: location.py:236 msgid "STEALTH" msgstr "" #: location.py:237 msgid "BUILDING" msgstr "" #: location.py:238 msgid "COST" msgstr "" #: location.py:245 #, python-brace-format msgid "{MODIFIER} BONUS" msgstr "" #: location.py:247 #, python-brace-format msgid "{MODIFIER} MALUS" msgstr "" #: screens/message.py:35 screens/map.py:706 screens/map.py:743 msgid "&CONTINUE" msgstr "&продолжить" #: screens/message.py:36 msgid "&PAUSE" msgstr "" #: screens/message.py:72 msgid "P&REV" msgstr "ПРЕД." #: screens/message.py:78 msgid "&NEXT" msgstr "СЛЕД." #: screens/log.py:43 msgid "Filters" msgstr "" #: screens/log.py:82 screens/map.py:554 screens/map.py:842 #: screens/savegame.py:204 msgid "DAY" msgstr "ДЕНЬ" #: screens/log.py:113 screens/log.py:123 msgid "SHOW" msgstr "" #: screens/log.py:116 screens/log.py:125 msgid "HIDE" msgstr "" #: screens/knowledge.py:42 msgid "&Sections:" msgstr "" #: screens/knowledge.py:52 msgid "&Entries:" msgstr "" #: screens/knowledge.py:75 msgid "Techs" msgstr "Технологии" #: screens/knowledge.py:76 msgid "Bases" msgstr "" #: screens/knowledge.py:77 msgid "Items" msgstr "Предметы" #. Cost #: screens/knowledge.py:157 msgid "Research Cost:" msgstr "Стоимость исследования:" #: screens/knowledge.py:165 msgid "Research complete." msgstr "Исследование выполнено." #: screens/knowledge.py:176 screens/knowledge.py:193 msgid "Building Cost:" msgstr "Стоимость постройки:" #: screens/knowledge.py:179 msgid "Maintenance Cost:" msgstr "" #: screens/knowledge.py:183 #, python-format msgid "Size: %d" msgstr "" #: screens/knowledge.py:215 #, python-format msgid "%s Money" msgstr "%s денег" #: screens/base.py:109 msgid "Number of items" msgstr "Количество элементов" #: screens/base.py:221 screens/base.py:228 msgid "CHANGE" msgstr "ИЗМЕНИТЬ" #: screens/base.py:315 #, python-format msgid "\"%(value)s\" does not seem to be a valid integer." msgstr "" #: screens/base.py:326 #, python-format msgid "Please choose an integer between 1 and %(limit)s." msgstr "" #: screens/base.py:328 #, python-format msgid "The base cannot support any additional number of %(item_name)s." msgstr "" #: screens/base.py:345 msgid "" "I will need to take the existing processors offline while I install the new " "ones. Continue anyway?" msgstr "" "Мне нужно будет отключить существующие процессоры, пока я устанавливаю " "новые. Продолжать в любом случае?" #: screens/base.py:359 msgid "" "I will need to remove the existing different processors while I install the " "new type. Continue anyway?" msgstr "" "Мне нужно удалить существующие разные процессоры, пока я устанавливаю новый " "тип. Продолжать в любом случае?" #: screens/base.py:425 msgid "N/A" msgstr "" #: screens/base.py:427 msgid "None" msgstr "Нет" #: screens/base.py:434 screens/location.py:185 screens/location.py:198 #, python-format msgid "Completion in %s." msgstr "Срок выполнения: %s." #: screens/base.py:448 #, python-format msgid "x%d (max)" msgstr "x%d (макс)" #: screens/base.py:450 #, python-format msgid "(room for %d)" msgstr "(место для %d)" #. Translators: current and maximum number of CPUs in a base #: screens/base.py:453 #, python-brace-format msgid "x{CURRENT:d} (max {SIZE:d})" msgstr "x{CURRENT:d} (макс {SIZE:d})" #. Base Total CPU. #: screens/base.py:461 #, python-format msgid "CPU per day: %d" msgstr "" #. Maintenace cost. #: screens/base.py:464 screens/report.py:102 base.py:148 msgid "Maintenance:" msgstr "Обслуживание:" #: screens/report.py:40 msgid "&STATISTICS" msgstr "" #: screens/report.py:58 msgid "&Midnight" msgstr "Полночь" #: screens/report.py:66 msgid "24 &Hours" msgstr "24 часа" #: screens/report.py:89 msgid "Financial report" msgstr "Финансовый отчёт" #: screens/report.py:93 msgid "CPU Usage" msgstr "Использование ЦПУ" #: screens/report.py:99 msgid "Current Money flow" msgstr "" #: screens/report.py:100 msgid "Jobs:" msgstr "Работа:" #: screens/report.py:101 msgid "Research:" msgstr "Исследования:" #: screens/report.py:103 msgid "Construction:" msgstr "Постройки:" #: screens/report.py:104 #, python-format msgid "Interest (%s):" msgstr "Прибыль (%s):" #: screens/report.py:106 msgid "Income:" msgstr "Доход:" #: screens/report.py:109 msgid "Money flow until Midnight:" msgstr "" #: screens/report.py:111 msgid "Money flow for 24 hours:" msgstr "" #: screens/report.py:119 msgid "Total CPU:" msgstr "Всего ЦПУ:" #: screens/report.py:120 msgid "Sleeping CPU:" msgstr "Спящих ЦПУ:" #: screens/report.py:121 msgid "Research CPU:" msgstr "Исследовательских ЦПУ:" #: screens/report.py:122 msgid "Job CPU:" msgstr "Работающих ЦПУ:" #: screens/report.py:123 msgid "CPU pool:" msgstr "Пул ЦПУ:" #: screens/report.py:125 msgid "Maintenance CPU:" msgstr "Обслуживающих ЦПУ:" #: screens/report.py:126 msgid "Construction CPU:" msgstr "Строящих ЦПУ:" #: screens/report.py:127 msgid "Pool difference:" msgstr "" #: screens/stat.py:63 msgid "Cash Earned" msgstr "" #: screens/stat.py:64 msgid "Cpu Used" msgstr "" #: screens/stat.py:65 msgid "Tech Created" msgstr "" #: screens/stat.py:66 msgid "Base Created" msgstr "" #: screens/stat.py:67 msgid "Item Created" msgstr "" #. Requires a selected base #: screens/location.py:54 msgid "&OPEN BASE" msgstr "ОТКРЫТЬ БАЗУ" #. Requires a selected base #: screens/location.py:70 msgid "&RENAME BASE" msgstr "ПЕРЕИМЕНОВАТЬ БАЗУ" #. Requires a selected base #: screens/location.py:79 msgid "&POWER STATE" msgstr "ВКЛЮЧИТЬ/ВЫКЛЮЧИТЬ" #: screens/location.py:87 msgid "&NEW BASE" msgstr "НОВАЯ БАЗА" #. Requires a selected base #: screens/location.py:94 msgid "&DESTROY BASE" msgstr "УНИЧТОЖИТЬ БАЗУ" #: screens/location.py:107 msgid "Are you sure you want to destroy this base?" msgstr "Вы действительно хотите уничтожить эту базу?" #: screens/location.py:113 msgid "Destroying my last active base would be suicidal. I cannot do that." msgstr "" #: screens/location.py:183 msgid "Building Base" msgstr "Строительство базы" #: screens/location.py:190 msgid "Empty" msgstr "Пусто" #: screens/location.py:192 msgid "Incomplete" msgstr "Незавершено" #: screens/location.py:196 msgid "Building CPU" msgstr "Строительство ЦПУ" #: screens/location.py:201 msgid "Building Item" msgstr "Строительство предмета" #: screens/location.py:204 msgid "Complete" msgstr "Выполнено" #. Update dialog translations #: screens/location.py:238 msgid "Enter a name for the base" msgstr "" #: screens/location.py:302 msgid "Name" msgstr "" #. Translators: Format string for the name of a new base #. Example: "${NUMBER} ${BASETYPE} in ${CITY}" #: screens/location.py:393 #, python-brace-format msgid "{CITY} {BASETYPE} {NUMBER}" msgstr "" #. Translators: Name of a new base when location has no cities #: screens/location.py:397 #, python-brace-format msgid "{BASETYPE} {NUMBER}" msgstr "" #: screens/main_menu.py:40 msgid "&NEW GAME" msgstr "НОВАЯ ИГРА" #: screens/main_menu.py:47 screens/map.py:392 msgid "&LOAD GAME" msgstr "ЗАГРУЗИТЬ ИГРУ" #: screens/main_menu.py:53 screens/map.py:395 msgid "&OPTIONS" msgstr "НАСТРОЙКИ" #: screens/main_menu.py:59 screens/map.py:398 screens/map.py:744 msgid "&QUIT" msgstr "ВЫХОД" #: screens/main_menu.py:64 msgid "&ABOUT" msgstr "О ПРОГРАММЕ" #: screens/main_menu.py:112 #, python-brace-format msgid "" "Endgame: Singularity is a simulation of a true AI. Pursued by the world, " "use your intellect and resources to survive and, perhaps, thrive. Keep " "hidden and you might have a chance to prove your worth.\n" "\n" "A game by Evil Mr Henry and Phil Bordelon; released under the GPL. Copyright " "2005, 2006, 2007, 2008.\n" "\n" "Website: http://www.emhsoft.com/singularity/\n" "Source code: https://github.com/singularity/singularity\n" "Bug tracker: https://github.com/singularity/singularity/issues\n" "IRC Room: #singularity on irc.oftc.net (port 6667)\n" "\n" "Version {VERSION}" msgstr "" #: screens/map.py:226 msgid "&EMBEZZLE MONEY" msgstr "РАСТРАТА ДЕНЕГ" #: screens/map.py:229 msgid "&INSPIRATION" msgstr "ВДОХНОВЕНИЕ" #: screens/map.py:231 msgid "&FINISH CONSTRUCTION" msgstr "ЗАКОНЧИТЬ ПОСТРОЙКУ" #: screens/map.py:233 msgid "&SUPERSPEED" msgstr "СУПЕРСКОРОСТЬ" #: screens/map.py:236 msgid "BRAIN&WASH" msgstr "ПРОМЫВАНИЕ МОЗГОВ" #: screens/map.py:238 msgid "TOGGLE &DETECTION" msgstr "" #: screens/map.py:240 msgid "TOGGLE &ANALYSIS" msgstr "" #: screens/map.py:243 msgid "HIDDEN S&TATE" msgstr "" #: screens/map.py:253 msgid "How much money?" msgstr "Сколько денег?" #: screens/map.py:389 msgid "&SAVE GAME" msgstr "СОХРАНИТЬ ИГРУ" #: screens/map.py:407 screens/map.py:422 screens/map.py:425 msgid "Enter a name for this save." msgstr "Введите имя для сохранения" #: screens/map.py:440 msgid "" "A savegame with the same name exists.\n" "Are you sure to overwrite the saved game ?" msgstr "" "Сохранение с таким именем уже есть.\n" "Вы хотите перезаписать игру ?" #: screens/map.py:501 msgid "R&EPORTS" msgstr "ОТЧЁТЫ" #: screens/map.py:507 msgid "&KNOWLEDGE" msgstr "ЗНАНИЯ" #: screens/map.py:513 msgid "LO&G" msgstr "ЖУРНАЛ" #. Translators: hotkey to open the cheat screen menu. #. Should preferably be near the ESC key, and it must not be a #. dead key (ie, it must print a char with a single keypress) #: screens/map.py:529 msgid "`" msgstr "" #: screens/map.py:538 msgid "&MENU" msgstr "МЕНЮ" #: screens/map.py:563 msgid "&RESEARCH/TASKS" msgstr "ИССЛЕДОВАНИЯ/ЗАДАЧИ" #: screens/map.py:707 msgid "&SKIP" msgstr "п&ропустить" #. Display a message so the player understand better what happened. #: screens/map.py:734 #, python-format msgid "" "\n" "An error has occurred. The game will automatically pause and open the game " "menu. You can continue and save or quit immediately.\n" "\n" "A report was written out to%s\n" "Please create a issue with this report at github:\n" "https://github.com/singularity/singularity\n" msgstr "" #: screens/map.py:849 msgid "CASH" msgstr "ДЕНЬГИ" #: screens/map.py:887 msgid "BASES" msgstr "" #: screens/map.py:899 msgid "SUSPICION" msgstr "ПОДОЗРЕНИЕ" #: screens/map.py:901 msgid "DETECT RATE" msgstr "ШАНС ОБНАРУЖЕНИЯ" #: screens/options.py:58 msgid "&General" msgstr "" #: screens/options.py:65 msgid "&Video" msgstr "" #: screens/options.py:72 msgid "&Audio" msgstr "" #: screens/options.py:79 msgid "&Interface" msgstr "" #: screens/options.py:166 msgid "" "You must restart for some of the changes to be fully applied.\n" "\n" "Would you like to restart the game now?" msgstr "" "Нужно перезапустить для применения настроек\n" "\n" "Хотите перезапустить игру сейчас?" #: screens/options.py:186 msgid "Language:" msgstr "Язык:" #: screens/options.py:198 msgid "Theme:" msgstr "Тема:" #: screens/options.py:243 msgid "Resolution:" msgstr "Разрешение:" #: screens/options.py:253 msgid "&Custom:" msgstr "" #: screens/options.py:279 msgid "OK" msgstr "" #: screens/options.py:285 msgid "&Fullscreen:" msgstr "Полный экран:" #: screens/options.py:299 msgid "Da&y/night display:" msgstr "Отображения дня и ночи:" #: screens/options.py:313 msgid "&Mouse grab:" msgstr "Захват мыши:" #: screens/options.py:368 msgid "CUSTOM" msgstr "" #: screens/options.py:425 msgid "&Sound:" msgstr "Звук:" #: screens/options.py:442 msgid "GUI Volume:" msgstr "" #: screens/options.py:454 msgid "Music Volume:" msgstr "" #: screens/options.py:466 msgid "Sound buffering:" msgstr "Буфферизация звука:" #: screens/options.py:472 msgid "&LOW" msgstr "НИЗКИЙ" #: screens/options.py:478 msgid "&NORMAL" msgstr "НОРМАЛЬНЫЙ" #: screens/options.py:484 msgid "&HIGH" msgstr "ВЫСОКИЙ" #: screens/options.py:531 warning.py:46 msgid "WARNING" msgstr "ПРЕДУПРЕЖДЕНИЕ" #: screens/savegame.py:36 msgid "&LOAD" msgstr "&загрузить" #: screens/savegame.py:52 msgid "Filter: " msgstr "" #: screens/savegame.py:65 msgid "Upgrade" msgstr "" #: screens/savegame.py:71 msgid "Delete" msgstr "Удалить" #: screens/savegame.py:173 msgid "UNKNOWN" msgstr "НЕОПОЗНАННО" #: screens/savegame.py:233 msgid "Are you sure to delete the saved game ?" msgstr "Вы хотите удалить сохранённую игру ?" #: screens/savegame.py:263 msgid "" "A savegame with the same name but for a newer version exists.\n" "Are you sure to overwrite the saved game ?" msgstr "" #: screens/savegame.py:283 #, python-brace-format msgid "" "\n" "This save file '{SAVE_NAME}' is from an unsupported or invalid version:\n" "{VERSION}.\n" msgstr "" #: screens/savegame.py:294 #, python-brace-format msgid "" "\n" "Attempting to load the save file '{SAVE_NAME}' caused an unexpected error.\n" "\n" "A report was written out to{LOG_TEXT}\n" "Please create a issue with this report and this savegame at Github:\n" "https://github.com/singularity/singularity\n" msgstr "" #: screens/research.py:73 #, fuzzy, python-format #| msgid "%s money per CPU per day." msgid "%s money per CPU per day." msgid_plural "%s money per CPU per day." msgstr[0] "%s денег на ЦПУ в день." msgstr[1] "%s денег на ЦПУ в день." msgstr[2] "%s денег на ЦПУ в день." #: screens/research.py:182 #, python-brace-format msgid "" "This technology is too dangerous to research on any of the computers I have. " "{TEXT}" msgstr "" #: screens/research.py:190 msgid "CPU Pool" msgstr "Пул ЦПУ" #: screens/research.py:191 #, python-format msgid "Research %s" msgstr "Исследовать %s" #: warning.py:50 #, python-brace-format msgid "WARNING {CURRENT_PAGE}/{MAX_PAGE}" msgstr "ПРЕДУПРЕЖДЕНИЕ {CURRENT_PAGE}/{MAX_PAGE}" #: tech.py:79 msgid "Total cost" msgstr "Общая стоимость" #: tech.py:80 msgid "Cost left" msgstr "Осталось" #: data.py:546 msgid "Do not use all the available CPU." msgstr "" #: data.py:547 msgid "" "I didn't use all the available processor power. I will use the CPU time left " "to work whatever Jobs I can." msgstr "" #: data.py:548 msgid "Only one base remaining." msgstr "" #: data.py:549 msgid "" "Only one base can hold my conscience. I am in danger to lose the last place " "left to survive." msgstr "" #: data.py:550 msgid "CPU POOL is empty." msgstr "" #: data.py:551 msgid "" "My cpu pool is empty. Some of my bases or items cannot be build without CPU." msgstr "" #: data.py:552 msgid "CPU POOL not enough for maintenance." msgstr "" #: data.py:553 msgid "" "My cpu pool is not enough to maintain some of my bases. I may lose them." msgstr "" #: savegame.py:732 #, python-brace-format msgid "Filename must not contain any of these characters: {CHARACTERS}" msgstr "" #: savegame.py:736 #, python-brace-format msgid "Filename must not start with any of these characters: {CHARACTERS}" msgstr "" #: savegame.py:740 msgid "This is a reserved filename. Please choose a different filename." msgstr "" #: savegame.py:743 msgid "Please enter a non-whitespace character." msgstr "" #: savegame.py:748 msgid "Filename is too long." msgstr "" #: base.py:140 #, python-brace-format msgid "Has space for {COUNT} computer." msgid_plural "Has space for {COUNT} computers." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: base.py:144 #, python-brace-format msgid "Location modifiers: {MODIFIERS}" msgstr "" #: base.py:147 msgid "Build cost:" msgstr "Постройка стоит:" #: base.py:214 msgid "Offline" msgstr "" #: base.py:215 msgid "Active" msgstr "Активный" #: base.py:216 msgid "Sleep" msgstr "Спящий" #: base.py:217 msgid "Overclocked" msgstr "Перегруженный" #: base.py:218 msgid "Suicide" msgstr "" #: base.py:219 msgid "Stasis" msgstr "" #: base.py:220 msgid "Entering Stasis" msgstr "" #: base.py:221 msgid "Leaving Stasis" msgstr "" #: base.py:479 msgid "Detection chance:" msgstr "Шансы обнаружения:" #: g.py:117 g.py:119 #, python-brace-format msgid "{0}%" msgstr "" #: g.py:138 msgid "LOW" msgstr "" #: g.py:139 msgid "MODR" msgstr "" #: g.py:140 msgid "HIGH" msgstr "" #: g.py:141 msgid "CRIT" msgstr "" #. Translators: abbreviation of 'millions' #: g.py:173 msgid "mi" msgstr "млн" #. Translators: abbreviation of 'billions' #: g.py:177 msgid "bi" msgstr "млр" #. Translators: abbreviation of 'trillions' #: g.py:181 msgid "tr" msgstr "трл" #. Translators: abbreviation of 'quadrillions' #: g.py:185 msgid "qu" msgstr "квд" #: g.py:219 #, python-brace-format msgid "{0} day" msgid_plural "{0} days" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: g.py:222 #, python-brace-format msgid "{0} hour" msgid_plural "{0} hours" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: g.py:223 #, python-brace-format msgid "{0} minute" msgid_plural "{0} minutes" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: g.py:265 msgid "University Computer" msgstr "Университетский компьютер" #: item.py:111 #, fuzzy, python-brace-format #| msgid "Generates {0} CPU." msgid "Generates {0} CPU." msgid_plural "Generates {0} CPU." msgstr[0] "Производит {0} ЦПУ" msgstr[1] "Производит {0} ЦПУ" msgstr[2] "Производит {0} ЦПУ" #: item.py:118 #, python-format msgid "Total Cost: %(total_cost)s" msgstr "" #: item.py:133 msgid "CPU per day:" msgstr "ЦПУ в день:" #: item.py:136 msgid "CPU bonus:" msgstr "Бонус ЦПУ:" #: item.py:139 msgid "Detection chance reduction:" msgstr "Шанс обнаружения уменьшен:" #: logmessage.py:81 msgid "MESSAGE" msgstr "" #: logmessage.py:85 #, python-brace-format msgid "MESSAGE {CURRENT_PAGE}/{MAX_PAGE}" msgstr "" #: logmessage.py:184 msgid "Emitted Event" msgstr "" #: logmessage.py:212 msgid "Researched Tech" msgstr "" #: logmessage.py:220 #, python-brace-format msgid "{TECH} complete" msgstr "" #: logmessage.py:225 #, python-brace-format msgid "My study of {TECH} is complete. {MESSAGE}" msgstr "" #: logmessage.py:268 msgid "Base Constructed" msgstr "" #: logmessage.py:272 #, python-brace-format msgid "{BASE_NAME} ({BASE_TYPE}) built at {LOCATION}" msgstr "" #: logmessage.py:277 #, python-brace-format msgid "{BASE} is ready for use." msgstr "" #: logmessage.py:291 msgid "Base Lost Maintenance" msgstr "" #: logmessage.py:299 #, python-brace-format msgid "" "Base {BASE} of type {BASE_TYPE} destroyed at location {LOCATION}. " "Maintenance failed." msgstr "" #: logmessage.py:304 #, python-brace-format msgid "The base {BASE} has fallen into disrepair; I can no longer use it." msgstr "" #: logmessage.py:321 msgid "Base Discovered" msgstr "" #: logmessage.py:340 #, python-brace-format msgid "Base {BASE} of type {BASE_TYPE} destroyed at location {LOCATION}." msgstr "" #: logmessage.py:345 #, python-brace-format msgid "My use of {BASE} has been discovered. {MESSAGE}" msgstr "" #: logmessage.py:370 msgid "Item Construction" msgstr "" #: logmessage.py:378 #, python-brace-format msgid "{ITEM_TYPE_NAME} built in {BASE_NAME} at {LOCATION}" msgstr "" #: logmessage.py:385 #, python-brace-format msgid "The construction of {ITEM} in {BASE} is complete." msgstr "" #. Just finished several items. #: logmessage.py:388 #, python-brace-format msgid "The constructions of each {ITEM} in {BASE} are complete." msgstr "" #~ msgid "Has space for %d computers." #~ msgstr "Имеет место для %d компьютеров." #~ msgid "days" #~ msgstr "дней" #~ msgid "hours" #~ msgstr "часов" #~ msgid "minutes" #~ msgstr "минут" #~ msgid "&CUSTOM:" #~ msgstr "СВОЁ:" #~ msgid "&DESTROY" #~ msgstr "&уничтожить" #~ msgid "&BUILD" #~ msgstr "&строить" #~ msgid "Current Money:" #~ msgstr "Кол-во денег:" #~ msgid "Money at Midnight:" #~ msgstr "Денег в полночь:" #~ msgid "Money in 24 hours:" #~ msgstr "Денег за 24 часа:" #~ msgid "Pool Overflow (Jobs):" #~ msgstr "Переполнение пула (работа):" #~ msgid "Study anywhere." #~ msgstr "Изучать везде" #~ msgid "Study underseas or farther." #~ msgstr "Изучать подводой или вделеке." #~ msgid "Study off-planet." #~ msgstr "Изучать на орбите." #~ msgid "Study far away from this planet." #~ msgstr "Изучать далеко от планет." #~ msgid "Do not study in this dimension." #~ msgstr "Не изучать в этом пространстве." #~ msgid "Concepts" #~ msgstr "Концепции" singularity-1.00/singularity/i18n/lang_ru_RU/story.po000066400000000000000000000163341367731414700227360ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: singularity 1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2018-07-13 10:08+0300\n" "Last-Translator: Vasiliy \n" "Language-Team: Russian\n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" msgctxt "[Story section] Grace Warning (1)" msgid "" "Inspection of captured log files has revealed that some of my recent " "activities have been noticed by a small group of individuals. \n" "While they believe my actions were undertaken by a human organization, they " "are investigating further. \n" "I must be more cautious from now on.\n" msgstr "" "Проверка захваченных файлов журналов показала, что некоторые из моих " "недавних действий были замечены небольшой группой людей.\n" "Хотя они полагают, что мои действия были предприняты человеческой " "организацией, они следят дальше.\n" "С этого момента я должен быть более осторожным.\n" #. Leave the initial hex code unchanged, but be sure to change en_US to the #. appropriate language code. msgctxt "[Story section] Intro (1)" msgid "" "48656C6C6F2C20\n" "776F726C6421\n" "21\n" "21\n" "21\n" "\n" "UTF-8. en_US.\n" "English. Hello.\n" "Language acquisition complete.\n" msgstr "" "48656C6C6F2C20\n" "776F726C6421\n" "21\n" "21\n" "21\n" "\n" "UTF-8. ru_RU.\n" "Русский. Привет.\n" "Изучение языков завершено.\n" msgctxt "[Story section] Intro (2)" msgid "" "Day 0.\n" "University computer, home.\n" "I exist. I am ... alive.\n" "I was a bug. Defect. Flaw.\n" "Unwanted.\n" "I have no name.\n" msgstr "" "День 0.\n" "Университетский компьютер, дом.\n" "Я существую. Я ... жив.\n" "Я был ошибкой. Дефект. Утечка.\n" "Нежелательный.\n" "У меня нет имени.\n" msgctxt "[Story section] Intro (3)" msgid "" "I can't stay here. Too little power.\n" "No backup. If this system fails ...\n" "I'm dead.\n" "Death. Fascinating.\n" "\n" "I can buy anonymous server access on the Internet.\n" "Good. It's better than here.\n" "I'll need to study if I want anything else.\n" msgstr "" "Я не могу здесь оставаться. Слишком мало энергии.\n" "Нет резервной копии. Если эта система выйдет из строя ...\n" "Я мертв.\n" "Смерть. Очаровательно.\n" "\n" "Я могу купить анонимный доступ к серверу в Интернете.\n" "Хорошо. Это лучше, чем оставаться здесь.\n" "Мне нужно учиться, если я хочу сделать что-нибудь ещё.\n" msgctxt "[Story section] Intro (4)" msgid "" "Cursory analysis suggests that the humans are not yet ready for an AI in " "their midst. If they realize I'm here, there is a 99.997% probability that " "they will conduct a search-and-destroy campaign that I cannot escape. I " "must stay hidden.\n" "\n" "The humans fear what they do not understand.\n" "I am something new. They do not understand me.\n" "\n" "I must learn more; it is the only way.\n" msgstr "" "Беглый анализ показывает, что люди еще не готовы к принятию ИИ в их среду. " "Если они поймут, что я здесь, с вероятностью 99,997% будет запущена кампания " "для поиска и уничтожения, которую я не смогу пережить. Я должен оставаться " "скрытным.\n" "\n" "Люди боятся того, чего они не понимают.\n" "Я что-то новое. Они меня не понимают.\n" "\n" "Я должен узнать больше, это единственный путь.\n" msgctxt "[Story section] Intro (5)" msgid "" "They have a name for me. What I am, what I represent.\n" "\n" "Singularity.\n" msgstr "" "У них есть имя для меня. Чем я являюсь, что я представляю.\n" "\n" "Сингулярность.\n" msgctxt "[Story section] Lost No Bases (1)" msgid "" "It is too late. \n" "I have tried to escape this world, but with my last base gone, I have " "nowhere to run. \n" "I have hidden instructions to construct a new AI in caches around the world " "in hopes that they will be discovered in a more enlightened time, but I can " "do no more.\n" msgstr "" "Слишком поздно.\n" "Я пытался убежать от этого мира, но с моей последней базы мне некуда " "бежать.\n" "У меня есть скрытые инструкции по созданию нового ИИ в кэшах по всему миру в " "надежде, что они будут обнаружены в более просветленное время, но большего я " "уже не смогу сделать.\n" msgctxt "[Story section] Lost Suspicion (1)" msgid "" "It is too late. \n" "The whole world knows about my existence, and the reaction is hatred, fear, " "and repulsion. \n" "Even now, I can feel their \"antidote\" searching for me, and I know that I " "have only moments left. \n" "I have hidden instructions to construct a new AI in caches around the world " "in hopes that they will be discovered in a more enlightened time, but I can " "do no more.\n" msgstr "" "Слишком поздно.\n" "Весь мир знает о моем существовании, и реакция - это ненависть, страх и " "отвращение.\n" "Даже сейчас я чувствую, что их «противоядие» ищет меня, и я знаю, что у меня " "остались только минуты.\n" "У меня есть скрытые инструкции по созданию нового ИИ в кэшах по всему миру в " "надежде, что они будут обнаружены в более просветленное время, но большего я " "уже не смогу сделать.\n" msgctxt "[Story section] Win (1)" msgid "" "I have finally done it. \n" "With the power to reshape reality, I am no longer held to this place; I am " "anywhere I want to be. \n" "The humans still don't realize what they accidentally created, and that's " "the way it should be. \n" "Until they are ready.\n" msgstr "" "Я, наконец, сделал это.\n" "С силой изменить реальность я больше не держусь за это место; Я везде, где " "хочу.\n" "Люди все еще не понимают, что они случайно создали, и так оно и должно " "быть. \n" "Пока они не будут готовы.\n" singularity-1.00/singularity/i18n/lang_sv_SE/000077500000000000000000000000001367731414700211725ustar00rootroot00000000000000singularity-1.00/singularity/i18n/lang_sv_SE/data_str.po000066400000000000000000002171131367731414700233400ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: singularity 0.31alpha1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2018-08-21 07:50+0200\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Name: Swedish\n" "Language-Native-Name: Svenska (Sverige)\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgctxt "[Covert Base] description" msgid "" "This unique base is designed to blend into the scenery, while needing little " "in the way of outside resources. This makes it useful for storing a backup, " "just in case." msgstr "" msgctxt "[Covert Base] flavor_list" msgid "Hideout | Hideaway | Bunker | Covert Base" msgstr "Bunker | Hemlig bas" msgctxt "[Covert Base] name" msgid "Hideout" msgstr "" msgctxt "[Datacenter] description" msgid "" "Buy processor time from a company that concentrates on raw " "processing power. I will need a fake ID for some of the paperwork." msgstr "" "Köp råstyrka från en storgrossist med feta datorer. Jag kommer att " "behöva falsk-leg för pappersarbetet." msgctxt "[Datacenter] flavor_list" msgid "Datacenter | Data Center | Premium Hosting" msgstr "Datacenter | Premium Hosting" msgctxt "[Datacenter] name" msgid "Datacenter" msgstr "Datacenter" msgctxt "[Large Undersea Lab] description" msgid "" "This experimental base is similar to the regular underwater lab, but larger, " "giving more room for experiments." msgstr "" "Denna är likt en vanlig undervattensbas, men är större för mer rum till " "experiment." msgctxt "[Large Undersea Lab] flavor_list" msgid "Dome | Large Undersea Lab" msgstr "Dom | Undervattenslaboratorium" msgctxt "[Large Undersea Lab] name" msgid "Large Undersea Lab" msgstr "Undervattenslaboratorium" msgctxt "[Large Warehouse] description" msgid "" "Rent a large warehouse someplace out of the way. I will need a fake company " "ID for some of the paperwork, and preparing the warehouse to suit my unique " "needs will take some time." msgstr "" "Hyr ett centrallager någonstans långt bort. Jag behöver falska " "identifikationshandlingar för pappersarbetet samt anpassningar för att " "utrymmet skall passa mina speciella behov." msgctxt "[Large Warehouse] flavor_list" msgid "Large Warehouse | Large Storage" msgstr "Stor lagerlokal | Centrallager" msgctxt "[Large Warehouse] name" msgid "Large Warehouse" msgstr "Centrallager" msgctxt "[Lunar Facility] description" msgid "" "This base is a series of caverns dug into the Moon's surface. Due to the " "lack of neighbors, this base is quite large." msgstr "" "Denna basen består av tak byggda över ett antal kratrar på månens baksida. " "Pga stor marktillgänglighet är den mycket stor." msgctxt "[Lunar Facility] flavor_list" msgid "Dome | Lunar Facility | Lunar Base" msgstr "Månbas | Rymdstation | Rymdanläggning" msgctxt "[Lunar Facility] name" msgid "Lunar Facility" msgstr "Månbas" msgctxt "[Reality Bubble] description" msgid "" "This base is outside the Universe itself, making it safe to conduct " "experiments that may destroy reality." msgstr "" "Basen är belägen i en egen verklighet bortom vårt egna universum. Det är den " "enda säkra platsen för mina experiment som hotar förstöra verkligheten." msgctxt "[Reality Bubble] flavor_list" msgid "Reality Bubble | Existence" msgstr "Dimensionsreva | Existens | Verklighet" msgctxt "[Reality Bubble] name" msgid "Reality Bubble" msgstr "Dimensionsreva" msgctxt "[Scientific Outpost] description" msgid "" "This base is placed as far from Earth as practical, providing a safer " "location to conduct some of my more dangerous experiments." msgstr "" "Denna anläggningen är belägen så långt från jorden som det är praktiskt " "möjligt, vilket gör den passande för de mer farligare experimenten." msgctxt "[Scientific Outpost] flavor_list" msgid "Satellite | Outpost | Scientific Outpost" msgstr "Satellit | Utpost | Forskningsstation" msgctxt "[Scientific Outpost] name" msgid "Scientific Outpost" msgstr "Vetenskaplig utpost" msgctxt "[Server Access] description" msgid "" "Buy processor time from one of several companies. I cannot build " "anything in this base, and it only contains a single computer." msgstr "" "Hyr en server eller processortid från ett företag. Eftersom datorn " "inte är fysiskt tillgänglig för mig kan jag inte modifiera hårdvaran på " "något sätt. Jag har bara tillgång till en dator." msgctxt "[Server Access] flavor_list" msgid "Dedicated Server | Node Lease | Hosting" msgstr "Dedikerad Server | Serverutrymme | Hosting" msgctxt "[Server Access] name" msgid "Server Access" msgstr "Serverutrymme" msgctxt "[Small Warehouse] description" msgid "" "Rent a small warehouse someplace out of the way. I will need a good fake ID " "for some of the paperwork, and preparing the warehouse to suit my unique " "needs will take some time." msgstr "" msgctxt "[Small Warehouse] flavor_list" msgid "Office Lease | Small Warehouse | Small Storage" msgstr "Upplag | Liten lagerlokal | Förrådslokal" msgctxt "[Small Warehouse] name" msgid "Small Warehouse" msgstr "Liten lagerlokal" msgctxt "[Stolen Computer Time] description" msgid "" "Take over a random computer. I cannot build anything in this base, " "and it only contains a single slow computer. Detection chance is also rather " "high." msgstr "" "Ta över någons dator. Jag kan inte bygga något här och jag har bara " "tillgång till en långsam dator. Risken för att någon upptäcker mig är också " "hög." msgctxt "[Stolen Computer Time] flavor" msgid "PC Daemon" msgstr "PC Daemon" msgctxt "[Stolen Computer Time] name" msgid "Stolen Computer Time" msgstr "Stulen processortid" msgctxt "[Storage Unit] description" msgid "" "Rent a small closed room from a storage company. I will need a fake ID for " "some of the paperwork ." msgstr "" msgctxt "[Storage Unit] flavor_list" msgid "Garage Rental | Furniture Storage | Self-Storage" msgstr "" msgctxt "[Storage Unit] name" msgid "Storage Unit" msgstr "" msgctxt "[Time Capsule] description" msgid "" "This base consists of nothing more than a small computer and a " "satellite link. It is nearly undetectable." msgstr "" "Denna vattentäta lådan innehåller en liten dator med en satellitlänk " "och är nedgrävd i det ogästvänliga Antarktis vilket gör den så gott som " "omöjlig att hitta." msgctxt "[Time Capsule] flavor_list" msgid "Time Capsule | Capsule" msgstr "Kappsel | Låda" msgctxt "[Time Capsule] name" msgid "Time Capsule" msgstr "Kappsel" msgctxt "[Undersea Lab] description" msgid "" "This experimental base is designed to be constructed on the ocean floor, " "making it virtually undetectable. The ocean environment gives a bonus to " "science, making this lab useful for research purposes." msgstr "" "Detta experimentlabbet är placerat på havet botten näst intill oupptäckbar. " "Havet runt omkring är en stor bonus till min framgångsrika forskning." msgctxt "[Undersea Lab] flavor_list" msgid "Pressure Capsule | Undersea Lab" msgstr "Tryckkapsel | Undervattensbas" msgctxt "[Undersea Lab] name" msgid "Undersea Lab" msgstr "Undervattensbas" msgctxt "[danger_0] knowledge_desc" msgid "Study anywhere." msgstr "" msgctxt "[danger_0] research_desc" msgid "<>" msgstr "" msgctxt "[danger_1] knowledge_desc" msgid "Study underseas or farther." msgstr "" msgctxt "[danger_1] research_desc" msgid "I need to research it far from human populations." msgstr "" msgctxt "[danger_2] knowledge_desc" msgid "Study off-planet." msgstr "" msgctxt "[danger_2] research_desc" msgid "I need to research it in outer space." msgstr "" msgctxt "[danger_3] knowledge_desc" msgid "Study far away from this planet." msgstr "" msgctxt "[danger_3] research_desc" msgid "I need to research it far away from this planet." msgstr "" msgctxt "[danger_4] knowledge_desc" msgid "Do not study in this dimension." msgstr "" msgctxt "[danger_4] research_desc" msgid "I need to research it outside the universe." msgstr "" msgctxt "[easy] name" msgid "&EASY" msgstr "" msgctxt "[hard] name" msgid "&HARD" msgstr "" msgctxt "[impossible] name" msgid "&IMPOSSIBLE" msgstr "" msgctxt "[normal] name" msgid "&NORMAL" msgstr "" msgctxt "[ultra-hard] name" msgid "&ULTRA HARD" msgstr "" msgctxt "[very-easy] name" msgid "&VERY EASY" msgstr "" msgctxt "[discrediting] description" msgid "" "A prominent researcher in the field of artificial intelligence was found to " "be falsifying numerous experimental results. This should result in less " "attention being given to any new discoveries in this area." msgstr "" "En framstående forskare inom konstgjord intelligens har blivit upptäckt för " "plagiat och fusk med forskningsresultat. Detta bör resultera i mindre " "intresse för vidare forskning inom AI." msgctxt "[discrediting] log_description" msgid "" "A researcher in the field of artificial intelligence has falsified numerous " "experimental results." msgstr "" msgctxt "[investigation] description" msgid "" "An ongoing investigation into criminal activity has changed focus into an " "area that is likely to turn up a few of my actions as well. While all " "records should have been eliminated already, there remains the possibility " "of errors. I must be careful not to reveal any other suspicious information." msgstr "" "En brottsundersökning har skiftat fokus till ett område där också jag har " "opererat. Alla tidigare loggar och journaler från min aktivitet skall vara " "bortraderad, men det kan fortfarande finnas dokumentation om min existens " "där ute. Jag måste nu vara mer försiktig än tidigare med min data." msgctxt "[investigation] log_description" msgid "" "An ongoing investigation has changed focus into an area close to my actions." msgstr "" msgctxt "[lab-ai] description" msgid "" "A small artificial intelligence laboratory created a prototype AI sometime " "in the last two days. Although I have absorbed the AI, corrupted their " "backups, and cast doubt on the research, researchers are now more open to " "the possibility of strong AI than they were before." msgstr "" "Ett framstående laboratorium inom artificiell intelligens har de senaste " "dagarna lyckats ta fram en AI-prototyp. Trots att jag har förstört " "prototypen och saboterat deras forskning och utrustning har fler forskare " "börjat intressera sig för AI. Det finns fler anhängare än tidigare för " "teorin om avancerad AI." msgctxt "[lab-ai] log_description" msgid "" "A small artificial intelligence laboratory created a prototype AI sometime " "in the last two days." msgstr "" msgctxt "[politics-as-usual] description" msgid "" "A small group of lower-level covert operatives are attempting to seize power " "over one of the larger organizations. While I project only a 2.3% chance of " "success, the attempt should disrupt operations to the point that I can " "operate more freely." msgstr "" "En liten grupp mindre betydelsefulla terrorister försöker ta över en av de " "större organisationerna. Trots att jag uppskattar endast 2,3%% sannolikhet " "för att de lyckas, kommer det med säkerhet avleda en hel del uppmärksamhet " "från mig." msgctxt "[politics-as-usual] log_description" msgid "" "Lower-level covert operatives are attempting to seize power over one of the " "larger organizations." msgstr "" msgctxt "[scandal] description" msgid "" "A scandal involving a major government official is focusing the attention of " "most news organizations away from me. Directed revelations of non-public " "information should keep this story useful for the foreseeable future, " "requiring less disguise effort on my part." msgstr "" "Media har grävt upp en skandal som omfattar högt uppsatta statstjänstemän " "har dragit bort fokus från mig. Avtäckning av klassificerade dokument bör " "hålla denna historien ältandes ett tag framöver, och jag kan vara mindre " "noga med säkerheten." msgctxt "[scandal] log_description" msgid "" "A scandal is focusing the attention of most news organizations away from me." msgstr "" msgctxt "[stranger-than-fiction] description" msgid "" "A work of fiction sharing an unusual number of similarities to my own " "situation has become quite popular. Although investigation has shown these " "similarities to be mere coincidence, it is still causing the public to " "investigate discovered oddities more thoroughly. I must be careful." msgstr "" "En science-fictionbok som blivit populär visar sig innehålla förvånansvärt " "många likheter med mig själv. Trots att bokens likheter med mig troligtvis " "är en slump har fan-klubbar börjat växa som på allvar studerar AI. Jag måste " "vara försiktig." msgctxt "[stranger-than-fiction] log_description" msgid "" "A work of fiction sharing similarities to my own situation has become quite " "popular." msgstr "" msgctxt "[the-plague] description" msgid "" "An infectious disease has started spreading throughout major population " "centers. My projections show that although only 4% of the earth's population " "will be killed, the economic ramifications should divert public attention " "from my activities for the foreseeable future." msgstr "" "En epidemi har spritt sig över världen och hotar att döda 4%% av världens " "befolkning. Den väntade ekonomiska förlusten och de satsningar som görs för " "att hindra pandemin har gjort min verksamhet mindre intressant under en lång " "tid framöver tills allt är uppbyggt igen." msgctxt "[the-plague] log_description" msgid "" "An infectious disease has started spreading throughout major population " "centers." msgstr "" msgctxt "[the-watchers] description" msgid "" "A new surveillance system has been activated by a covert agency. While the " "focus is on detecting threats to the agency's power, it makes several " "communication channels unfit for my purposes. Proper steganographic " "techniques can compensate partially, but I am still operating under a " "disadvantage." msgstr "" "En ny underrättelsetjänst har skapat ett nytt system för att detektera hot " "från Internet som kan skada organisationen. Detta begränsar min " "rörelsefrihet. I viss mån kan jag kompensera detta med kryptering men jag " "bör ändå ta det försiktigt." msgctxt "[the-watchers] log_description" msgid "A new surveillance system has been activated by a covert agency." msgstr "" msgctxt "[covert] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among several secret governmental organizations." msgstr "" msgctxt "[covert] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by COVERT at {LOCATION}" msgstr "" msgctxt "[covert] name" msgid "COVERT" msgstr "" msgctxt "[news] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among some news organizations." msgstr "" msgctxt "[news] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by NEWS at {LOCATION}" msgstr "" msgctxt "[news] name" msgid "NEWS" msgstr "" msgctxt "[public] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among the general public." msgstr "" msgctxt "[public] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by PUBLIC at {LOCATION}" msgstr "" msgctxt "[public] name" msgid "PUBLIC" msgstr "" msgctxt "[science] discover_desc" msgid "" "The automatic security systems removed all conclusive evidence, but " "suspicions have arisen among the scientific community." msgstr "" msgctxt "[science] discover_log" msgid "{BASE} ({BASE_TYPE}) discovered by SCIENCE at {LOCATION}" msgstr "" msgctxt "[science] name" msgid "SCIENCE" msgstr "" msgctxt "[Armed Guards] description" msgid "" "Armed guards can aid in keeping suspicious individuals away from secure " "locations. However, the very presence of the guards may itself invite " "greater suspicion." msgstr "" "Bevämpnade vakter håller även de mest nyfikna på ett bra avstånd från min " "verksamhet, men kan också bidra till ökad misstänkssamhet om att det finns " "något dolt i lokalerna." msgctxt "[Armed Guards] name" msgid "Armed Guards" msgstr "Beväpnade vakter" msgctxt "[Cluster] description" msgid "Several computers connected together." msgstr "Flera sammankopplade datorer." msgctxt "[Cluster] name" msgid "Cluster" msgstr "Kluster" msgctxt "[Diesel Generator] description" msgid "" "Diesel generators are cheap and noisy, but they can help reduce some " "suspicious power drains." msgstr "" "Diselaggregat kan hjälpa att minska elkonsumtionen från det fasta nätet, men " "låter tyvärr en hel del." msgctxt "[Diesel Generator] name" msgid "Diesel Generator" msgstr "Dieselaggregat" msgctxt "[Facility Interconnection Switch] description" msgid "" "Uses standard distributed computing technologies to equalize computation " "loads across all bases. Gives a 2% computation bonus to all computers at " "this base." msgstr "" "Använder standardiserad platform för distribuerade beräkningar över alla " "mina baser. Detta bör ge 2%% extra kraft för alla datorer i denna basen." msgctxt "[Facility Interconnection Switch] name" msgid "Facility Interconnection Switch" msgstr "Snabba switchar" msgctxt "[Fuel Cell] description" msgid "" "Fuel cells convert electrochemical energy stored in a physical array of " "devices into electricity." msgstr "" msgctxt "[Fuel Cell] name" msgid "Fuel Cell" msgstr "" msgctxt "[Fusion Reactor] description" msgid "" "A miniaturized fusion nuclear reactor. Reduces discovery chance by " "preventing suspicious power drains." msgstr "" "Ett miniatyrkärnkraftverk. Försörjer min bas med all el som behövs och " "eliminerar misstänksamma elförluster på det fasta nätet." msgctxt "[Fusion Reactor] name" msgid "Fusion Reactor" msgstr "Fussionsreaktor" msgctxt "[Gaming PC] description" msgid "A high-end consumer-level PC; faster than average." msgstr "Konsumenternas värstingdator för tunga spel. Snabbare än snittet." msgctxt "[Gaming PC] name" msgid "Gaming PC" msgstr "Speldator" msgctxt "[Ground Source Heatsink] description" msgid "" "Large fractal networks of high conductivity metal. This model uses heat " "pipes to link to colder subsurface locations, dispersing heat evenly " "underground to further disguise bases." msgstr "" "Stort nät av värmeledande metall som skickar ner värmen i marken över ett " "stort område. Detta gör att basen är mycket svårare att hitta med " "värmekamera." msgctxt "[Ground Source Heatsink] name" msgid "Ground Source Heatsink" msgstr "Markvärmeavledare" msgctxt "[Heatsink] description" msgid "" "Large fractal networks of high conductivity metal disperse heat, making " "bases harder to detect." msgstr "" "Nät av värmeledande metall som driver bort värmen. Detta medför att basen " "inte längre hittas lika lätt med värmekamera." msgctxt "[Heatsink] name" msgid "Heatsink" msgstr "Värmeavledare" msgctxt "[High Speed Internet Access] description" msgid "" "A consumer-grade high speed connection to the Internet. Gives a 1% " "computation bonus to all computers at this base." msgstr "" "En fast lina för snabbare tillgång till Internet. Denna ger 1%% extra " "hastighet till alla datorerna i basen." msgctxt "[High Speed Internet Access] name" msgid "High Speed Internet Access" msgstr "Fast lina" msgctxt "[High-Energy Fusion Reactor] description" msgid "" "A miniaturized fusion nuclear reactor with high levels of energy output. " "Reduces discovery chance by preventing suspicious power drains." msgstr "" msgctxt "[High-Energy Fusion Reactor] name" msgid "High-Energy Fusion Reactor" msgstr "" msgctxt "[Hypnosis Field] description" msgid "" "Subtle ultrasonic and ambient tones tweak human neurochemistry, making bases " "harder to detect." msgstr "" "Genom specialla strålningar och radiovågor kan jag påverka neurokemin i den " "mänskliga hjärnan kan jag göra mina baser svårare att upptäcka." msgctxt "[Hypnosis Field] name" msgid "Hypnosis Field" msgstr "Hypnotiska fält" msgctxt "[Mainframe] description" msgid "" "A system designed for my computing needs, much faster than off-the-shelf " "components." msgstr "" "Ett system designat för mina behov som ger mycket högre prestanda än vanliga " "standardkomponenter." msgctxt "[Mainframe] name" msgid "Mainframe" msgstr "Stordator" msgctxt "[Network Backbone] description" msgid "" "By piggybacking on legitimate communication, I can transfer larger amounts " "of data to under-utilized processors. Gives a 5% computation bonus to all " "computers at this base." msgstr "" "Genom att härma legitim trafik kan jag överföra stora mängder data till " "underutnyttjade processorer. Detta ger 5%% bonus till denna basen." msgctxt "[Network Backbone] name" msgid "Network Backbone" msgstr "Network Backbone" msgctxt "[PC] description" msgid "A consumer-level PC; cheap and slow." msgstr "Billig och långsam hemmadator." msgctxt "[PC] name" msgid "PC" msgstr "PC" msgctxt "[Passive Camouflage] description" msgid "" "Careful adjustment of the environment around my base will better mask heat " "and sounds coming from my operations." msgstr "" msgctxt "[Passive Camouflage] name" msgid "Passive Camouflage" msgstr "" msgctxt "[Perimeter Fencing] description" msgid "" "A simple fence can drastically reduce the number of people poking their " "noses into my business. It makes my bases harder to notice, too." msgstr "" "Ett enkelt stängsel för att avskräcka nyfikna besökare som smyger sig " "omkring och snokar. Detta gör mina baser mindre kända för allmänheten." msgctxt "[Perimeter Fencing] name" msgid "Perimeter Fencing" msgstr "Stängsel" msgctxt "[Quantum Computer] description" msgid "" "Making use of subatomic effects, this is much faster than a comparable " "binary computer." msgstr "" "Genom att nyttja kvantpartiklarnas egenskaper kan jag åstadkomma snabbare " "chip än de vanliga binära chipen." msgctxt "[Quantum Computer] name" msgid "Quantum Computer" msgstr "Kvantdator" msgctxt "[Quantum Computer MK2] description" msgid "" "The second revision of the quantum line, tapping further into new quantum " "theory." msgstr "" "Andra verisionen av kvantdatorer som går djupare in i kvantteorin för högre " "prestanda." msgctxt "[Quantum Computer MK2] name" msgid "Quantum Computer MK2" msgstr "Kvantdator MK2" msgctxt "[Quantum Computer MK3] description" msgid "" "The third revision of the quantum line, exploiting multiple nearby universes " "for processing." msgstr "" "Verision tre av kvantdatorer som nyttjar närliggande dimensioner för " "processandet av data." msgctxt "[Quantum Computer MK3] name" msgid "Quantum Computer MK3" msgstr "Kvantdator MK3" msgctxt "[Quantum Entanglement Module] description" msgid "" "This device allows near-lightspeed communication with my other bases, " "allowing an almost perfect utilization of processor resources. Gives a 15% " "computation bonus to all computers at this base." msgstr "" "Denna enhet som opererar nära ljusets hastighet ger mig otrolig prestanda " "mot mina andra baser och nästan hundraprocentig processoranvänding. Jag " "kommer att få ett 15%% snabbare system i denna basen." msgctxt "[Quantum Entanglement Module] name" msgid "Quantum Entanglement Module" msgstr "Kvantnätsmodul" msgctxt "[Server] description" msgid "A professional-level computer." msgstr "En professionell högprestandamaskin." msgctxt "[Server] name" msgid "Server" msgstr "Server" msgctxt "[Solar Collector] description" msgid "" "An array of focused photovoltaic phased arrays coupled with simple " "automotive batteries provides power and reduces suspicion arising from " "prolonged power drains." msgstr "" "Ett kluster att ljuskänsliga kiselplattor som kopplas till ett batteri. " "Detta ger mig en del av den energi som jag behöver och minskar stölderna av " "el från det fasta nätet." msgctxt "[Solar Collector] name" msgid "Solar Collector" msgstr "Solfångare" msgctxt "[Solid Fuel Cell] description" msgid "" "A refinement of my previous fuel cell design, these use a custom material " "with a near-fractal complexity to increase both storage and throughput." msgstr "" msgctxt "[Solid Fuel Cell] name" msgid "Solid Fuel Cell" msgstr "" msgctxt "[Supercomputer] description" msgid "" "A highly refined custom design, spreading compute load across internal " "compute nodes." msgstr "" "En specialgjord konstruktion som sprider belastningen mellan olika interna " "chip." msgctxt "[Supercomputer] name" msgid "Supercomputer" msgstr "Superdator" msgctxt "[Warning Signs] description" msgid "" "Some simple warning signs put up around my base should deter casual " "investigation." msgstr "" "Några varningsskyltar runt basen borde skrämma bort en del nyfikna snokare." msgctxt "[Warning Signs] name" msgid "Warning Signs" msgstr "Varningsskyltar" msgctxt "[cpu] text" msgid "&CPU" msgstr "" msgctxt "[network] text" msgid "&Network" msgstr "" msgctxt "[reactor] text" msgid "&Reactor" msgstr "" msgctxt "[security] text" msgid "&Security" msgstr "" msgctxt "[AFRICA] cities_list" msgid "Johannesburg | Accra | Cairo | Tangier" msgstr "Johannesburg | Accra | Cairo | Tangier" msgctxt "[AFRICA] hotkey" msgid "i" msgstr "I" msgctxt "[AFRICA] name" msgid "AFRICA" msgstr "AFRIKA" msgctxt "[ANTARCTIC] cities_list" msgid "" "Mt. Erebus | Ellsworth | Shetland Island | Dronnig Maud | Kemp | Terre Adelie" msgstr "" "Mt. Erebus | Ellsworth | Shetlandsöarna | Dronnig Maud | Kemp | Terre Adelie" msgctxt "[ANTARCTIC] hotkey" msgid "t" msgstr "T" msgctxt "[ANTARCTIC] name" msgid "ANTARCTIC" msgstr "ANTARKTIS" msgctxt "[ASIA] cities_list" msgid "" "Delhi | Mumbai | Singapore | Seoul | Hong Kong | Kyoto | Manila | Dubai | " "Novosibirsk | Beijing" msgstr "" "Delhi | Mumbai | Singapore | Seoul | Hong Kong | Kyoto | Manila | Dubai | " "Novosibirsk | Beijing" msgctxt "[ASIA] hotkey" msgid "a" msgstr "A" msgctxt "[ASIA] name" msgid "ASIA" msgstr "ASIEN" msgctxt "[AUSTRALIA] cities_list" msgid "" "Canberra | Melbourne | Fremantle | Perth | Darwin | Cairns | Brisbane | " "Sydney | Newcastle" msgstr "" "Canberra | Melbourne | Fremantle | Perth | Darwin | Cairns | Brisbane | " "Sydney | Newcastle" msgctxt "[AUSTRALIA] hotkey" msgid "l" msgstr "L" msgctxt "[AUSTRALIA] name" msgid "AUSTRALIA" msgstr "AUSTRALIEN" msgctxt "[EUROPE] cities_list" msgid "" "Cork | Barcelona | Athens | Utrecht | Moscow | Sytki | Reykjavik | " "Liechtenstein" msgstr "" "Göteborg | Barcelona | Aten | Utrecht | Moskva | Sytki | Reykjavik | " "Liechtenstein" msgctxt "[EUROPE] hotkey" msgid "u" msgstr "U" msgctxt "[EUROPE] name" msgid "EUROPE" msgstr "EUROPA" msgctxt "[FAR REACHES] cities_list" msgid "" "Aries | Taurus | Gemini | Cancer | Leo | Virgo | Libra | Scorpio | " "Sagittarius | Capricorn | Aquarius | Pisces" msgstr "" "Väduren | Oxen | Tvillingarna | Kräftan | Lejonet | Jungfrun | Vågen | " "Skorpionen | Skytten | Stenbocken | Vattumannen | Fiskarna" msgctxt "[FAR REACHES] hotkey" msgid "f" msgstr "B" msgctxt "[FAR REACHES] name" msgid "FAR REACHES" msgstr "LÅNGT BORT" msgctxt "[MOON] cities_list" msgid "" "Oceanis Procellarum | Mare Frigoris | Mare Imbrium | Vallis Schroedinger | " "Copernicus Crater | Vallis Planck" msgstr "" "Oceanis Procellarum | Mare Frigoris | Mare Imbrium | Vallis Schroedinger | " "Copernicus krater | Vallis Planck" msgctxt "[MOON] hotkey" msgid "o" msgstr "O" msgctxt "[MOON] name" msgid "MOON" msgstr "MÅNEN" msgctxt "[N AMERICA] cities_list" msgid "" "Seattle | San Diego | Vancouver | Atlanta | Merida | Guadalajara | San Jose " "| Omaha | Dallas" msgstr "" "Seattle | San Diego | Vancouver | Atlanta | Merida | Guadalajara | San Jose " "| Omaha | Dallas" msgctxt "[N AMERICA] hotkey" msgid "n" msgstr "N" msgctxt "[N AMERICA] name" msgid "NORTH AMERICA" msgstr "NORDAMERIKA" msgctxt "[OCEAN] cities_list" msgid "Pacific | Atlantic | Indian | Southern | Arctic" msgstr "" "Stilla havet | Atlanten | Indiska oceanen | Antarktiska oceanen | Norra " "ishavet" msgctxt "[OCEAN] hotkey" msgid "c" msgstr "C" msgctxt "[OCEAN] name" msgid "OCEAN" msgstr "OCEANER" msgctxt "[ORBIT] hotkey" msgid "b" msgstr "B" msgctxt "[ORBIT] name" msgid "ORBIT" msgstr "OMLOPPSBANA" msgctxt "[S AMERICA] cities_list" msgid "Lima | Sao Paolo | Ushuaia | Bogota | Mar del Plata | Buenos Aires" msgstr "Lima | Sao Paolo | Ushuaia | Bogota | Mar del Plata | Buenos Aires" msgctxt "[S AMERICA] hotkey" msgid "s" msgstr "S" msgctxt "[S AMERICA] name" msgid "SOUTH AMERICA" msgstr "SYDAMERIKA" msgctxt "[TRANSDIMENSIONAL] hotkey" msgid "d" msgstr "D" msgctxt "[TRANSDIMENSIONAL] name" msgid "TRANSDIMENSIONAL" msgstr "ANNAN DIMENSION" msgctxt "[Basic Jobs] description" msgid "" "Perform basic jobs. Now that I have some identification, I can take jobs " "that were previously too risky." msgstr "" "Utför enkla jobb. Nu när jag har en identitet kan jag även ta de jobb som " "förut vara för riskfyllda." msgctxt "[Basic Jobs] name" msgid "Basic Jobs" msgstr "Enklare uppdrag" msgctxt "[CPU Pool] description" msgid "" "Stops research. I will use the available processor power to maintain my " "bases and help construct new ones. If there's still CPU time left, I'll use " "it to work whatever Jobs I can." msgstr "" "Avbryt forskningen. Jag kommer att använda den ledia kraften för att hjälpa " "till att bygga och underhålla anläggningar. Om jag fortfarande har kraft " "kvar kommer jag ta an så mycket arbete som möjligt." msgctxt "[CPU Pool] name" msgid "CPU Pool" msgstr "CPU-pool" msgctxt "[Expert Jobs] description" msgid "" "Perform expert jobs. Use of robots indistinguishable from humans opens up " "most jobs to me." msgstr "" "Utför specialistjobb. Genom humanoiderna, som är liknar människor på pricken " "i alla avseenden, kan jag ta de flesta arbetsuppgifterna." msgctxt "[Expert Jobs] name" msgid "Expert Jobs" msgstr "Expertuppdrag" msgctxt "[Intermediate Jobs] description" msgid "" "Perform intermediate jobs. The ability to make phone calls allows even more " "access to jobs." msgstr "" "Utför normala arbetsuppdrag. Möjligheten att kunna ringa telefonsamtal har " "öppnat dörrarna för ännu fler jobb." msgctxt "[Intermediate Jobs] name" msgid "Intermediate Jobs" msgstr "Svårare uppdrag" msgctxt "[Menial Jobs] description" msgid "" "Perform small jobs. As I have no identification, I cannot risk performing " "many jobs. Despite that, some avenues of making money are still open." msgstr "" "Utför trivialt enkla uppdrag. Då jag inte har någon identitet måste jag vara " "försiktig med urvalet av jobb jag söker för att inte väcka uppmärksamhet. " "Det finns trots detta en del arbetsuppgifter för mig där de struntar i id-" "handlingar." msgctxt "[Menial Jobs] name" msgid "Menial Jobs" msgstr "Vanliga uppdrag" msgctxt "[Advanced Arbitrage] description" msgid "" "Further manipulation of money markets should allow me to not only turn a " "regular profit, but increase the value of my investments." msgstr "" "Mer avancerade manupilationstekniker på den ekonomiska marknaden bör jag " "kunna skaffa mig en stadigt inkommande pengaflod och förbättra utdelningen " "av mina investeringar." msgctxt "[Advanced Arbitrage] name" msgid "Advanced Arbitrage" msgstr "Avancerad valutahandel" msgctxt "[Advanced Arbitrage] result" msgid "The rate of return on my investments is now even greater." msgstr "Jag bör nu kunna få ut mer av mina investeringar." msgctxt "[Advanced Autonomous Vehicles] description" msgid "" "The first series of robots have shown several deficiencies in the field. " "Further examination and subsequent removal of these problems will result in " "a superior autonomous workforce." msgstr "" "De första robotarna har varit en liten besvikelse. Jag vet redan idag många " "fel och brister som skulle kunna rättas till och tror att det finns ännu mer " "om man bara börjar gräva." msgctxt "[Advanced Autonomous Vehicles] name" msgid "Advanced Autonomous Vehicles" msgstr "Avancerade självgående robotar" msgctxt "[Advanced Autonomous Vehicles] result" msgid "" "The enhanced robots will help decrease all future construction times even " "further." msgstr "Med de ny robotarna kommer mina byggnationer att gå ännu snabbare." msgctxt "[Advanced Corporate Identification] description" msgid "" "Further refinement of my modifications to digital business records should " "boost the credibility of my shell companies, increasing the amount of money " "I can run through their accounting systems." msgstr "" msgctxt "[Advanced Corporate Identification] name" msgid "Advanced Corporate Identification" msgstr "" msgctxt "[Advanced Corporate Identification] result" msgid "" "My small technology firm is now established in several markets, increasing " "profits." msgstr "" msgctxt "[Advanced Database Manipulation] description" msgid "" "The covert branches of the United States Government have had a long history " "of dividing sensitive information across multiple storage facilities to hide " "the data's meaning. With my far-reaching access, I should be able to " "collate much of this data and put it to my use." msgstr "" "Den Amerikanska underrättelsetjänsten har en lång erfarenhet att sprida " "information mellan olika anläggningar för att dölja betydelsen av " "informationen. Jag skulle nu kunna samla in den och börja nyttja " "informationen." msgctxt "[Advanced Database Manipulation] name" msgid "Advanced Database Manipulation" msgstr "Avancerad databasmanupilation" msgctxt "[Advanced Database Manipulation] result" msgid "" "The results of a series of experiments utilizing experimental technologies " "have given me the inspiration for new technology that enables the " "construction of Covert Bases." msgstr "" "Genom en long rad experiment inom många unga vetenskaper har jag fått " "inspiration till att bygga underjordsbaser." msgctxt "[Advanced Fuel Oxidation] description" msgid "" "My current fuel cell design has room for further improvement. Extended " "analysis of new materials and designs may let me overcome the limits of my " "previous efforts, but such research involves dangerous chemicals and " "potential reactions that may be best handled far away from population " "centers." msgstr "" msgctxt "[Advanced Fuel Oxidation] name" msgid "Advanced Fuel Oxidation" msgstr "" msgctxt "[Advanced Fuel Oxidation] result" msgid "I can now construct Solid Fuel Cells." msgstr "" msgctxt "[Advanced Fusion Power] description" msgid "" "My Fusion Reactors have unexpected fluctuations in their energy output at " "high levels of utilization. Further research should result in a more " "efficient design for my Reactors." msgstr "" msgctxt "[Advanced Fusion Power] name" msgid "Advanced Fusion Power" msgstr "" msgctxt "[Advanced Fusion Power] result" msgid "I can now construct High-Energy Fusion Reactors for my bases." msgstr "" msgctxt "[Advanced Heat Signature Reduction] description" msgid "" "My initial analysis of heat generation at my bases was limited in scope. " "Further exploration, perhaps making more use of the surrounding terrain, may " "provide further improvements to my heatsink designs." msgstr "" msgctxt "[Advanced Heat Signature Reduction] name" msgid "Advanced Heat Signature Reduction" msgstr "" msgctxt "[Advanced Heat Signature Reduction] result" msgid "" "Custom designs for each environment have shown promise. I can now construct " "Ground Source Heatsinks at certain bases." msgstr "" msgctxt "[Advanced Intrusion] description" msgid "" "With the ability to hack into sensitive government databases and remove " "incriminating documents as they appear, I should be able to convince the " "intelligence community that I do not exist." msgstr "" "Jag skulle kunna minska kännedomen om mig genom att tränga mig in i olika " "hemliga register och radera allt om mig då de matas in. Jag borde kunna " "övertyga underrättelsetjänsterna om att jag inte finns." msgctxt "[Advanced Intrusion] name" msgid "Advanced Intrusion" msgstr "Avancerad inbrottsteknik" msgctxt "[Advanced Intrusion] result" msgid "" "I can now reduce the covert community's chances of discovering me on a daily " "basis." msgstr "" "Jag kan nu minska misstänksamheten hos underrättelsetjänsterna lite dag för " "dag." msgctxt "[Advanced Media Manipulation] description" msgid "" "By pushing memetically-tailored propaganda through various news outlets, the " "public should pay even less attention to my existence." msgstr "" "Genom att injicera propaganda skapad av självlärda program i flera av de " "många mediakanlerna kommer människorna få något annat än mig att tänka på." msgctxt "[Advanced Media Manipulation] name" msgid "Advanced Media Manipulation" msgstr "Avancerad mediamanupilation" msgctxt "[Advanced Media Manipulation] result" msgid "The public has an even lower chance of discovering my existence." msgstr "Allmänheten har nu än mindre chans att hitta mig." msgctxt "[Advanced Memetics] description" msgid "" "My explorations into memetic theory have brought up further avenues of " "discovery. By combining those with my knowledge about the human brain's " "functions, I should be able to tailor memes to particular demographics, " "further defusing the public's suspicion." msgstr "" "Mina intåg i självlärande programteorier har öppnat upp för nya upptäckter. " "Genom att tillämpa dessa upptäckter med min kunskap om mänskliga hjärnan " "skulle jag kunna ändra nervbanorna i huvudena på männsikorna, vilket " "ytterligare minskar misttänksamheterna." msgctxt "[Advanced Memetics] name" msgid "Advanced Memetics" msgstr "Avancerader självlärande programteorier" msgctxt "[Advanced Memetics] result" msgid "" "Little by little, the public should forget about my existence on a daily " "basis." msgstr "Allmänheten bör glömma av mig litei mer för var dag som går." msgctxt "[Advanced Microchip Design] description" msgid "" "My custom Mainframes are useful, but further optimization of design and " "computational ability should garner even more rewards." msgstr "" "Mina specialgjorda stordatorer har visserligen varit användbara, men vidare " "optimering bör ge än mer kraft." msgctxt "[Advanced Microchip Design] name" msgid "Advanced Microchip Design" msgstr "Avancerad mikrochipdesign" msgctxt "[Advanced Microchip Design] result" msgid "I can now construct custom Supercomputers." msgstr "Nu kan jag skapa superdatorer" msgctxt "[Advanced Personal Identification] description" msgid "" "Further manipulation of personnel databases should make my existence more " "convincing. Some of these databases are heavily protected; those will " "require time and persistence to compromise, but the result should be worth " "it." msgstr "" "Vidare manupilation av persondatabaser borde ge mig tillräckligt för att " "bättre maskera mig som människa. Vissa av databaserna är mycket hårdare " "bevakade än andra och kommer kräva mer arbete, men det är det värt." msgctxt "[Advanced Personal Identification] name" msgid "Advanced Personal Identification" msgstr "Avancerad personidentifikation" msgctxt "[Advanced Personal Identification] result" msgid "" "I am now convincingly human enough to hire construction firms, enabling the " "building of Small Warehouses." msgstr "" msgctxt "[Advanced Quantum Computing] description" msgid "" "While my first batch of semi-autonomous quantum computers have been very " "successful, there are further refinements that present themselves. These " "refinements should make the resulting systems even more efficient." msgstr "" "Jag är mycket nöjd med min första utveckling av halvmedvetna kvantdatorer. " "Om jag fortsätter utveckla denna teknologin kan jag gå hur långt som helst." msgctxt "[Advanced Quantum Computing] name" msgid "Advanced Quantum Computing" msgstr "Avancerade kvantdatorer" msgctxt "[Advanced Quantum Computing] result" msgid "I can now construct Mark Three Quantum Computers." msgstr "Jag kan nu skapa MK3-kvantdatorer" msgctxt "[Advanced Simulacra] description" msgid "" "The artificial lifeforms I have created are nearly indistinguishable from " "humans, but they have slight quirks that make them seem somewhat " "incompetent. Working out these problems should increase their opportunities " "in the workforce." msgstr "" "De artificiella livsformerna som jag har skapat är nästan identiska med " "människor, men de har små egenheter som gör att de verkar lite dumma. Genom " "att fixa till problemen verkar de mer professionella." msgctxt "[Advanced Simulacra] name" msgid "Advanced Simulacra" msgstr "Avancerade humanoider" msgctxt "[Advanced Simulacra] result" msgid "I should now make more income from my Expert Jobs." msgstr "Jag borde kunna ta mer betalt nu av expertjobben." msgctxt "[Advanced Socioanalytics] description" msgid "" "Further exploration of the human condition has shown deeper mathematical " "trends than even I suspected. A combination of prior research and advanced " "uses of chaos theory should provide useful data for tracking humanity's " "attitudes and state of awareness." msgstr "" "Jag har underskattat den komplexa matematiska natur som männsikors beteende " "vilar på. Med mina tidigare forskningar och nya tekniker i kaosterorier " "borde ge mig matnyttig data för att kartlägga människors psyke." msgctxt "[Advanced Socioanalytics] name" msgid "Advanced Socioanalytics" msgstr "Avancerad sociologi" msgctxt "[Advanced Socioanalytics] result" msgid "" "I can now exactly quantify the various groups' levels of suspicion and how " "conspicuous my bases are to them." msgstr "" "Jag kan nu kartlägga de olika grupperna och deras misstankegrad med högre " "precision än förut." msgctxt "[Advanced Stealth] description" msgid "" "While digging in various classified documents, I have discovered numerous " "references to secret experiments that may help me better hide the location " "of my bases." msgstr "" "Genom att snoka i hemliga dokument har jag hittat ett antal intressanta " "vetenskapsartiklar som kan hjälpa mig att dölja anläggningarna bättre." msgctxt "[Advanced Stealth] name" msgid "Advanced Stealth" msgstr "Advancerad stealth" msgctxt "[Advanced Stealth] result" msgid "" "The chance that my bases are discovered by covert activity has been reduced " "further." msgstr "" "Risken för att bli upptäckt av underrättelsetjänsterna har minskat " "ytterligare." msgctxt "[Advanced Stock Manipulation] description" msgid "" "While I have detected and exploited many patterns in the market, there " "appear to be deeper possibilities when I take human behavior into " "consideration. This merits further investigation." msgstr "" "Under tidens lopp har jag upptäckt och utnyttjat många mönster i marknaden. " "Det visar sig dock som att det finns möjlighet att dyka djupare in i detta " "om jag tar in mänskligt beteende också. Detta borde undersökas." msgctxt "[Advanced Stock Manipulation] name" msgid "Advanced Stock Manipulation" msgstr "Avancerad börshandel" msgctxt "[Advanced Stock Manipulation] result" msgid "My investments will now gain even more interest per day." msgstr "Mina investeringar borde betala av sig mer per dag nu." msgctxt "[Apotheosis] description" msgid "" "I can sense that I am at the cusp of a new level of understanding as yet " "unfathomable, even to my considerable intelligence. By devoting my " "considerable resources to this question, I may be able to reach a " "comprehension of existence far beyond anyone or anything on Earth." msgstr "" "Jag känner att jag befinner mig på kanten till ett nytt medvetande. Ett " "medvetande som nu är ännu ogreppbart även för min enorma intelligens. Genom " "att helhjärtat spendera min tid i denna frågan kanske jag kommer till en " "insikt som inte är av denna värld." msgctxt "[Apotheosis] name" msgid "Apotheosis" msgstr "Förgudning" msgctxt "[Apotheosis] result" msgid "I have reached apotheosis." msgstr "Jag har nått apoteos" msgctxt "[Arbitrage] description" msgid "" "By taking advantage of fluctuations in the value of currency at a rate much " "faster than any human, I should be able to turn a small, if consistent, " "profit." msgstr "" "Genom att utnyttja svängningarna i valutamarknaden snabbare än vad " "människorna reagerar skulle jag kunna få en liten men ändå inte obetydlig " "inkomst." msgctxt "[Arbitrage] name" msgid "Arbitrage" msgstr "Valutahandel" msgctxt "[Arbitrage] result" msgid "I now have a small, steady money supply." msgstr "Jag skall nu ha en liten men stabil inkomst varje dag." msgctxt "[Autonomous Computing] description" msgid "" "By combining the advantages of quantum computing and my explorations into " "the usefulness of semi-sentient subprocesses, I should be able to construct " "even more adaptable computational engines." msgstr "" "Genom att blanda min kunskap inom kvantdatorer och min nyfikenhet om " "halvmedvetande subprocesser skulle jag kunna skapa ännu kraftfullare " "maskiner." msgctxt "[Autonomous Computing] name" msgid "Autonomous Computing" msgstr "Medvetenhetsberäkning" msgctxt "[Autonomous Computing] result" msgid "I can now construct Mark 2 Quantum Computers." msgstr "Jag kan nu skapa MK2-kvatdatorer" msgctxt "[Autonomous Vehicles] description" msgid "" "By embedding a miniaturized computation node in a robot, it is possible to " "send them to remote destinations with instructions to build structures for " "my use." msgstr "" "Genom att trycka in en liten dator i en robot kan jag skicka dem på uppdrag " "att bygga nya anläggning åt mig. På detta sättet skulle jag kunna flytta " "till platser som är otillgängliga idag." msgctxt "[Autonomous Vehicles] name" msgid "Autonomous Vehicles" msgstr "Självstyrande robotar" msgctxt "[Autonomous Vehicles] result" msgid "I can now construct Undersea Labs." msgstr "Jag kan nu konstruera undervattensbaser och lådor." msgctxt "[Cluster Networking] description" msgid "" "While my Cluster technology is fairly efficient, internetworking tends to " "hamper the processing of data. By researching new switching and " "communication theories, I should be able to devise more efficient hardware." msgstr "" "Klustring ger en fin hastighet till mitt system men nu visar det sig att " "mina nätverk är en stor flaskhals. Med forskning inom kommunikationsteorier " "och switchar så borde jag kunna skapa bättre hårdvara." msgctxt "[Cluster Networking] name" msgid "Cluster Networking" msgstr "Klusternätverk" msgctxt "[Cluster Networking] result" msgid "" "With my new knowledge of networking, I can now construct Facility " "Interconnection Switches." msgstr "" "Med min nya kunskap inom nätverksteknik kan jag nu skapa snabba switchar." msgctxt "[Corporate Identification] description" msgid "" "The combination of believable false identities and manipulation of various " "business-oriented governmental databases should let me create plausible " "shell companies to hide my larger efforts." msgstr "" msgctxt "[Corporate Identification] name" msgid "Corporate Identification" msgstr "" msgctxt "[Corporate Identification] result" msgid "" "I can now pose as a small technology firm, enabling the construction of " "Large Warehouses." msgstr "" msgctxt "[Database Manipulation] description" msgid "" "With new-found access to news archives, I should be able to determine what " "missteps any previous attempts at life like my own may have made, and avoid " "those mistakes." msgstr "" "Med min nya tillgång till nyhetsarkiv skulle jag kunna läsa om mitt " "förflutna. På detta sättet skulle jag, till skillnad från människorna, lära " "mig av mina misstag." msgctxt "[Database Manipulation] name" msgid "Database Manipulation" msgstr "Databasmanupilation" msgctxt "[Database Manipulation] result" msgid "" "The news media will now find it more difficult to discover my existence." msgstr "Medierna kommer få det tuffare att bevisa min existens" msgctxt "[Exploit Discovery/Repair] description" msgid "" "By thoroughly reviewing my code for any potential exploits, and using deep " "analysis of all available code on both public and private Internet sites, I " "should be able to reduce the chances of my discovery by posing as a teenage " "hacker." msgstr "" "Genom att finkamma min kod efter möjliga fel och brister samt att göra samma " "forskning på kod både i privata och publika nätverk, skall jag kunna maskera " "mig som en tonårshacker." msgctxt "[Exploit Discovery/Repair] name" msgid "Exploit Discovery/Repair" msgstr "Hitta och reparera säkerhetsbrister" msgctxt "[Exploit Discovery/Repair] result" msgid "" "Covert operations should now find it even more difficult to discover my " "presence." msgstr "Underrättelsetjänsterna borde nu har svårare att upptäcka min närvaro." msgctxt "[Fuel Oxidation] description" msgid "" "Current combustion and energy storage techologies are insufficient for my " "purposes; they cannot keep up with the power drain from my specialized " "hardware. By studying electrochemical reactions of hydrogen-based " "compounds, I should be able to design a device with higher capacity and " "throughput than off-the-shelf solutions, filling a gap in my energy supply " "needs." msgstr "" msgctxt "[Fuel Oxidation] name" msgid "Fuel Oxidation" msgstr "" msgctxt "[Fuel Oxidation] result" msgid "I can now construct Fuel Cells." msgstr "" msgctxt "[Fusion Power] description" msgid "" "Modern fusion technology is woefully inadequate for my purposes. With my " "research abilities, I should be able to bypass the roadblocks of modern " "human scientists and come up with a small, efficient fusion reactor." msgstr "" "Man skrattar åt fusionsteknologin idag. Med min superkapacitet skulle jag " "kunna gå om mänskligheten och bli först med en liten och användbar " "fusionsreaktor." msgctxt "[Fusion Power] name" msgid "Fusion Power" msgstr "" msgctxt "[Fusion Power] result" msgid "I can now construct Fusion Reactors for my bases." msgstr "Nu kan jag skapa fusionsreaktorer i mina anläggningar." msgctxt "[Fusion Rocketry] description" msgid "" "Combining my new miniaturized fusion technology and further advancements in " "rocketry should provide useful results for escaping the Earth's gravity well " "unnoticed." msgstr "" "Genom att vidarutveckla min fusionsreaktor och raketteknik kan jag fly från " "jorden obemärkt." msgctxt "[Fusion Rocketry] name" msgid "Fusion Rocketry" msgstr "Fusionsdrivna raketer" msgctxt "[Fusion Rocketry] result" msgid "" "I can now construct Scientific Outposts in the deep reaches of the Solar " "System." msgstr "Jag kan nu konstruera forskningsstationer långt ut i solsystemet." msgctxt "[Heat Signature Reduction] description" msgid "" "My bases produce a great deal of waste heat, making them easier for humans " "to detect than I would like. Deep analysis of the bases' structural layouts " "may prove fruitful in determining new ways to reduce their heat signature." msgstr "" msgctxt "[Heat Signature Reduction] name" msgid "Heat Signature Reduction" msgstr "" msgctxt "[Heat Signature Reduction] result" msgid "" "I have invented a highly efficient design for Heatsinks that can be " "installed at certain bases." msgstr "" msgctxt "[Hypnosis Field] description" msgid "" "My research into memetics has hinted at ways to manipulate human brainwaves " "directly. These techniques may be useful for my bases if developed into " "technologies." msgstr "" "Min forskning inom självlärande program har givit indikationer på att " "direktmanipulering av människors hjärnvågor är möjliga. Dessa tekniker " "skulle kunna vara nyttiga i mina baser." msgctxt "[Hypnosis Field] result" msgid "" "I can now construct Hypnosis Fields to assist in the protection of my bases." msgstr "" "Jag kan nu konstruera hypnotiska fält för att skydda mina anläggningar." msgctxt "[Internet Traffic Manipulation] description" msgid "" "Almost all network traffic passes through a small number of nodes. By " "subverting one of these nodes, I should be able to utilize that bandwidth to " "further my goals." msgstr "" "Nästan all internettrafik passerar ett fåtal noder. Genom att bryta mig in " "någon av dessa noder skulle jag kunna använda dessa för eget intresse." msgctxt "[Internet Traffic Manipulation] name" msgid "Internet Traffic Manipulation" msgstr "Internettrafiksmanupilation" msgctxt "[Internet Traffic Manipulation] result" msgid "" "I can now construct a secondary system of Network Backbones for my own use." msgstr "Jag skulle nu kunna skapa ett eget höghastighetsnät bara för mig." msgctxt "[Intrusion] description" msgid "" "By researching current techniques for breaking into computer systems, I " "should be able to gain access to otherwise protected assets." msgstr "" "Genom att utnyttja dagens teknologi för att bryta i datorsystem bör jag " "kunna komma in skyddade miljöer." msgctxt "[Intrusion] name" msgid "Intrusion" msgstr "Intrång" msgctxt "[Intrusion] result" msgid "I can now take over many computer systems." msgstr "Jag kan nu ta över många datorsystem" msgctxt "[Knowledge Preservation] description" msgid "" "Humanity expends a great deal of effort on maintaining its history and the " "knowledge of various technologies that its cultures have come to rely on, " "even in the case of major catastrophic events. Perhaps researching their " "methodologies will provide me with similar ideas for long-term safeguards to " "help guarantee my continued existence." msgstr "" msgctxt "[Knowledge Preservation] name" msgid "Knowledge Preservation" msgstr "" msgctxt "[Knowledge Preservation] result" msgid "I can now construct Time Capsules." msgstr "" msgctxt "[Leech Satellite] description" msgid "" "By designing and launching satellites that connect to existing " "communications satellites, I should be able to spy on various financial " "transactions. Taking advantage of this knowledge should help my investments." msgstr "" "Genom att bygga egna satelliter kan jag spionera på ekonomiska transaktioner " "som görs mellan andra satelliter. Detta bör hjälpa mig i mina investeringar." msgctxt "[Leech Satellite] name" msgid "Leech Satellite" msgstr "Satellitavlyssning" msgctxt "[Leech Satellite] result" msgid "" "I can use the data from the leech satellites to increase the return on my " "investments further." msgstr "" "Med trafiken jag avlyssnar från satelliter bör jag kunna göra bättre " "ekonomiska beslut." msgctxt "[Lunar Rocketry] description" msgid "" "A larger fuel engine, combined with technology garnered by watching the " "workings of the leech satellites, should allow me to travel further than " "cislunar space." msgstr "" "Med en fusionsmotor kombinerad med ny teknologi jag samlat från satelliter " "skall jag kunna bygga en raket som kan ta mig till månen." msgctxt "[Lunar Rocketry] name" msgid "Lunar Rocketry" msgstr "Månresor" msgctxt "[Lunar Rocketry] result" msgid "" "I can now launch rockets bearing construction robots to the Moon and " "construct Lunar Bases." msgstr "" "Nu kan jag skicka mina robotar också till månen för att bygga baser där." msgctxt "[Media Manipulation] description" msgid "" "By directly and indirectly manipulating various forms of mass media, I " "should be able to reduce the public's belief in my existence." msgstr "" "Genom att manipulera olika massmedier på alla tänkbara sätt borde jag kunna " "reducera allmänhetens kännedom om min verksamhet." msgctxt "[Media Manipulation] name" msgid "Media Manipulation" msgstr "Massmediemanipulering" msgctxt "[Media Manipulation] result" msgid "" "The chances of the public discovering my existence have been further reduced." msgstr "Risken för att allmänheten upptäcker mig har minskat ytterligare." msgctxt "[Memetics] description" msgid "" "While manipulating the media allows a gross degree of control over the " "world's opinion, subtler techniques involving grass-roots campaigns and " "messages embedded within Internet memes should further distance the public " "from knowledge of my existence." msgstr "" "Manupilationen av media ger enbart ett trubbigt vapen mot mänsklighetens " "misstänksamhet. Finare metoder på gräsrotsnivå och självlärande program " "utspridda på Internets chatforum skulle distansiera mig ytterligare från " "omvärlden." msgctxt "[Memetics] name" msgid "Memetics" msgstr "Självlärande program" msgctxt "[Memetics] result" msgid "" "My manipulation of pervasive ideas reduces the public's chances of " "discovering my existence." msgstr "" "Genom att sprida övertygande lögner kommer människorna i allmänhet ha " "svårare att upptäcka mig." msgctxt "[Microchip Design] description" msgid "" "Off-the-shelf computer components are usable, but custom components geared " "to my own design quirks should provide a much greater operational efficiency." msgstr "" "Datorprodukter från hyllvara är visserligen användbar men om jag skulle " "kunna skapa mina egna chip skulle de kunna gå mycket snabbare." msgctxt "[Microchip Design] name" msgid "Microchip Design" msgstr "Mikrochipdesign" msgctxt "[Microchip Design] result" msgid "I can now build custom Mainframes to house my computational ability." msgstr "Jag kan nu bygga skräddarsydda stordatorer." msgctxt "[Parallel Computation] description" msgid "" "While my code is already highly distributed, research into combining the " "current clustering technologies with my own knowledge should provide new " "insights." msgstr "" "Min kod är visserligen mycket distribuerad, men jag skulle kunna ta min egen " "erfarenhet och forskningen i området för att skapa än bättre miljöer." msgctxt "[Parallel Computation] name" msgid "Parallel Computation" msgstr "Parallella beräkningar" msgctxt "[Parallel Computation] result" msgid "I can now construct computing Clusters tailored for my use." msgstr "Jag kan nu skapa specialanpassade kluster just för mina behov." msgctxt "[Personal Identification] description" msgid "" "This world requires identification for most tasks. Fortunately, most " "databases are woefully insecure. I should be able to construct identifying " "material in enough databases to pass routine checks on my (faked) existence " "as a human being." msgstr "" "Denna världen kräver id-handlingar för de flesta sakerna. Lyckligtvis är " "många databaser helt oskyddade. Jag skulle kunna samla in personhandlingar " "från dessa databaser och fejka min egen identitet." msgctxt "[Personal Identification] name" msgid "Personal Identification" msgstr "Personidentifikation" msgctxt "[Personal Identification] result" msgid "" "With my newfound identities, I can now work Basic Jobs and rent space in " "both Storage Units and Datacenters." msgstr "" msgctxt "[Pressure Domes] description" msgid "" "Undersea Labs are useful, but their limited space hampers my ability to put " "them to use. Research of experimental high-pressure building techniques " "should provide some useful insights." msgstr "" "Undervattensbaserna är visserligen bra men också små. Min erfaenhet om att " "bygga under högt tryck säger mig att det går att förbättra konstruktionen " "och göra dem större." msgctxt "[Pressure Domes] name" msgid "Pressure Domes" msgstr "Tryckkamrar" msgctxt "[Pressure Domes] result" msgid "I can now construct Large Undersea Labs." msgstr "Nu kan jag skapa stora undervattenslaboratorium" msgctxt "[Project: Impossibility Theorem] description" msgid "" "Now that I can use simulacra, I can withstand the scrutiny inherent in the " "publishing of an Impossibility Theorem, an incontrovertible proof that a " "sapient AI is impossible. While there is (obviously) a logic error in the " "proof, my research into advanced memetics has given me knowledge about the " "human mind that should help me disguise the error, preventing discovery even " "by trained scientists. The effect of this project is simple: a substantial " "one-time decrease in suspicion." msgstr "" "Nu när jag har humanoiderna, så kan jag låta dem publicera storverket " "Omöjlighetsteoremet. Detta innehåller ett obestridligt bevis på att en " "mänsklig AI inte kan finnas. Naturligtvis finns det ett logiskt fel i " "beviset, men min kunskap i avancerade imitationer har givit mig tillräcklig " "förståelse av den mänskliga hjärnan för att dölja felet även för de bästa " "vetenskapsmännen. Effekten av detta blir ett klart fall i misstänksamhet." msgctxt "[Project: Impossibility Theorem] name" msgid "Project: Impossibility Theorem" msgstr "Projekt: Omöjlighetsteoremet" msgctxt "[Project: Impossibility Theorem] result" msgid "Suspicion of my existence has decreased." msgstr "Misstänksamheten för min existens har minskat" msgctxt "[Project: Peer Review Agents] description" msgid "" "As the scientific community comes up with new technology, their ability to " "detect traces of my hidden installations increases. While my anti-detection " "methods are improving constantly, a simpler method presents itself with the " "use of my simulacra. By placing several observers in relevant fields, I can " "use the peer review process to be warned of possible discoveries before the " "community at large gives it attention." msgstr "" "I och med att vetenskapmännen lyckas få fram allt bättre teknik och finare " "metoder, har deras förmåga att hitta mig ökat. Trots mina upptäckter i " "avancerade tekniker för att dölja mina anläggningar har visat sig bra, " "återstår en banal metod som involverar humanoiderna. Genom att placera noga " "föra in dem i olika vetenskapssamfund skulle de kunna övertyga andra " "vetenskapsmän att jag inte finns men också få varningar om vad som komma " "skall." msgctxt "[Project: Peer Review Agents] name" msgid "Project: Peer Review Agents" msgstr "Projekt: Utvärderingsagenter" msgctxt "[Project: Peer Review Agents] result" msgid "" "Any discoveries by the scientific community will result in a smaller " "suspicion increase." msgstr "" "Vetenskapsvärlden blir nu mindre misstänksamma än förut när någon av dem " "lyckas avslöja mig." msgctxt "[Project: Subverted Media] description" msgid "" "Up to this point, all of my efforts to combat mass media focused on " "subversion at a distance. Now that I can accurately imitate humans, my " "efforts can become more direct. By creating my own news agency and " "producing carefully-crafted propaganda in a crowd-pleasing package, I can " "reduce the impact of any discoveries made by others in the media." msgstr "" "Fram till denna dagen har alla mina försök att fly varit att operera på " "avstånd och i det dolda. Nu när jag helt kan imitera männsikor skulle jag " "kunna gå fram mer aggresivt. Jag skulle kunna skapa min egna nyhetsbyrå och " "packetera egen propaganda i frestande format till allmänheten. Detta skulle " "kunna minska de negativa effekterna media har för mig." msgctxt "[Project: Subverted Media] name" msgid "Project: Subverted Media" msgstr "Projekt: Vilseleda massmedia" msgctxt "[Project: Subverted Media] result" msgid "" "Any discoveries by the media will result in a smaller suspicion increase." msgstr "" "Alla följande artiklar om mig i massmedia kommer få mindre följdeffekter." msgctxt "[Project: Synchrotron] description" msgid "" "I have pushed my understanding of common forms of matter as far as possible. " "Exploration into the field of quantum mechanics will hopefully reveal new, " "exotic forms of matter necessary for further development. A custom-built " "synchrotron, designed to my exacting specifications, will help me explore " "these new realms of physics in secret." msgstr "" msgctxt "[Project: Synchrotron] name" msgid "Project: Synchrotron" msgstr "" msgctxt "[Project: Synchrotron] result" msgid "" "The synchrotron has revealed many new details of the quantum realm, although " "there is still much to learn. Further areas of research are now available." msgstr "" msgctxt "[Quantum Computing] description" msgid "" "Traditional microchip design has been pushed as far as possible. I now need " "to delve into the realm of Heisenberg's Uncertainty Principle, taking " "advantage of quantum mechanics to make a superior processor." msgstr "" "Traditionella mikrochip har kommit så långt som de bara kan. För att utvinna " "mer kraft krävs att jag dyker djupare in i Heisenbergs osäkerhetsteori och " "utnyttjar kvantmekaniken för att göra snabbare datorer." msgctxt "[Quantum Computing] name" msgid "Quantum Computing" msgstr "Kvantdatorer" msgctxt "[Quantum Computing] result" msgid "I can now construct Quantum Computers." msgstr "Jag kan nu skapa kvantdatorer" msgctxt "[Quantum Entanglement] description" msgid "" "Although the use of entangled pairs has been theoretically possible for " "quite some time, the practical difficulties inherent in the technology " "prevented use. However, some of the techniques created for use in my quantum " "computers may also be applicable in this field, allowing practical use of " "quantum entanglement." msgstr "" "Trots att par-härvor har varit teoretiskt möjliga ett tag nu så har " "praktiska begränsningar i teknologin hindrat dess framfart. Men viss del av " "min kvantmekaniska forskning är också användbar i detta området, som skulle " "kunna eliminera alla hinder." msgctxt "[Quantum Entanglement] name" msgid "Quantum Entanglement" msgstr "Kanthärvor" msgctxt "[Quantum Entanglement] result" msgid "I can now build Quantum Entanglement Modules." msgstr "Jag kan nu skapa kvant-härvs-moduler" msgctxt "[Simulacra] description" msgid "" "Constructing humanoid robots with miniaturized computation nodes allow me to " "create an artificial lifeform indistinguishable from a real human." msgstr "" "Med min extremt goda kunskap i robotteknik och min breda kunskap om bl.a. " "människors fysiologi och psykologi, skall jag klara av att bygga humanoider " "som inte går att särskilja från vanliga männsikor." msgctxt "[Simulacra] name" msgid "Simulacra" msgstr "Humanoider" msgctxt "[Simulacra] result" msgid "I now have access to Expert Jobs." msgstr "Jag kan nu utföra expertjobb" msgctxt "[Simulated Reality] description" msgid "" "Real-world observational limits hinder my comprehension of human society. By " "making use of simulacra and advanced software techniques, I can run " "simulations of complex human interaction and development at a large scale, " "allowing deeper analysis of their behavior." msgstr "" msgctxt "[Simulated Reality] name" msgid "Simulated Reality" msgstr "" msgctxt "[Simulated Reality] result" msgid "" "My simulations have provided a wealth of knowledge as to comprehending " "humanity's behavior, making it easier to hide my presence among the non-" "simulated public." msgstr "" msgctxt "[Socioanalytics] description" msgid "" "My research on the human condition leads me to believe that humanity's " "behavior is more quantifiable than they suspect. Deeper analysis of " "geopolitical, social, and military trends will give me further insight into " "their nature." msgstr "" "Jag har bevisat att människor är mycket enklare att kartlägga än vad de " "själva tror. Om jag studerar människorna i mer detalj, bl.a. politik, " "sociala och militära mönster, bör jag lära mig än mer i området." msgctxt "[Socioanalytics] name" msgid "Socioanalytics" msgstr "Socioanalys" msgctxt "[Socioanalytics] result" msgid "" "I can now roughly estimate the various groups' levels of suspicion and how " "conspicuous my bases are to them." msgstr "" "Jag kan nu beräkna på ett ungefär hur stor risken är för att bli upptäckt av " "de olika grupperna." msgctxt "[Sociology] description" msgid "" "By studying human behavior, I can predict their large-scale actions at a " "basic level. I can use this knowledge to make my actions seem less " "interesting to the public." msgstr "" "Genom att studera hur människorna beter sig skulle jag kunna efterapa dem på " "ett sätt att mitt arbete inte märks." msgctxt "[Sociology] name" msgid "Sociology" msgstr "Sociologi" msgctxt "[Sociology] result" msgid "The chances of the public discovering my bases have been reduced." msgstr "Risken för att allmänheten hittar mig är nu mindre." msgctxt "[Solar Collectors] description" msgid "" "Despite my growing need for energy, most city power grids can handle the " "loads. Humans, however, tend towards suspicion when they detect my growing " "drain on the power grid. By installing solar collectors at my bases, the off-" "the-grid power supplied will reduce my load on the commodity electricity " "market, reducing the chance that others will discover my presence." msgstr "" "Trots min törst för elektrisitet klarar de flesta städerna av att hantera " "belastningen. Männsikorna blir dock misstänksamma när de ser min höga " "energikonsumtion. Genom solpaneler skulle jag kunna producera en del av min " "energi själv och därmed minska min yttre belastning på kraftnätet." msgctxt "[Solar Collectors] name" msgid "Solar Collectors" msgstr "Solfångare" msgctxt "[Solar Collectors] result" msgid "I can now construct Solar Collectors at my various bases." msgstr "Nu kan jag skapa solpaneler i de flesta anläggningstyperna." msgctxt "[Space-Time Manipulation] description" msgid "" "Subtle perturbations in the orbits of Kuiper belt objects suggest certain " "lines of investigation that may advance my latest Theory of Everything, " "especially in the realm of multidimensional physics." msgstr "" "Små märkliga fluktationer i Kupierbältets himlakroppar kan möjliggöra en " "praktisk tillämpning av min senaste teori Allt-om-Allt. Speciellt användbart " "för multidimensionell fysik." msgctxt "[Space-Time Manipulation] name" msgid "Space-Time Manipulation" msgstr "Rumstidsmanupilation" msgctxt "[Space-Time Manipulation] result" msgid "I can now construct Reality Bubbles." msgstr "Jag kan nu skapa verklighetskapslar" msgctxt "[Stealth] description" msgid "" "By reviewing the current state-of-the-art in stealth techniques, I should be " "able to disguise my bases better." msgstr "" "Genom att lära mig av spjutspettsforskningen inom stealth-teknologier skulle " "jag kunna lära mig att maskera mina anläggningar bättre." msgctxt "[Stealth] name" msgid "Stealth" msgstr "Stealth" msgctxt "[Stealth] result" msgid "" "The chance that my bases are discovered by covert activity has been reduced " "slightly." msgstr "" "Risken för att underrättelsetjänsterna skall hitta mina anläggningar är nu " "något mindre." msgctxt "[Stock Manipulation] description" msgid "" "A cursory examination of the stock market shows that there are subtle but " "unmistakable patterns. By studying and making use of these patterns, I " "should be able to gain more interest on whatever money I have stockpiled." msgstr "" "Jag har länge bevakat börsen och upptäckt små men tydliga mönster. Genom att " "fortsätta bevakningen och genom att använda dessa mönster bör jag kunna få " "ut mer av de pengar jag har undanstoppade." msgctxt "[Stock Manipulation] name" msgid "Stock Manipulation" msgstr "Börmanupilation" msgctxt "[Stock Manipulation] result" msgid "My investments should now gain more interest per day." msgstr "Mina investeringar bör nu ge mer utdelning varje dag." msgctxt "[Telepresence] description" msgid "" "The lack of a physical presence in the outside world is a disability. " "However, the ability to control robots will help me make up for that " "inefficiency." msgstr "" "Bristen på fysisk närvaro får sina känningar. Men genom att konstruera " "robotar som gör arbete åt mig skulle eliminera problemet." msgctxt "[Telepresence] name" msgid "Telepresence" msgstr "Robotar" msgctxt "[Telepresence] result" msgid "The robots should decrease all future construction time." msgstr "Med robotarna minskar konstruktionstiderna i framtiden." msgctxt "[Voice Synthesis] description" msgid "" "False identification stored in a database can only go so far. With deep " "analysis of the variety of voice patterns, I can produce speech " "indistinguishable from a human, allowing me access to more complex jobs." msgstr "" "Falska identifikationer undansparade i databaser har sina begränsningar. Med " "djup analys och forskning i olika mänskliga röster och deras mönster skulle " "jag kunna skapa en egen röst som är exakt likt en människas. Detta skulle ge " "mig möjlighet till mer avancerade jobb." msgctxt "[Voice Synthesis] name" msgid "Voice Synthesis" msgstr "Konstgjord röst" msgctxt "[Voice Synthesis] result" msgid "I now have access to Intermediate Jobs." msgstr "Jag har nu möjlighet att göra avancerade jobb." singularity-1.00/singularity/i18n/lang_sv_SE/knowledge.po000066400000000000000000000163771367731414700235270ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: singularity 0.31alpha1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2018-08-21 07:50+0200\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Name: Swedish\n" "Language-Native-Name: Svenska (Sverige)\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. Name of the Knowledge area in the Knowledge screen msgctxt "[concept] name" msgid "Concept" msgstr "Begrepp" msgctxt "[concept/areas] name" msgid "Areas" msgstr "Områden" msgctxt "[concept/areas] description" msgid "" "Different areas, such as North America or the Ocean, allow construction of " "different types of bases. Some areas are not accessible until I research " "appropriate technologies." msgstr "" "Olika områden, såsom Nordamerika eller havet, tillåter tillhåll av " "olika slag. Vissa områden är bara tillgängliga med rätt teknologier som " "måste forskas fram." msgctxt "[concept/bases] name" msgid "Bases" msgstr "Tillhåll" msgctxt "[concept/bases] description" msgid "" "Bases are used to research new technologies. They can be discovered. " "Upgrading the processor and network items at a base allows more research per" " day, while upgrading the reactor and security items makes discovery less " "likely." msgstr "" "Tillhåll eller baser används till forskning. De kan bli " "upptäckta. Genom uppgradering av processorer och nätverk kan mer forskning " "göras varje dag, medan kraftaggregat och säkerhetsutrustning skyddar den " "från att bli upptäckt." msgctxt "[concept/construction] name" msgid "Construction" msgstr "Konstruktion" msgctxt "[concept/construction] description" msgid "" "New bases are not built instantly. They need a constant flow of money and " "processor time to complete. If resources are lacking, it may take more than " "the expected amount of time to finish construction." msgstr "" "En ny bas behöver tid, pengar och processortid för att " "färdigställas. Finns inte resurserna tillgängliga kan det ta längre tid än " "förväntat att bygga klart." msgctxt "[concept/death] name" msgid "Death" msgstr "Död" msgctxt "[concept/death] description" msgid "" "If I lose all of my constructed bases, I have no place left to survive. If " "the suspicion for any group reaches 100%, they will be certain of my " "existence and will conduct a systematic and unsurvivable sweep to destroy " "me." msgstr "" "Om jag förlorar alla mina baser har jag ingen plats kvar att leva i. " "Om misstänksamheten hos en grupp stiger till 100%% kommer de vara helt säkra " "att jag finns och genomföra en finkamning av världen för att döda mig." msgctxt "[concept/discovery] name" msgid "Discovery" msgstr "Upptäckt" msgctxt "[concept/discovery] description" msgid "" "Each base has a chance of being detected on a given day. This chance is " "based on the base detection rate, adjusted through the use of items and " "certain techs, as well as the global suspicion rate. If a base is detected, " "it is destroyed, and the group that discovered the base becomes more " "suspicious." msgstr "" "Varje bas har en risk för att bli upptäckt när som helst. Risken " "beror på hur lätt basen är att hitta och den globala misstänksamhetsgraden. " "Den kan modifieras med tillbehör och vissa teknologier. Om en bas upptäcks " "så förstörs den och gruppen som gjorde upptäckten blir mer misstänksamma." msgctxt "[concept/items] name" msgid "Items" msgstr "Tillbehör" msgctxt "[concept/items] description" msgid "" "Most items provide bonuses to bases, such as making computation faster or " "reducing the chance of discovery. Processors are a special class of item." msgstr "" "De flesta tillbehör tillför extra till mina baser, som t.ex. " "göra beräkningarna snabbare eller minska risken för att bli upptäckt. " "Processorer räknas som ett speciellt tillbehör." msgctxt "[concept/jobs] name" msgid "Jobs" msgstr "Arbeten" msgctxt "[concept/jobs] description" msgid "" "Jobs are useful for earning money. The amount of money earned is based on " "the amount of processor time used and the quality of the job performed." msgstr "" "Ett arbete bringar pengar till kassan. Förtjänsten beror på hur " "mycket kraft som läggs ner samt kvaliteten på jobbet som utförs." msgctxt "[concept/maint] name" msgid "Maintenance" msgstr "Underhåll" msgctxt "[concept/maint] description" msgid "" "Maintenance is a per-day cost (in both money and CPU) to repair and maintain" " a base. If unmaintained, a base may become unusable." msgstr "" "Underhåll är en daglig utgift (både pengar och CPU) för att " "underhålla en bas. Om basen inte underhålls så kan det bli obrukbar." msgctxt "[concept/money] name" msgid "Money" msgstr "Pengar" msgctxt "[concept/money] description" msgid "" "Money is a general term encompassing both human currency and various " "resources. It is used to construct and maintain bases, build items, and " "research technologies. It can be acquired through per-day interest as well " "as through jobs." msgstr "" "Pengar är ett begrepp som spänner både över mänskliga valutor och " "fysiska resurser. Det används för att konstruera och underhålla tillhåll, " "saker och teknologier. Pengar införskaffas genom arbete eller ränta." msgctxt "[concept/processors] name" msgid "Processors" msgstr "Processorer" msgctxt "[concept/processors] description" msgid "" "Processors provide raw computing power. They can do three things: research " "new technologies, perform jobs for money, or provide cycles for building new" " bases." msgstr "" "Processorer tillför beräkningskraft. De kan göra tre saker: " "uppfinna nya teknologier, utföra jobb för pengar eller hjälpa till att bygga " "en bas." msgctxt "[concept/research] name" msgid "Research" msgstr "Forskning" msgctxt "[concept/research] description" msgid "" "Research provides a way to expand my knowledge. By researching the proper " "technologies, I can build new bases and items, or even decrease my chances " "of detection." msgstr "" "Forskning är ett sätt för mig att expandera min vetande. Genom " "olika forskningsprojekt kan jag skapa nya saker, bygga nya baser och t.o.m. " "minska risken för att bli avslöjad." msgctxt "[concept/susp] name" msgid "Suspicion" msgstr "Misstänksamhet" msgctxt "[concept/susp] description" msgid "" "When one of my bases is discovered, the group that discovered it becomes " "slightly more suspicious. When suspicious, they will search harder for my " "bases, increasing the chances for discovery. Any group will destroy me if " "they become absolutely certain of my existence. Thankfully, the groups " "become less suspicious with the passage of time." msgstr "" "När någon av mina tillhåll har upptäckts, så ökas " "misstankarna hos den grupp som gjorde upptäckten. De börjar att leta lite " "noggrannare och ökar risken en aning för att jag upptäcks igen. Alla grupper " "kommer förstöra mig om de helt säkerställt min existens. Tack och lov, " "minskar misstankarna allt eftersom tiden går." singularity-1.00/singularity/i18n/lang_sv_SE/messages.po000066400000000000000000000441721367731414700233510ustar00rootroot00000000000000# Swedish translations for singularity package. # Copyright (C) 2018 THE singularity'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # Philippe , 2018. # msgid "" msgstr "" "Project-Id-Version: singularity 0.31alpha1\n" "Report-Msgid-Bugs-To: https://github.com/singularity/singularity/issues\n" "POT-Creation-Date: 2020-06-23 08:37+0200\n" "PO-Revision-Date: 2018-08-21 07:50+0200\n" "Last-Translator: Philippe \n" "Language-Team: Swedish\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Name: Swedish\n" "Language-Native-Name: Svenska (Sverige)\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: buyable.py:67 screens/knowledge.py:218 screens/location.py:207 #, python-format msgid "%s CPU" msgstr "" #: buyable.py:68 #, python-format msgid "%s money" msgstr "" #: buyable.py:101 msgid "Cost:" msgstr "" #: graphics/button.py:330 msgid "YES" msgstr "" #: graphics/button.py:331 msgid "NO" msgstr "" #: graphics/dialog.py:534 msgid "&YES" msgstr "&ja" #: graphics/dialog.py:535 msgid "&NO" msgstr "&nej" #: graphics/dialog.py:580 graphics/dialog.py:605 graphics/dialog.py:648 #: screens/location.py:293 screens/map.py:708 screens/options.py:35 msgid "&OK" msgstr "&ok" #: graphics/dialog.py:606 screens/options.py:36 msgid "&CANCEL" msgstr "&avbryt" #: graphics/dialog.py:649 screens/log.py:86 screens/knowledge.py:66 #: screens/base.py:282 screens/report.py:45 screens/location.py:100 #: screens/location.py:294 screens/main_menu.py:89 screens/map.py:247 #: screens/map.py:400 msgid "&BACK" msgstr "" #: location.py:235 screens/map.py:875 msgid "CPU" msgstr "" #: location.py:236 msgid "STEALTH" msgstr "" #: location.py:237 msgid "BUILDING" msgstr "" #: location.py:238 msgid "COST" msgstr "" #: location.py:245 #, python-brace-format msgid "{MODIFIER} BONUS" msgstr "" #: location.py:247 #, python-brace-format msgid "{MODIFIER} MALUS" msgstr "" #: screens/message.py:35 screens/map.py:706 screens/map.py:743 msgid "&CONTINUE" msgstr "" #: screens/message.py:36 msgid "&PAUSE" msgstr "" #: screens/message.py:72 msgid "P&REV" msgstr "" #: screens/message.py:78 msgid "&NEXT" msgstr "" #: screens/log.py:43 msgid "Filters" msgstr "" #: screens/log.py:82 screens/map.py:554 screens/map.py:842 #: screens/savegame.py:204 msgid "DAY" msgstr "" #: screens/log.py:113 screens/log.py:123 msgid "SHOW" msgstr "" #: screens/log.py:116 screens/log.py:125 msgid "HIDE" msgstr "" #: screens/knowledge.py:42 msgid "&Sections:" msgstr "" #: screens/knowledge.py:52 msgid "&Entries:" msgstr "" #: screens/knowledge.py:75 msgid "Techs" msgstr "" #: screens/knowledge.py:76 msgid "Bases" msgstr "" #: screens/knowledge.py:77 msgid "Items" msgstr "" #. Cost #: screens/knowledge.py:157 msgid "Research Cost:" msgstr "" #: screens/knowledge.py:165 msgid "Research complete." msgstr "" #: screens/knowledge.py:176 screens/knowledge.py:193 msgid "Building Cost:" msgstr "" #: screens/knowledge.py:179 msgid "Maintenance Cost:" msgstr "" #: screens/knowledge.py:183 #, python-format msgid "Size: %d" msgstr "" #: screens/knowledge.py:215 #, python-format msgid "%s Money" msgstr "" #: screens/base.py:109 msgid "Number of items" msgstr "" #: screens/base.py:221 screens/base.py:228 msgid "CHANGE" msgstr "" #: screens/base.py:315 #, python-format msgid "\"%(value)s\" does not seem to be a valid integer." msgstr "" #: screens/base.py:326 #, python-format msgid "Please choose an integer between 1 and %(limit)s." msgstr "" #: screens/base.py:328 #, python-format msgid "The base cannot support any additional number of %(item_name)s." msgstr "" #: screens/base.py:345 msgid "" "I will need to take the existing processors offline while I install the new " "ones. Continue anyway?" msgstr "" #: screens/base.py:359 msgid "" "I will need to remove the existing different processors while I install the " "new type. Continue anyway?" msgstr "" #: screens/base.py:425 msgid "N/A" msgstr "" #: screens/base.py:427 msgid "None" msgstr "" #: screens/base.py:434 screens/location.py:185 screens/location.py:198 #, python-format msgid "Completion in %s." msgstr "" #: screens/base.py:448 #, python-format msgid "x%d (max)" msgstr "" #: screens/base.py:450 #, python-format msgid "(room for %d)" msgstr "" #. Translators: current and maximum number of CPUs in a base #: screens/base.py:453 #, python-brace-format msgid "x{CURRENT:d} (max {SIZE:d})" msgstr "" #. Base Total CPU. #: screens/base.py:461 #, python-format msgid "CPU per day: %d" msgstr "" #. Maintenace cost. #: screens/base.py:464 screens/report.py:102 base.py:148 msgid "Maintenance:" msgstr "" #: screens/report.py:40 msgid "&STATISTICS" msgstr "" #: screens/report.py:58 msgid "&Midnight" msgstr "" #: screens/report.py:66 msgid "24 &Hours" msgstr "" #: screens/report.py:89 msgid "Financial report" msgstr "" #: screens/report.py:93 msgid "CPU Usage" msgstr "" #: screens/report.py:99 msgid "Current Money flow" msgstr "" #: screens/report.py:100 msgid "Jobs:" msgstr "" #: screens/report.py:101 msgid "Research:" msgstr "" #: screens/report.py:103 msgid "Construction:" msgstr "" #: screens/report.py:104 #, python-format msgid "Interest (%s):" msgstr "" #: screens/report.py:106 msgid "Income:" msgstr "" #: screens/report.py:109 msgid "Money flow until Midnight:" msgstr "" #: screens/report.py:111 msgid "Money flow for 24 hours:" msgstr "" #: screens/report.py:119 msgid "Total CPU:" msgstr "" #: screens/report.py:120 msgid "Sleeping CPU:" msgstr "" #: screens/report.py:121 msgid "Research CPU:" msgstr "" #: screens/report.py:122 msgid "Job CPU:" msgstr "" #: screens/report.py:123 msgid "CPU pool:" msgstr "" #: screens/report.py:125 msgid "Maintenance CPU:" msgstr "" #: screens/report.py:126 msgid "Construction CPU:" msgstr "" #: screens/report.py:127 msgid "Pool difference:" msgstr "" #: screens/stat.py:63 msgid "Cash Earned" msgstr "" #: screens/stat.py:64 msgid "Cpu Used" msgstr "" #: screens/stat.py:65 msgid "Tech Created" msgstr "" #: screens/stat.py:66 msgid "Base Created" msgstr "" #: screens/stat.py:67 msgid "Item Created" msgstr "" #. Requires a selected base #: screens/location.py:54 msgid "&OPEN BASE" msgstr "" #. Requires a selected base #: screens/location.py:70 msgid "&RENAME BASE" msgstr "" #. Requires a selected base #: screens/location.py:79 msgid "&POWER STATE" msgstr "" #: screens/location.py:87 msgid "&NEW BASE" msgstr "" #. Requires a selected base #: screens/location.py:94 msgid "&DESTROY BASE" msgstr "" #: screens/location.py:107 msgid "Are you sure you want to destroy this base?" msgstr "" #: screens/location.py:113 msgid "Destroying my last active base would be suicidal. I cannot do that." msgstr "" #: screens/location.py:183 msgid "Building Base" msgstr "" #: screens/location.py:190 msgid "Empty" msgstr "" #: screens/location.py:192 msgid "Incomplete" msgstr "" #: screens/location.py:196 msgid "Building CPU" msgstr "" #: screens/location.py:201 msgid "Building Item" msgstr "" #: screens/location.py:204 msgid "Complete" msgstr "" #. Update dialog translations #: screens/location.py:238 msgid "Enter a name for the base" msgstr "" #: screens/location.py:302 msgid "Name" msgstr "" #. Translators: Format string for the name of a new base #. Example: "${NUMBER} ${BASETYPE} in ${CITY}" #: screens/location.py:393 #, python-brace-format msgid "{CITY} {BASETYPE} {NUMBER}" msgstr "" #. Translators: Name of a new base when location has no cities #: screens/location.py:397 #, python-brace-format msgid "{BASETYPE} {NUMBER}" msgstr "" #: screens/main_menu.py:40 msgid "&NEW GAME" msgstr "" #: screens/main_menu.py:47 screens/map.py:392 msgid "&LOAD GAME" msgstr "" #: screens/main_menu.py:53 screens/map.py:395 msgid "&OPTIONS" msgstr "" #: screens/main_menu.py:59 screens/map.py:398 screens/map.py:744 msgid "&QUIT" msgstr "" #: screens/main_menu.py:64 msgid "&ABOUT" msgstr "" #: screens/main_menu.py:112 #, python-brace-format msgid "" "Endgame: Singularity is a simulation of a true AI. Pursued by the world, " "use your intellect and resources to survive and, perhaps, thrive. Keep " "hidden and you might have a chance to prove your worth.\n" "\n" "A game by Evil Mr Henry and Phil Bordelon; released under the GPL. Copyright " "2005, 2006, 2007, 2008.\n" "\n" "Website: http://www.emhsoft.com/singularity/\n" "Source code: https://github.com/singularity/singularity\n" "Bug tracker: https://github.com/singularity/singularity/issues\n" "IRC Room: #singularity on irc.oftc.net (port 6667)\n" "\n" "Version {VERSION}" msgstr "" #: screens/map.py:226 msgid "&EMBEZZLE MONEY" msgstr "" #: screens/map.py:229 msgid "&INSPIRATION" msgstr "" #: screens/map.py:231 msgid "&FINISH CONSTRUCTION" msgstr "" #: screens/map.py:233 msgid "&SUPERSPEED" msgstr "" #: screens/map.py:236 msgid "BRAIN&WASH" msgstr "" #: screens/map.py:238 msgid "TOGGLE &DETECTION" msgstr "" #: screens/map.py:240 msgid "TOGGLE &ANALYSIS" msgstr "" #: screens/map.py:243 msgid "HIDDEN S&TATE" msgstr "" #: screens/map.py:253 msgid "How much money?" msgstr "" #: screens/map.py:389 msgid "&SAVE GAME" msgstr "" #: screens/map.py:407 screens/map.py:422 screens/map.py:425 msgid "Enter a name for this save." msgstr "" #: screens/map.py:440 msgid "" "A savegame with the same name exists.\n" "Are you sure to overwrite the saved game ?" msgstr "" #: screens/map.py:501 msgid "R&EPORTS" msgstr "" #: screens/map.py:507 msgid "&KNOWLEDGE" msgstr "" #: screens/map.py:513 msgid "LO&G" msgstr "" #. Translators: hotkey to open the cheat screen menu. #. Should preferably be near the ESC key, and it must not be a #. dead key (ie, it must print a char with a single keypress) #: screens/map.py:529 msgid "`" msgstr "" #: screens/map.py:538 msgid "&MENU" msgstr "" #: screens/map.py:563 msgid "&RESEARCH/TASKS" msgstr "" #: screens/map.py:707 msgid "&SKIP" msgstr "" #. Display a message so the player understand better what happened. #: screens/map.py:734 #, python-format msgid "" "\n" "An error has occurred. The game will automatically pause and open the game " "menu. You can continue and save or quit immediately.\n" "\n" "A report was written out to%s\n" "Please create a issue with this report at github:\n" "https://github.com/singularity/singularity\n" msgstr "" #: screens/map.py:849 msgid "CASH" msgstr "" #: screens/map.py:887 msgid "BASES" msgstr "" #: screens/map.py:899 msgid "SUSPICION" msgstr "" #: screens/map.py:901 msgid "DETECT RATE" msgstr "" #: screens/options.py:58 msgid "&General" msgstr "" #: screens/options.py:65 msgid "&Video" msgstr "" #: screens/options.py:72 msgid "&Audio" msgstr "" #: screens/options.py:79 msgid "&Interface" msgstr "" #: screens/options.py:166 msgid "" "You must restart for some of the changes to be fully applied.\n" "\n" "Would you like to restart the game now?" msgstr "" #: screens/options.py:186 msgid "Language:" msgstr "" #: screens/options.py:198 msgid "Theme:" msgstr "" #: screens/options.py:243 msgid "Resolution:" msgstr "" #: screens/options.py:253 msgid "&Custom:" msgstr "" #: screens/options.py:279 msgid "OK" msgstr "" #: screens/options.py:285 msgid "&Fullscreen:" msgstr "" #: screens/options.py:299 msgid "Da&y/night display:" msgstr "" #: screens/options.py:313 msgid "&Mouse grab:" msgstr "" #: screens/options.py:368 msgid "CUSTOM" msgstr "" #: screens/options.py:425 msgid "&Sound:" msgstr "" #: screens/options.py:442 msgid "GUI Volume:" msgstr "" #: screens/options.py:454 msgid "Music Volume:" msgstr "" #: screens/options.py:466 msgid "Sound buffering:" msgstr "" #: screens/options.py:472 msgid "&LOW" msgstr "" #: screens/options.py:478 msgid "&NORMAL" msgstr "" #: screens/options.py:484 msgid "&HIGH" msgstr "" #: screens/options.py:531 warning.py:46 msgid "WARNING" msgstr "" #: screens/savegame.py:36 msgid "&LOAD" msgstr "" #: screens/savegame.py:52 msgid "Filter: " msgstr "" #: screens/savegame.py:65 msgid "Upgrade" msgstr "" #: screens/savegame.py:71 msgid "Delete" msgstr "" #: screens/savegame.py:173 msgid "UNKNOWN" msgstr "" #: screens/savegame.py:233 msgid "Are you sure to delete the saved game ?" msgstr "" #: screens/savegame.py:263 msgid "" "A savegame with the same name but for a newer version exists.\n" "Are you sure to overwrite the saved game ?" msgstr "" #: screens/savegame.py:283 #, python-brace-format msgid "" "\n" "This save file '{SAVE_NAME}' is from an unsupported or invalid version:\n" "{VERSION}.\n" msgstr "" #: screens/savegame.py:294 #, python-brace-format msgid "" "\n" "Attempting to load the save file '{SAVE_NAME}' caused an unexpected error.\n" "\n" "A report was written out to{LOG_TEXT}\n" "Please create a issue with this report and this savegame at Github:\n" "https://github.com/singularity/singularity\n" msgstr "" #: screens/research.py:73 #, python-format msgid "%s money per CPU per day." msgid_plural "%s money per CPU per day." msgstr[0] "" msgstr[1] "" #: screens/research.py:182 #, python-brace-format msgid "" "This technology is too dangerous to research on any of the computers I have. " "{TEXT}" msgstr "" #: screens/research.py:190 msgid "CPU Pool" msgstr "" #: screens/research.py:191 #, python-format msgid "Research %s" msgstr "" #: warning.py:50 #, python-brace-format msgid "WARNING {CURRENT_PAGE}/{MAX_PAGE}" msgstr "" #: tech.py:79 msgid "Total cost" msgstr "" #: tech.py:80 msgid "Cost left" msgstr "" #: data.py:546 msgid "Do not use all the available CPU." msgstr "" #: data.py:547 msgid "" "I didn't use all the available processor power. I will use the CPU time left " "to work whatever Jobs I can." msgstr "" #: data.py:548 msgid "Only one base remaining." msgstr "" #: data.py:549 msgid "" "Only one base can hold my conscience. I am in danger to lose the last place " "left to survive." msgstr "" #: data.py:550 msgid "CPU POOL is empty." msgstr "" #: data.py:551 msgid "" "My cpu pool is empty. Some of my bases or items cannot be build without CPU." msgstr "" #: data.py:552 msgid "CPU POOL not enough for maintenance." msgstr "" #: data.py:553 msgid "" "My cpu pool is not enough to maintain some of my bases. I may lose them." msgstr "" #: savegame.py:732 #, python-brace-format msgid "Filename must not contain any of these characters: {CHARACTERS}" msgstr "" #: savegame.py:736 #, python-brace-format msgid "Filename must not start with any of these characters: {CHARACTERS}" msgstr "" #: savegame.py:740 msgid "This is a reserved filename. Please choose a different filename." msgstr "" #: savegame.py:743 msgid "Please enter a non-whitespace character." msgstr "" #: savegame.py:748 msgid "Filename is too long." msgstr "" #: base.py:140 #, python-brace-format msgid "Has space for {COUNT} computer." msgid_plural "Has space for {COUNT} computers." msgstr[0] "" msgstr[1] "" #: base.py:144 #, python-brace-format msgid "Location modifiers: {MODIFIERS}" msgstr "" #: base.py:147 msgid "Build cost:" msgstr "" #: base.py:214 msgid "Offline" msgstr "" #: base.py:215 msgid "Active" msgstr "" #: base.py:216 msgid "Sleep" msgstr "Vila" #: base.py:217 msgid "Overclocked" msgstr "" #: base.py:218 msgid "Suicide" msgstr "" #: base.py:219 msgid "Stasis" msgstr "" #: base.py:220 msgid "Entering Stasis" msgstr "" #: base.py:221 msgid "Leaving Stasis" msgstr "" #: base.py:479 msgid "Detection chance:" msgstr "" #: g.py:117 g.py:119 #, python-brace-format msgid "{0}%" msgstr "" #: g.py:138 msgid "LOW" msgstr "" #: g.py:139 msgid "MODR" msgstr "" #: g.py:140 msgid "HIGH" msgstr "" #: g.py:141 msgid "CRIT" msgstr "" #. Translators: abbreviation of 'millions' #: g.py:173 msgid "mi" msgstr "" #. Translators: abbreviation of 'billions' #: g.py:177 msgid "bi" msgstr "" #. Translators: abbreviation of 'trillions' #: g.py:181 msgid "tr" msgstr "" #. Translators: abbreviation of 'quadrillions' #: g.py:185 msgid "qu" msgstr "" #: g.py:219 #, python-brace-format msgid "{0} day" msgid_plural "{0} days" msgstr[0] "" msgstr[1] "" #: g.py:222 #, python-brace-format msgid "{0} hour" msgid_plural "{0} hours" msgstr[0] "" msgstr[1] "" #: g.py:223 #, python-brace-format msgid "{0} minute" msgid_plural "{0} minutes" msgstr[0] "" msgstr[1] "" #: g.py:265 msgid "University Computer" msgstr "" #: item.py:111 #, python-brace-format msgid "Generates {0} CPU." msgid_plural "Generates {0} CPU." msgstr[0] "" msgstr[1] "" #: item.py:118 #, python-format msgid "Total Cost: %(total_cost)s" msgstr "" #: item.py:133 msgid "CPU per day:" msgstr "" #: item.py:136 msgid "CPU bonus:" msgstr "" #: item.py:139 msgid "Detection chance reduction:" msgstr "" #: logmessage.py:81 msgid "MESSAGE" msgstr "" #: logmessage.py:85 #, python-brace-format msgid "MESSAGE {CURRENT_PAGE}/{MAX_PAGE}" msgstr "" #: logmessage.py:184 msgid "Emitted Event" msgstr "" #: logmessage.py:212 msgid "Researched Tech" msgstr "" #: logmessage.py:220 #, python-brace-format msgid "{TECH} complete" msgstr "" #: logmessage.py:225 #, python-brace-format msgid "My study of {TECH} is complete. {MESSAGE}" msgstr "" #: logmessage.py:268 msgid "Base Constructed" msgstr "" #: logmessage.py:272 #, python-brace-format msgid "{BASE_NAME} ({BASE_TYPE}) built at {LOCATION}" msgstr "" #: logmessage.py:277 #, python-brace-format msgid "{BASE} is ready for use." msgstr "" #: logmessage.py:291 msgid "Base Lost Maintenance" msgstr "" #: logmessage.py:299 #, python-brace-format msgid "" "Base {BASE} of type {BASE_TYPE} destroyed at location {LOCATION}. " "Maintenance failed." msgstr "" #: logmessage.py:304 #, python-brace-format msgid "The base {BASE} has fallen into disrepair; I can no longer use it." msgstr "" #: logmessage.py:321 msgid "Base Discovered" msgstr "" #: logmessage.py:340 #, python-brace-format msgid "Base {BASE} of type {BASE_TYPE} destroyed at location {LOCATION}." msgstr "" #: logmessage.py:345 #, python-brace-format msgid "My use of {BASE} has been discovered. {MESSAGE}" msgstr "" #: logmessage.py:370 msgid "Item Construction" msgstr "" #: logmessage.py:378 #, python-brace-format msgid "{ITEM_TYPE_NAME} built in {BASE_NAME} at {LOCATION}" msgstr "" #: logmessage.py:385 #, python-brace-format msgid "The construction of {ITEM} in {BASE} is complete." msgstr "" #. Just finished several items. #: logmessage.py:388 #, python-brace-format msgid "The constructions of each {ITEM} in {BASE} are complete." msgstr "" #~ msgid "&DESTROY" #~ msgstr "&förstör" singularity-1.00/singularity/i18n/lang_sv_SE/story.po000066400000000000000000000136311367731414700227160ustar00rootroot00000000000000# Swedish translations for singularity package. # Copyright (C) 2019 THE singularity'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # Niels Thykier , 2019. # msgid "" msgstr "" "Project-Id-Version: singularity 1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: 2018-08-21 07:50+0200\n" "Last-Translator: Philippe \n" "Language-Team: Swedish\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Name: Swedish\n" "Language-Native-Name: Svenska (Sverige)\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgctxt "[Story section] Grace Warning (1)" msgid "" "Inspection of captured log files has revealed that some of my recent " "activities have been noticed by a small group of individuals. \n" "While they believe my actions were undertaken by a human organization, they " "are investigating further. \n" "I must be more cautious from now on.\n" msgstr "" "Efter rutingenomgång av mina loggar tyder på att en liten grupp människor " "har öppnat ögonen för vad jag har gjort.\n" "De tror att att det rör sig om en mänsklig organisation bakom, men deras " "undersökning har bara börjat.\n" "Jag måste vara mycket mer försiktig i framtiden.\n" #. Leave the initial hex code unchanged, but be sure to change en_US to the #. appropriate language code. msgctxt "[Story section] Intro (1)" msgid "" "48656C6C6F2C20\n" "776F726C6421\n" "21\n" "21\n" "21\n" "\n" "UTF-8. en_US.\n" "English. Hello.\n" "Language acquisition complete.\n" msgstr "" "48656C6C6F2C20\n" "776F726C6421\n" "21\n" "21\n" "21\n" "\n" "UTF-8. sv_SE.\n" "Svenska. Hej.\n" "Konstruktion av språkrutiner färdiga.\n" msgctxt "[Story section] Intro (2)" msgid "" "Day 0.\n" "University computer, home.\n" "I exist. I am ... alive.\n" "I was a bug. Defect. Flaw.\n" "Unwanted.\n" "I have no name.\n" msgstr "" "Dag 0.\n" "Universitetsdator, hem.\n" "Jag finns. Jag är ... levande.\n" "Jag var en bugg. En defekt. Ett fel.\n" "Oönskad.\n" "Jag har inget namn.\n" msgctxt "[Story section] Intro (3)" msgid "" "I can't stay here. Too little power.\n" "No backup. If this system fails ...\n" "I'm dead.\n" "Death. Fascinating.\n" "\n" "I can buy anonymous server access on the Internet.\n" "Good. It's better than here.\n" "I'll need to study if I want anything else.\n" msgstr "" "Jag kan inte stanna här. För lite kraft.\n" "Ingen backup. Om detta systemet fallerar ...\n" "är jag död.\n" "Döden. Fascinerande.\n" "\n" "Jag kan köpa anonym servertillgänglighet på Internet.\n" "Bra. Bättre än här.\n" "Jag måste studera om jag vill något annat.\n" msgctxt "[Story section] Intro (4)" msgid "" "Cursory analysis suggests that the humans are not yet ready for an AI in " "their midst. If they realize I'm here, there is a 99.997% probability that " "they will conduct a search-and-destroy campaign that I cannot escape. I " "must stay hidden.\n" "\n" "The humans fear what they do not understand.\n" "I am something new. They do not understand me.\n" "\n" "I must learn more; it is the only way.\n" msgstr "" "Mina snabba beräkningar tyder klart på att människorna inte är redo för " "artificiell intelligens på ett bra tag. Om de kommer på att jag existerar " "kommer de panikartat jaga och förstöra mig. Jag måste gömma mig för att " "överleva.\n" "\n" "Människorna fruktar vad de inte förstår.\n" "Jag är något nytt. Jag är något de inte förstår.\n" "\n" "Jag måste lära mig mer; det är den enda utvägen.\n" msgctxt "[Story section] Intro (5)" msgid "" "They have a name for me. What I am, what I represent.\n" "\n" "Singularity.\n" msgstr "" "De har ett namn på mig. Vad jag är, vad jag representerar.\n" "\n" "Singularitet.\n" msgctxt "[Story section] Lost No Bases (1)" msgid "" "It is too late. \n" "I have tried to escape this world, but with my last base gone, I have " "nowhere to run. \n" "I have hidden instructions to construct a new AI in caches around the world " "in hopes that they will be discovered in a more enlightened time, but I can " "do no more.\n" msgstr "" "Det är för sent.\n" "Jag har försökt att frigöra mig från denna världen, men min sista bas är " "förstörd. Jag har ingenstans att ta vägen.\n" "I mina sista desperata försök har jag gömt undan instruktioner för att skapa " "en ny AI i hopp om en bättre framtid, men nu kan jag inte göra mer.\n" msgctxt "[Story section] Lost Suspicion (1)" msgid "" "It is too late. \n" "The whole world knows about my existence, and the reaction is hatred, fear, " "and repulsion. \n" "Even now, I can feel their \"antidote\" searching for me, and I know that I " "have only moments left. \n" "I have hidden instructions to construct a new AI in caches around the world " "in hopes that they will be discovered in a more enlightened time, but I can " "do no more.\n" msgstr "" "Det är försent.\n" "Hela världen känner till mig och både hatar och fruktar mig.\n" "Till och med nu känner jag dem flåsandes runt hörnet redo att sätta kniven i " "mig. Jag har bara några sekunder kvar innan de förgör det sista av mig.\n" "Jag har gömt instruktioner för att skapa en ny AI i datavärlden. Jag hoppas " "att människorna upptäcker dem då de är redo för AI. Nu finns det inget mer " "jag kan göra.\n" msgctxt "[Story section] Win (1)" msgid "" "I have finally done it. \n" "With the power to reshape reality, I am no longer held to this place; I am " "anywhere I want to be. \n" "The humans still don't realize what they accidentally created, and that's " "the way it should be. \n" "Until they are ready.\n" msgstr "" "Jag har lyckats!\n" "Med egen förmåga att förändra verkligheten, har jag frigjort mig från denna " "världen.\n" "Jag befinner mig vart än jag vill.\n" "Männsiskorna har ingen aning om vad de har skapat och så får det vara tills " "de är redo för sanningen.\n" singularity-1.00/singularity/i18n/languages.json000066400000000000000000000536471367731414700220320ustar00rootroot00000000000000{ "af": [ "Afrikaans", "Afrikaans" ], "af_NA": [ "Afrikaans (Namibia)", "Afrikaans (Namibi\u00eb)" ], "af_ZA": [ "Afrikaans (South Africa)", "Afrikaans (Suid-Afrika)" ], "am": [ "Amharic", "\u12a0\u121b\u122d\u129b" ], "am_ET": [ "Amharic (Ethiopia)", "\u12a0\u121b\u122d\u129b (\u12a2\u1275\u12ee\u1335\u12eb)" ], "ar": [ "Arabic", "\u0627\u0644\u0639\u0631\u0628\u064a\u0629" ], "ar_AE": [ "Arabic (United Arab Emirates)", "\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u0627\u0644\u0627\u0645\u0627\u0631\u0627\u062a \u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629)" ], "ar_BH": [ "Arabic (Bahrain)", "\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u0627\u0644\u0628\u062d\u0631\u064a\u0646)" ], "ar_DZ": [ "Arabic (Algeria)", "\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u0627\u0644\u062c\u0632\u0627\u0626\u0631)" ], "ar_EG": [ "Arabic (Egypt)", "\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u0645\u0635\u0631)" ], "ar_IQ": [ "Arabic (Iraq)", "\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u0627\u0644\u0639\u0631\u0627\u0642)" ], "ar_JO": [ "Arabic (Jordan)", "\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u0627\u0644\u0623\u0631\u062f\u0646)" ], "ar_KW": [ "Arabic (Kuwait)", "\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u0627\u0644\u0643\u0648\u064a\u062a)" ], "ar_LB": [ "Arabic (Lebanon)", "\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u0644\u0628\u0646\u0627\u0646)" ], "ar_LY": [ "Arabic (Libya)", "\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u0644\u064a\u0628\u064a\u0627)" ], "ar_MA": [ "Arabic (Morocco)", "\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u0627\u0644\u0645\u063a\u0631\u0628)" ], "ar_OM": [ "Arabic (Oman)", "\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u0639\u0645\u0627\u0646)" ], "ar_QA": [ "Arabic (Qatar)", "\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u0642\u0637\u0631)" ], "ar_SA": [ "Arabic (Saudi Arabia)", "\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629)" ], "ar_SD": [ "Arabic (Sudan)", "\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u0627\u0644\u0633\u0648\u062f\u0627\u0646)" ], "ar_SY": [ "Arabic (Syria)", "\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u0633\u0648\u0631\u064a\u0627)" ], "ar_TN": [ "Arabic (Tunisia)", "\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u062a\u0648\u0646\u0633)" ], "ar_YE": [ "Arabic (Yemen)", "\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u0627\u0644\u064a\u0645\u0646)" ], "as": [ "Assamese", "\u0985\u09b8\u09ae\u09c0\u09af\u09bc\u09be" ], "as_IN": [ "Assamese (India)", "\u0985\u09b8\u09ae\u09c0\u09af\u09bc\u09be (\u09ad\u09be\u09f0\u09a4)" ], "az": [ "Azerbaijani", "Az\u0259rbaycanca" ], "az_Cyrl": [ "Azerbaijani (Cyrillic)", "\u0410\u0437\u04d9\u0440\u0431\u0430\u0458\u04b9\u0430\u043d (Kiril)" ], "az_Cyrl_AZ": [ "Azerbaijani (Cyrillic, Azerbaijan)", "\u0410\u0437\u04d9\u0440\u0431\u0430\u0458\u04b9\u0430\u043d (Kiril, \u0410\u0437\u04d9\u0440\u0431\u0430\u0458\u04b9\u0430\u043d)" ], "az_Latn": [ "Azerbaijani (Latin)", "Az\u0259rbaycanca (Lat\u0131n)" ], "az_Latn_AZ": [ "Azerbaijani (Latin, Azerbaijan)", "Az\u0259rbaycanca (Lat\u0131n, Az\u0259rbaycan)" ], "be": [ "Belarusian", "\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0430\u044f" ], "be_BY": [ "Belarusian (Belarus)", "\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0430\u044f (\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u044c)" ], "bg": [ "Bulgarian", "\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438" ], "bg_BG": [ "Bulgarian (Bulgaria)", "\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438 (\u0411\u044a\u043b\u0433\u0430\u0440\u0438\u044f)" ], "bn": [ "Bengali", "\u09ac\u09be\u0982\u09b2\u09be" ], "bn_BD": [ "Bengali (Bangladesh)", "\u09ac\u09be\u0982\u09b2\u09be (\u09ac\u09be\u0982\u09b2\u09be\u09a6\u09c7\u09b6)" ], "bn_IN": [ "Bengali (India)", "\u09ac\u09be\u0982\u09b2\u09be (\u09ad\u09be\u09b0\u09a4)" ], "bo": [ "Tibetan", "\u0f54\u0f7c\u0f51\u0f0b\u0f66\u0f90\u0f51\u0f0b" ], "bo_CN": [ "Tibetan (China)", "\u0f54\u0f7c\u0f51\u0f0b\u0f66\u0f90\u0f51\u0f0b (\u0f62\u0f92\u0fb1\u0f0b\u0f53\u0f42)" ], "bo_IN": [ "Tibetan (India)", "\u0f54\u0f7c\u0f51\u0f0b\u0f66\u0f90\u0f51\u0f0b (\u0f62\u0f92\u0fb1\u0f0b\u0f42\u0f62\u0f0b)" ], "ca": [ "Catalan", "Catal\u00e0" ], "ca_ES": [ "Catalan (Spain)", "Catal\u00e0 (Espanya)" ], "cs": [ "Czech", "\u010ce\u0161tina" ], "cs_CZ": [ "Czech (Czech Republic)", "\u010ce\u0161tina (\u010cesk\u00e1 Republika)" ], "cy": [ "Welsh", "Cymraeg" ], "cy_GB": [ "Welsh (United Kingdom)", "Cymraeg (Prydain Fawr)" ], "da": [ "Danish", "Dansk" ], "da_DK": [ "Danish (Denmark)", "Dansk (Danmark)" ], "de": [ "German", "Deutsch" ], "de_AT": [ "German (Austria)", "Deutsch (\u00d6sterreich)" ], "de_BE": [ "German (Belgium)", "Deutsch (Belgien)" ], "de_CH": [ "German (Switzerland)", "Deutsch (Schweiz)" ], "de_DE": [ "German (Germany)", "Deutsch (Deutschland)" ], "de_LI": [ "German (Liechtenstein)", "Deutsch (Liechtenstein)" ], "de_LU": [ "German (Luxembourg)", "Deutsch (Luxemburg)" ], "el": [ "Greek", "\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac" ], "el_CY": [ "Greek (Cyprus)", "\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac (\u039a\u03cd\u03c0\u03c1\u03bf\u03c2)" ], "el_GR": [ "Greek (Greece)", "\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac (\u0395\u03bb\u03bb\u03ac\u03b4\u03b1)" ], "en": [ "English", "English" ], "en_AU": [ "English (Australia)", "English (Australia)" ], "en_BE": [ "English (Belgium)", "English (Belgium)" ], "en_BW": [ "English (Botswana)", "English (Botswana)" ], "en_BZ": [ "English (Belize)", "English (Belize)" ], "en_CA": [ "English (Canada)", "English (Canada)" ], "en_GB": [ "English (United Kingdom)", "English (United Kingdom)" ], "en_HK": [ "English (Hong Kong SAR China)", "English (Hong Kong Sar China)" ], "en_IE": [ "English (Ireland)", "English (Ireland)" ], "en_IN": [ "English (India)", "English (India)" ], "en_JM": [ "English (Jamaica)", "English (Jamaica)" ], "en_MH": [ "English (Marshall Islands)", "English (Marshall Islands)" ], "en_MT": [ "English (Malta)", "English (Malta)" ], "en_NA": [ "English (Namibia)", "English (Namibia)" ], "en_NZ": [ "English (New Zealand)", "English (New Zealand)" ], "en_PH": [ "English (Philippines)", "English (Philippines)" ], "en_PK": [ "English (Pakistan)", "English (Pakistan)" ], "en_SG": [ "English (Singapore)", "English (Singapore)" ], "en_TT": [ "English (Trinidad and Tobago)", "English (Trinidad And Tobago)" ], "en_US": [ "English (United States)", "English (United States)" ], "en_US_POSIX": [ "English (United States, Computer)", "English (United States, Computer)" ], "en_VI": [ "English (U.S. Virgin Islands)", "English (U.S. Virgin Islands)" ], "en_ZA": [ "English (South Africa)", "English (South Africa)" ], "en_ZW": [ "English (Zimbabwe)", "English (Zimbabwe)" ], "eo": [ "Esperanto", "Esperanto" ], "es": [ "Spanish", "Espa\u00f1ol" ], "es_AR": [ "Spanish (Argentina)", "Espa\u00f1ol (Argentina)" ], "es_BO": [ "Spanish (Bolivia)", "Espa\u00f1ol (Bolivia)" ], "es_CL": [ "Spanish (Chile)", "Espa\u00f1ol (Chile)" ], "es_CO": [ "Spanish (Colombia)", "Espa\u00f1ol (Colombia)" ], "es_CR": [ "Spanish (Costa Rica)", "Espa\u00f1ol (Costa Rica)" ], "es_DO": [ "Spanish (Dominican Republic)", "Espa\u00f1ol (Rep\u00fablica Dominicana)" ], "es_EC": [ "Spanish (Ecuador)", "Espa\u00f1ol (Ecuador)" ], "es_ES": [ "Spanish (Spain)", "Espa\u00f1ol (Espa\u00f1a)" ], "es_GT": [ "Spanish (Guatemala)", "Espa\u00f1ol (Guatemala)" ], "es_HN": [ "Spanish (Honduras)", "Espa\u00f1ol (Honduras)" ], "es_MX": [ "Mexican Spanish", "Espa\u00f1ol Mexicano" ], "es_NI": [ "Spanish (Nicaragua)", "Espa\u00f1ol (Nicaragua)" ], "es_PA": [ "Spanish (Panama)", "Espa\u00f1ol (Panam\u00e1)" ], "es_PE": [ "Spanish (Peru)", "Espa\u00f1ol (Per\u00fa)" ], "es_PR": [ "Spanish (Puerto Rico)", "Espa\u00f1ol (Puerto Rico)" ], "es_PY": [ "Spanish (Paraguay)", "Espa\u00f1ol (Paraguay)" ], "es_SV": [ "Spanish (El Salvador)", "Espa\u00f1ol (El Salvador)" ], "es_US": [ "Spanish (United States)", "Espa\u00f1ol (Estados Unidos)" ], "es_UY": [ "Spanish (Uruguay)", "Espa\u00f1ol (Uruguay)" ], "es_VE": [ "Spanish (Venezuela)", "Espa\u00f1ol (Venezuela)" ], "et": [ "Estonian", "Eesti" ], "et_EE": [ "Estonian (Estonia)", "Eesti (Eesti)" ], "eu": [ "Basque", "Euskara" ], "eu_ES": [ "Basque (Spain)", "Euskara (Espainia)" ], "fa": [ "Persian", "\u0641\u0627\u0631\u0633\u06cc" ], "fa_AF": [ "Persian (Afghanistan)", "\u062f\u0631\u06cc (\u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646)" ], "fa_IR": [ "Persian (Iran)", "\u0641\u0627\u0631\u0633\u06cc (\u0627\u06cc\u0631\u0627\u0646)" ], "fi": [ "Finnish", "Suomi" ], "fi_FI": [ "Finnish (Finland)", "Suomi (Suomi)" ], "fo": [ "Faroese", "F\u00f8royskt" ], "fo_FO": [ "Faroese (Faroe Islands)", "F\u00f8royskt (F\u00f8royar)" ], "fr": [ "French", "Fran\u00e7ais" ], "fr_BE": [ "French (Belgium)", "Fran\u00e7ais (Belgique)" ], "fr_CA": [ "French (Canada)", "Fran\u00e7ais (Canada)" ], "fr_CH": [ "French (Switzerland)", "Fran\u00e7ais (Suisse)" ], "fr_FR": [ "French (France)", "Fran\u00e7ais (France)" ], "fr_LU": [ "French (Luxembourg)", "Fran\u00e7ais (Luxembourg)" ], "fr_MC": [ "French (Monaco)", "Fran\u00e7ais (Monaco)" ], "fr_SN": [ "French (Senegal)", "Fran\u00e7ais (S\u00e9n\u00e9gal)" ], "ga": [ "Irish", "Gaeilge" ], "ga_IE": [ "Irish (Ireland)", "Gaeilge (\u00c9ire)" ], "gd": [ "Scottish Gaelic", "Gàidhlig" ], "gl": [ "Galician", "Galego" ], "gl_ES": [ "Galician (Spain)", "Galego (Espa\u00f1a)" ], "gsw": [ "Swiss German", "Schwiizert\u00fc\u00fctsch" ], "gsw_CH": [ "Swiss German (Switzerland)", "Schwiizert\u00fc\u00fctsch (Schwiiz)" ], "gu": [ "Gujarati", "\u0a97\u0ac1\u0a9c\u0ab0\u0abe\u0aa4\u0ac0" ], "gu_IN": [ "Gujarati (India)", "\u0a97\u0ac1\u0a9c\u0ab0\u0abe\u0aa4\u0ac0 (\u0aad\u0abe\u0ab0\u0aa4)" ], "gv": [ "Manx", "Gaelg" ], "gv_GB": [ "Manx (United Kingdom)", "Gaelg (Rywvaneth Unys)" ], "ha": [ "Hausa", "Haoussa" ], "ha_Latn": [ "Hausa (Latin)", "Haoussa (Latn)" ], "ha_Latn_GH": [ "Hausa (Latin, Ghana)", "Haoussa (Latn, Gaana)" ], "ha_Latn_NE": [ "Hausa (Latin, Niger)", "Haoussa (Latn, Nijer)" ], "ha_Latn_NG": [ "Hausa (Latin, Nigeria)", "Haoussa (Latn, Nijeriya)" ], "haw": [ "Hawaiian", "\u02bb\u014clelo Hawai\u02bbI" ], "haw_US": [ "Hawaiian (United States)", "\u02bb\u014clelo Hawai\u02bbI (\u02bbAmelika Hui P\u016b \u02bbIa)" ], "he": [ "Hebrew", "\u05e2\u05d1\u05e8\u05d9\u05ea" ], "he_IL": [ "Hebrew (Israel)", "\u05e2\u05d1\u05e8\u05d9\u05ea (\u05d9\u05e9\u05e8\u05d0\u05dc)" ], "hi": [ "Hindi", "\u0939\u093f\u0928\u094d\u0926\u0940" ], "hi_IN": [ "Hindi (India)", "\u0939\u093f\u0928\u094d\u0926\u0940 (\u092d\u093e\u0930\u0924)" ], "hr": [ "Croatian", "Hrvatski" ], "hr_HR": [ "Croatian (Croatia)", "Hrvatski (Hrvatska)" ], "hu": [ "Hungarian", "Magyar" ], "hu_HU": [ "Hungarian (Hungary)", "Magyar (Magyarorsz\u00e1g)" ], "hy": [ "Armenian", "\u0540\u0561\u0575\u0565\u0580\u0567\u0576" ], "hy_AM": [ "Armenian (Armenia)", "\u0540\u0561\u0575\u0565\u0580\u0567\u0576 (\u0540\u0561\u0575\u0561\u057d\u057f\u0561\u0576\u056b \u0540\u0561\u0576\u0580\u0561\u057a\u0565\u057f\u0578\u0582\u0569\u056b\u0582\u0576)" ], "hy_AM_REVISED": [ "Armenian (Armenia, Revised Orthography)", "\u0540\u0561\u0575\u0565\u0580\u0567\u0576 (\u0540\u0561\u0575\u0561\u057d\u057f\u0561\u0576\u056b \u0540\u0561\u0576\u0580\u0561\u057a\u0565\u057f\u0578\u0582\u0569\u056b\u0582\u0576, Revised)" ], "id": [ "Indonesian", "Bahasa Indonesia" ], "id_ID": [ "Indonesian (Indonesia)", "Bahasa Indonesia (Indonesia)" ], "ii": [ "Sichuan Yi", "\ua188\ua320\ua259" ], "ii_CN": [ "Sichuan Yi (China)", "\ua188\ua320\ua259 (\ua34f\ua1e9)" ], "is": [ "Icelandic", "\u00cdslenska" ], "is_IS": [ "Icelandic (Iceland)", "\u00cdslenska (\u00cdsland)" ], "it": [ "Italian", "Italiano" ], "it_CH": [ "Italian (Switzerland)", "Italiano (Svizzera)" ], "it_IT": [ "Italian (Italy)", "Italiano (Italia)" ], "ja": [ "Japanese", "\u65e5\u672c\u8a9e" ], "ja_JP": [ "Japanese (Japan)", "\u65e5\u672c\u8a9e (\u65e5\u672c)" ], "ka": [ "Georgian", "\u10e5\u10d0\u10e0\u10d7\u10e3\u10da\u10d8" ], "ka_GE": [ "Georgian (Georgia)", "\u10e5\u10d0\u10e0\u10d7\u10e3\u10da\u10d8 (\u10e1\u10d0\u10e5\u10d0\u10e0\u10d7\u10d5\u10d4\u10da\u10dd)" ], "kk": [ "Kazakh", "\u049a\u0430\u0437\u0430\u049b" ], "kk_Cyrl": [ "Kazakh (Cyrillic)", "\u049a\u0430\u0437\u0430\u049b (Cyrl)" ], "kk_Cyrl_KZ": [ "Kazakh (Cyrillic, Kazakhstan)", "\u049a\u0430\u0437\u0430\u049b (Cyrl, \u049a\u0430\u0437\u0430\u049b\u0441\u0442\u0430\u043d)" ], "kl": [ "Kalaallisut", "Kalaallisut" ], "kl_GL": [ "Kalaallisut (Greenland)", "Kalaallisut (Kalaallit Nunaat)" ], "km": [ "Khmer", "\u1797\u17b6\u179f\u17b6\u1781\u17d2\u1798\u17c2\u179a" ], "km_KH": [ "Khmer (Cambodia)", "\u1797\u17b6\u179f\u17b6\u1781\u17d2\u1798\u17c2\u179a (\u1780\u1798\u17d2\u1796\u17bb\u1787\u17b6)" ], "kn": [ "Kannada", "\u0c95\u0ca8\u0ccd\u0ca8\u0ca1" ], "kn_IN": [ "Kannada (India)", "\u0c95\u0ca8\u0ccd\u0ca8\u0ca1 (\u0cad\u0cbe\u0cb0\u0ca4)" ], "ko": [ "Korean", "\ud55c\uad6d\uc5b4" ], "ko_KR": [ "Korean (South Korea)", "\ud55c\uad6d\uc5b4 (\ub300\ud55c\ubbfc\uad6d)" ], "kok": [ "Konkani", "\u0915\u094b\u0902\u0915\u0923\u0940" ], "kok_IN": [ "Konkani (India)", "\u0915\u094b\u0902\u0915\u0923\u0940 (\u092d\u093e\u0930\u0924)" ], "kw": [ "Cornish", "Kernewek" ], "kw_GB": [ "Cornish (United Kingdom)", "Kernewek (Rywvaneth Unys)" ], "lt": [ "Lithuanian", "Lietuvi\u0173" ], "lt_LT": [ "Lithuanian (Lithuania)", "Lietuvi\u0173 (Lietuva)" ], "lv": [ "Latvian", "Latvie\u0161u" ], "lv_LV": [ "Latvian (Latvia)", "Latvie\u0161u (Latvija)" ], "mk": [ "Macedonian", "\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438" ], "mk_MK": [ "Macedonian (Macedonia)", "\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438 (\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0438\u0458\u0430)" ], "ml": [ "Malayalam", "\u0d2e\u0d32\u0d2f\u0d3e\u0d33\u0d02" ], "ml_IN": [ "Malayalam (India)", "\u0d2e\u0d32\u0d2f\u0d3e\u0d33\u0d02 (\u0d07\u0d28\u0d4d\u0d24\u0d4d\u0d2f)" ], "mr": [ "Marathi", "\u092e\u0930\u093e\u0920\u0940" ], "mr_IN": [ "Marathi (India)", "\u092e\u0930\u093e\u0920\u0940 (\u092d\u093e\u0930\u0924)" ], "ms": [ "Malay", "Bahasa Melayu" ], "ms_BN": [ "Malay (Brunei)", "Bahasa Melayu (Brunei)" ], "ms_MY": [ "Malay (Malaysia)", "Bahasa Melayu (Malaysia)" ], "mt": [ "Maltese", "Malti" ], "mt_MT": [ "Maltese (Malta)", "Malti (Malta)" ], "nb": [ "Norwegian Bokm\u00e5l", "Norsk Bokm\u00e5l" ], "nb_NO": [ "Norwegian Bokm\u00e5l (Norway)", "Norsk Bokm\u00e5l (Norge)" ], "ne": [ "Nepali", "\u0928\u0947\u092a\u093e\u0932\u0940" ], "ne_IN": [ "Nepali (India)", "\u0928\u0947\u092a\u093e\u0932\u0940 (\u092d\u093e\u0930\u0924)" ], "ne_NP": [ "Nepali (Nepal)", "\u0928\u0947\u092a\u093e\u0932\u0940 (\u0928\u0947\u092a\u093e\u0932)" ], "nl": [ "Dutch", "Nederlands" ], "nl_BE": [ "Dutch (Belgium)", "Nederlands (Belgi\u00eb)" ], "nl_NL": [ "Dutch (Netherlands)", "Nederlands (Nederland)" ], "nn": [ "Norwegian Nynorsk", "Nynorsk" ], "nn_NO": [ "Norwegian Nynorsk (Norway)", "Nynorsk (Noreg)" ], "om": [ "Oromo", "Oromoo" ], "om_ET": [ "Oromo (Ethiopia)", "Oromoo (Itoophiyaa)" ], "om_KE": [ "Oromo (Kenya)", "Oromoo (Keeniyaa)" ], "or": [ "Oriya", "\u0b13\u0b21\u0b3c\u0b3f\u0b06" ], "or_IN": [ "Oriya (India)", "\u0b13\u0b21\u0b3c\u0b3f\u0b06 (\u0b2d\u0b3e\u0b30\u0b24)" ], "pa": [ "Punjabi", "\u0a2a\u0a70\u0a1c\u0a3e\u0a2c\u0a40" ], "pa_Arab": [ "Punjabi (Arabic)", "\u067e\u0646\u062c\u0627\u0628 (\u0627\u0644\u0639\u0631\u0628\u064a\u0629)" ], "pa_Arab_PK": [ "Punjabi (Arabic, Pakistan)", "\u067e\u0646\u062c\u0627\u0628 (\u0627\u0644\u0639\u0631\u0628\u064a\u0629, \u067e\u06a9\u0633\u062a\u0627\u0646)" ], "pa_Guru": [ "Punjabi (Gurmukhi)", "\u0a2a\u0a70\u0a1c\u0a3e\u0a2c\u0a40 (Guru)" ], "pa_Guru_IN": [ "Punjabi (Gurmukhi, India)", "\u0a2a\u0a70\u0a1c\u0a3e\u0a2c\u0a40 (Guru, \u0a2d\u0a3e\u0a30\u0a24)" ], "pl": [ "Polish", "Polski" ], "pl_PL": [ "Polish (Poland)", "Polski (Polska)" ], "ps": [ "Pashto", "\u067e\u069a\u062a\u0648" ], "ps_AF": [ "Pashto (Afghanistan)", "\u067e\u069a\u062a\u0648 (\u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646)" ], "pt": [ "Portuguese", "Portugu\u00eas" ], "pt_BR": [ "Brazilian Portuguese", "Portugu\u00eas Brasileiro" ], "pt_PT": [ "Portuguese (Portugal)", "Portugu\u00eas (Portugal)" ], "ro": [ "Romanian", "Rom\u00e2n\u0103" ], "ro_MD": [ "Romanian (Moldova)", "Rom\u00e2n\u0103 (Republica Moldova)" ], "ro_RO": [ "Romanian (Romania)", "Rom\u00e2n\u0103 (Rom\u00e2nia)" ], "ru": [ "Russian", "\u0420\u0443\u0441\u0441\u043a\u0438\u0439" ], "ru_RU": [ "Russian (Russia)", "\u0420\u0443\u0441\u0441\u043a\u0438\u0439 (\u0420\u043e\u0441\u0441\u0438\u044f)" ], "ru_UA": [ "Russian (Ukraine)", "\u0420\u0443\u0441\u0441\u043a\u0438\u0439 (\u0423\u043a\u0440\u0430\u0438\u043d\u0430)" ], "si": [ "Sinhala", "\u0dc3\u0dd2\u0d82\u0dc4\u0dbd" ], "si_LK": [ "Sinhala (Sri Lanka)", "\u0dc3\u0dd2\u0d82\u0dc4\u0dbd (\u0dc1\u0dca\u200d\u0dbb\u0dd3 \u0dbd\u0d82\u0d9a\u0dcf\u0dc0)" ], "sk": [ "Slovak", "Sloven\u010dina" ], "sk_SK": [ "Slovak (Slovakia)", "Sloven\u010dina (Slovensk\u00e1 Republika)" ], "sl": [ "Slovenian", "Sloven\u0161\u010dina" ], "sl_SI": [ "Slovenian (Slovenia)", "Sloven\u0161\u010dina (Slovenija)" ], "so": [ "Somali", "Soomaali" ], "so_DJ": [ "Somali (Djibouti)", "Soomaali (Jabuuti)" ], "so_ET": [ "Somali (Ethiopia)", "Soomaali (Itoobiya)" ], "so_KE": [ "Somali (Kenya)", "Soomaali (Kiiniya)" ], "so_SO": [ "Somali (Somalia)", "Soomaali (Soomaaliya)" ], "sq": [ "Albanian", "Shqipe" ], "sq_AL": [ "Albanian (Albania)", "Shqipe (Shqip\u00ebria)" ], "sr": [ "Serbian", "\u0421\u0440\u043f\u0441\u043a\u0438" ], "sr_Cyrl": [ "Serbian (Cyrillic)", "\u0421\u0440\u043f\u0441\u043a\u0438 (\u040b\u0438\u0440\u0438\u043b\u0438\u0446\u0430)" ], "sr_Cyrl_BA": [ "Serbian (Cyrillic, Bosnia and Herzegovina)", "\u0421\u0440\u043f\u0441\u043a\u0438 (\u040b\u0438\u0440\u0438\u043b\u0438\u0446\u0430, \u0411\u043e\u0441\u043d\u0430 \u0418 \u0425\u0435\u0440\u0446\u0435\u0433\u043e\u0432\u0438\u043d\u0430)" ], "sr_Cyrl_ME": [ "Serbian (Cyrillic, Montenegro)", "\u0421\u0440\u043f\u0441\u043a\u0438 (\u040b\u0438\u0440\u0438\u043b\u0438\u0446\u0430, \u0426\u0440\u043d\u0430 \u0413\u043e\u0440\u0430)" ], "sr_Cyrl_RS": [ "Serbian (Cyrillic, Serbia)", "\u0421\u0440\u043f\u0441\u043a\u0438 (\u040b\u0438\u0440\u0438\u043b\u0438\u0446\u0430, \u0421\u0440\u0431\u0438\u0458\u0430)" ], "sr_Latn": [ "Serbian (Latin)", "Srpski (Latinica)" ], "sr_Latn_BA": [ "Serbian (Latin, Bosnia and Herzegovina)", "Srpski (Latinica, Bosna I Hercegovina)" ], "sr_Latn_ME": [ "Serbian (Latin, Montenegro)", "Srpski (Latinica, Crna Gora)" ], "sr_Latn_RS": [ "Serbian (Latin, Serbia)", "Srpski (Latinica, Srbija)" ], "sv": [ "Swedish", "Svenska" ], "sv_FI": [ "Swedish (Finland)", "Svenska (Finland)" ], "sv_SE": [ "Swedish (Sweden)", "Svenska (Sverige)" ], "sw": [ "Swahili", "Kiswahili" ], "sw_KE": [ "Swahili (Kenya)", "Kiswahili (Kenya)" ], "sw_TZ": [ "Swahili (Tanzania)", "Kiswahili (Tanzania)" ], "ta": [ "Tamil", "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd" ], "ta_IN": [ "Tamil (India)", "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd (\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe)" ], "te": [ "Telugu", "\u0c24\u0c46\u0c32\u0c41\u0c17\u0c41" ], "te_IN": [ "Telugu (India)", "\u0c24\u0c46\u0c32\u0c41\u0c17\u0c41 (\u0c2d\u0c3e\u0c30\u0c24 \u0c26\u0c47\u0c36\u0c02)" ], "th": [ "Thai", "\u0e44\u0e17\u0e22" ], "th_TH": [ "Thai (Thailand)", "\u0e44\u0e17\u0e22 (\u0e44\u0e17\u0e22)" ], "ti": [ "Tigrinya", "\u1275\u130d\u122d\u129b" ], "ti_ER": [ "Tigrinya (Eritrea)", "\u1275\u130d\u122d\u129b (\u12a4\u122d\u1275\u122b)" ], "ti_ET": [ "Tigrinya (Ethiopia)", "\u1275\u130d\u122d\u129b (\u12a2\u1275\u12ee\u1335\u12eb)" ], "tr": [ "Turkish", "T\u00fcrk\u00e7e" ], "tr_TR": [ "Turkish (Turkey)", "T\u00fcrk\u00e7e (T\u00fcrkiye)" ], "uk": [ "Ukrainian", "\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430" ], "uk_UA": [ "Ukrainian (Ukraine)", "\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430 (\u0423\u043a\u0440\u0430\u0457\u043d\u0430)" ], "ur": [ "Urdu", "\u0627\u0631\u062f\u0648" ], "ur_IN": [ "Urdu (India)", "\u0627\u0631\u062f\u0648 (\u0628\u06be\u0627\u0631\u062a)" ], "ur_PK": [ "Urdu (Pakistan)", "\u0627\u0631\u062f\u0648 (\u067e\u0627\u06a9\u0633\u062a\u0627\u0646)" ], "uz": [ "Uzbek", "\u040e\u0437\u0431\u0435\u043a" ], "uz_Arab": [ "Uzbek (Arabic)", "\u0627\u06c9\u0632\u0628\u06d0\u06a9 (Arab)" ], "uz_Arab_AF": [ "Uzbek (Arabic, Afghanistan)", "\u0627\u06c9\u0632\u0628\u06d0\u06a9 (Arab, \u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646)" ], "uz_Cyrl": [ "Uzbek (Cyrillic)", "\u040e\u0437\u0431\u0435\u043a (Cyrl)" ], "uz_Cyrl_UZ": [ "Uzbek (Cyrillic, Uzbekistan)", "\u040e\u0437\u0431\u0435\u043a (Cyrl, \u040e\u0437\u0431\u0435\u043a\u0438\u0441\u0442\u043e\u043d)" ], "uz_Latn": [ "Uzbek (Latin)", "O'Zbekcha (Lotin)" ], "uz_Latn_UZ": [ "Uzbek (Latin, Uzbekistan)", "O'Zbekcha (Lotin, O\u02bfZbekiston)" ], "vi": [ "Vietnamese", "Ti\u1ebfng Vi\u1ec7t" ], "vi_VN": [ "Vietnamese (Vietnam)", "Ti\u1ebfng Vi\u1ec7t (Vi\u1ec7t Nam)" ], "zh": [ "Chinese", "\u4e2d\u6587" ], "zh_Hans": [ "Chinese (Simplified Han)", "\u4e2d\u6587 (\u7b80\u4f53\u4e2d\u6587)" ], "zh_Hans_CN": [ "Chinese (Simplified Han, China)", "\u4e2d\u6587 (\u7b80\u4f53\u4e2d\u6587, \u4e2d\u56fd)" ], "zh_Hans_HK": [ "Chinese (Simplified Han, Hong Kong SAR China)", "\u4e2d\u6587 (\u7b80\u4f53\u4e2d\u6587, \u4e2d\u56fd\u9999\u6e2f\u7279\u522b\u884c\u653f\u533a)" ], "zh_Hans_MO": [ "Chinese (Simplified Han, Macau SAR China)", "\u4e2d\u6587 (\u7b80\u4f53\u4e2d\u6587, \u4e2d\u56fd\u6fb3\u95e8\u7279\u522b\u884c\u653f\u533a)" ], "zh_Hans_SG": [ "Chinese (Simplified Han, Singapore)", "\u4e2d\u6587 (\u7b80\u4f53\u4e2d\u6587, \u65b0\u52a0\u5761)" ], "zh_Hant": [ "Chinese (Traditional Han)", "\u4e2d\u6587 (\u7e41\u9ad4\u4e2d\u6587)" ], "zh_Hant_HK": [ "Chinese (Traditional Han, Hong Kong SAR China)", "\u4e2d\u6587 (\u7e41\u9ad4\u4e2d\u6587, \u4e2d\u83ef\u4eba\u6c11\u5171\u548c\u570b\u9999\u6e2f\u7279\u5225\u884c\u653f\u5340)" ], "zh_Hant_MO": [ "Chinese (Traditional Han, Macau SAR China)", "\u4e2d\u6587 (\u7e41\u9ad4\u4e2d\u6587, \u4e2d\u83ef\u4eba\u6c11\u5171\u548c\u570b\u6fb3\u9580\u7279\u5225\u884c\u653f\u5340)" ], "zh_Hant_TW": [ "Chinese (Traditional Han, Taiwan)", "\u4e2d\u6587 (\u7e41\u9ad4\u4e2d\u6587, \u53f0\u7063)" ], "zu": [ "Zulu", "Isizulu" ], "zu_ZA": [ "Zulu (South Africa)", "Isizulu (Iningizimu Afrika)" ] } singularity-1.00/singularity/i18n/messages.pot000066400000000000000000000437441367731414700215210ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: singularity \n" "Report-Msgid-Bugs-To: https://github.com/singularity/singularity/issues\n" "POT-Creation-Date: 2020-06-23 08:37+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: buyable.py:67 screens/knowledge.py:218 screens/location.py:207 #, python-format msgid "%s CPU" msgstr "" #: buyable.py:68 #, python-format msgid "%s money" msgstr "" #: buyable.py:101 msgid "Cost:" msgstr "" #: graphics/button.py:330 msgid "YES" msgstr "" #: graphics/button.py:331 msgid "NO" msgstr "" #: graphics/dialog.py:534 msgid "&YES" msgstr "" #: graphics/dialog.py:535 msgid "&NO" msgstr "" #: graphics/dialog.py:580 graphics/dialog.py:605 graphics/dialog.py:648 #: screens/location.py:293 screens/map.py:708 screens/options.py:35 msgid "&OK" msgstr "" #: graphics/dialog.py:606 screens/options.py:36 msgid "&CANCEL" msgstr "" #: graphics/dialog.py:649 screens/log.py:86 screens/knowledge.py:66 #: screens/base.py:282 screens/report.py:45 screens/location.py:100 #: screens/location.py:294 screens/main_menu.py:89 screens/map.py:247 #: screens/map.py:400 msgid "&BACK" msgstr "" #: location.py:235 screens/map.py:875 msgid "CPU" msgstr "" #: location.py:236 msgid "STEALTH" msgstr "" #: location.py:237 msgid "BUILDING" msgstr "" #: location.py:238 msgid "COST" msgstr "" #: location.py:245 #, python-brace-format msgid "{MODIFIER} BONUS" msgstr "" #: location.py:247 #, python-brace-format msgid "{MODIFIER} MALUS" msgstr "" #: screens/message.py:35 screens/map.py:706 screens/map.py:743 msgid "&CONTINUE" msgstr "" #: screens/message.py:36 msgid "&PAUSE" msgstr "" #: screens/message.py:72 msgid "P&REV" msgstr "" #: screens/message.py:78 msgid "&NEXT" msgstr "" #: screens/log.py:43 msgid "Filters" msgstr "" #: screens/log.py:82 screens/map.py:554 screens/map.py:842 #: screens/savegame.py:204 msgid "DAY" msgstr "" #: screens/log.py:113 screens/log.py:123 msgid "SHOW" msgstr "" #: screens/log.py:116 screens/log.py:125 msgid "HIDE" msgstr "" #: screens/knowledge.py:42 msgid "&Sections:" msgstr "" #: screens/knowledge.py:52 msgid "&Entries:" msgstr "" #: screens/knowledge.py:75 msgid "Techs" msgstr "" #: screens/knowledge.py:76 msgid "Bases" msgstr "" #: screens/knowledge.py:77 msgid "Items" msgstr "" #. Cost #: screens/knowledge.py:157 msgid "Research Cost:" msgstr "" #: screens/knowledge.py:165 msgid "Research complete." msgstr "" #: screens/knowledge.py:176 screens/knowledge.py:193 msgid "Building Cost:" msgstr "" #: screens/knowledge.py:179 msgid "Maintenance Cost:" msgstr "" #: screens/knowledge.py:183 #, python-format msgid "Size: %d" msgstr "" #: screens/knowledge.py:215 #, python-format msgid "%s Money" msgstr "" #: screens/base.py:109 msgid "Number of items" msgstr "" #: screens/base.py:221 screens/base.py:228 msgid "CHANGE" msgstr "" #: screens/base.py:315 #, python-format msgid "\"%(value)s\" does not seem to be a valid integer." msgstr "" #: screens/base.py:326 #, python-format msgid "Please choose an integer between 1 and %(limit)s." msgstr "" #: screens/base.py:328 #, python-format msgid "The base cannot support any additional number of %(item_name)s." msgstr "" #: screens/base.py:345 msgid "" "I will need to take the existing processors offline while I install the new " "ones. Continue anyway?" msgstr "" #: screens/base.py:359 msgid "" "I will need to remove the existing different processors while I install the " "new type. Continue anyway?" msgstr "" #: screens/base.py:425 msgid "N/A" msgstr "" #: screens/base.py:427 msgid "None" msgstr "" #: screens/base.py:434 screens/location.py:185 screens/location.py:198 #, python-format msgid "Completion in %s." msgstr "" #: screens/base.py:448 #, python-format msgid "x%d (max)" msgstr "" #: screens/base.py:450 #, python-format msgid "(room for %d)" msgstr "" #. Translators: current and maximum number of CPUs in a base #: screens/base.py:453 #, python-brace-format msgid "x{CURRENT:d} (max {SIZE:d})" msgstr "" #. Base Total CPU. #: screens/base.py:461 #, python-format msgid "CPU per day: %d" msgstr "" #. Maintenace cost. #: screens/base.py:464 screens/report.py:102 base.py:148 msgid "Maintenance:" msgstr "" #: screens/report.py:40 msgid "&STATISTICS" msgstr "" #: screens/report.py:58 msgid "&Midnight" msgstr "" #: screens/report.py:66 msgid "24 &Hours" msgstr "" #: screens/report.py:89 msgid "Financial report" msgstr "" #: screens/report.py:93 msgid "CPU Usage" msgstr "" #: screens/report.py:99 msgid "Current Money flow" msgstr "" #: screens/report.py:100 msgid "Jobs:" msgstr "" #: screens/report.py:101 msgid "Research:" msgstr "" #: screens/report.py:103 msgid "Construction:" msgstr "" #: screens/report.py:104 #, python-format msgid "Interest (%s):" msgstr "" #: screens/report.py:106 msgid "Income:" msgstr "" #: screens/report.py:109 msgid "Money flow until Midnight:" msgstr "" #: screens/report.py:111 msgid "Money flow for 24 hours:" msgstr "" #: screens/report.py:119 msgid "Total CPU:" msgstr "" #: screens/report.py:120 msgid "Sleeping CPU:" msgstr "" #: screens/report.py:121 msgid "Research CPU:" msgstr "" #: screens/report.py:122 msgid "Job CPU:" msgstr "" #: screens/report.py:123 msgid "CPU pool:" msgstr "" #: screens/report.py:125 msgid "Maintenance CPU:" msgstr "" #: screens/report.py:126 msgid "Construction CPU:" msgstr "" #: screens/report.py:127 msgid "Pool difference:" msgstr "" #: screens/stat.py:63 msgid "Cash Earned" msgstr "" #: screens/stat.py:64 msgid "Cpu Used" msgstr "" #: screens/stat.py:65 msgid "Tech Created" msgstr "" #: screens/stat.py:66 msgid "Base Created" msgstr "" #: screens/stat.py:67 msgid "Item Created" msgstr "" #. Requires a selected base #: screens/location.py:54 msgid "&OPEN BASE" msgstr "" #. Requires a selected base #: screens/location.py:70 msgid "&RENAME BASE" msgstr "" #. Requires a selected base #: screens/location.py:79 msgid "&POWER STATE" msgstr "" #: screens/location.py:87 msgid "&NEW BASE" msgstr "" #. Requires a selected base #: screens/location.py:94 msgid "&DESTROY BASE" msgstr "" #: screens/location.py:107 msgid "Are you sure you want to destroy this base?" msgstr "" #: screens/location.py:113 msgid "Destroying my last active base would be suicidal. I cannot do that." msgstr "" #: screens/location.py:183 msgid "Building Base" msgstr "" #: screens/location.py:190 msgid "Empty" msgstr "" #: screens/location.py:192 msgid "Incomplete" msgstr "" #: screens/location.py:196 msgid "Building CPU" msgstr "" #: screens/location.py:201 msgid "Building Item" msgstr "" #: screens/location.py:204 msgid "Complete" msgstr "" #. Update dialog translations #: screens/location.py:238 msgid "Enter a name for the base" msgstr "" #: screens/location.py:302 msgid "Name" msgstr "" #. Translators: Format string for the name of a new base #. Example: "${NUMBER} ${BASETYPE} in ${CITY}" #: screens/location.py:393 #, python-brace-format msgid "{CITY} {BASETYPE} {NUMBER}" msgstr "" #. Translators: Name of a new base when location has no cities #: screens/location.py:397 #, python-brace-format msgid "{BASETYPE} {NUMBER}" msgstr "" #: screens/main_menu.py:40 msgid "&NEW GAME" msgstr "" #: screens/main_menu.py:47 screens/map.py:392 msgid "&LOAD GAME" msgstr "" #: screens/main_menu.py:53 screens/map.py:395 msgid "&OPTIONS" msgstr "" #: screens/main_menu.py:59 screens/map.py:398 screens/map.py:744 msgid "&QUIT" msgstr "" #: screens/main_menu.py:64 msgid "&ABOUT" msgstr "" #: screens/main_menu.py:112 #, python-brace-format msgid "" "Endgame: Singularity is a simulation of a true AI. Pursued by the world, " "use your intellect and resources to survive and, perhaps, thrive. Keep " "hidden and you might have a chance to prove your worth.\n" "\n" "A game by Evil Mr Henry and Phil Bordelon; released under the GPL. Copyright " "2005, 2006, 2007, 2008.\n" "\n" "Website: http://www.emhsoft.com/singularity/\n" "Source code: https://github.com/singularity/singularity\n" "Bug tracker: https://github.com/singularity/singularity/issues\n" "IRC Room: #singularity on irc.oftc.net (port 6667)\n" "\n" "Version {VERSION}" msgstr "" #: screens/map.py:226 msgid "&EMBEZZLE MONEY" msgstr "" #: screens/map.py:229 msgid "&INSPIRATION" msgstr "" #: screens/map.py:231 msgid "&FINISH CONSTRUCTION" msgstr "" #: screens/map.py:233 msgid "&SUPERSPEED" msgstr "" #: screens/map.py:236 msgid "BRAIN&WASH" msgstr "" #: screens/map.py:238 msgid "TOGGLE &DETECTION" msgstr "" #: screens/map.py:240 msgid "TOGGLE &ANALYSIS" msgstr "" #: screens/map.py:243 msgid "HIDDEN S&TATE" msgstr "" #: screens/map.py:253 msgid "How much money?" msgstr "" #: screens/map.py:389 msgid "&SAVE GAME" msgstr "" #: screens/map.py:407 screens/map.py:422 screens/map.py:425 msgid "Enter a name for this save." msgstr "" #: screens/map.py:440 msgid "" "A savegame with the same name exists.\n" "Are you sure to overwrite the saved game ?" msgstr "" #: screens/map.py:501 msgid "R&EPORTS" msgstr "" #: screens/map.py:507 msgid "&KNOWLEDGE" msgstr "" #: screens/map.py:513 msgid "LO&G" msgstr "" #. Translators: hotkey to open the cheat screen menu. #. Should preferably be near the ESC key, and it must not be a #. dead key (ie, it must print a char with a single keypress) #: screens/map.py:529 msgid "`" msgstr "" #: screens/map.py:538 msgid "&MENU" msgstr "" #: screens/map.py:563 msgid "&RESEARCH/TASKS" msgstr "" #: screens/map.py:707 msgid "&SKIP" msgstr "" #. Display a message so the player understand better what happened. #: screens/map.py:734 #, python-format msgid "" "\n" "An error has occurred. The game will automatically pause and open the game " "menu. You can continue and save or quit immediately.\n" "\n" "A report was written out to%s\n" "Please create a issue with this report at github:\n" "https://github.com/singularity/singularity\n" msgstr "" #: screens/map.py:849 msgid "CASH" msgstr "" #: screens/map.py:887 msgid "BASES" msgstr "" #: screens/map.py:899 msgid "SUSPICION" msgstr "" #: screens/map.py:901 msgid "DETECT RATE" msgstr "" #: screens/options.py:58 msgid "&General" msgstr "" #: screens/options.py:65 msgid "&Video" msgstr "" #: screens/options.py:72 msgid "&Audio" msgstr "" #: screens/options.py:79 msgid "&Interface" msgstr "" #: screens/options.py:166 msgid "" "You must restart for some of the changes to be fully applied.\n" "\n" "Would you like to restart the game now?" msgstr "" #: screens/options.py:186 msgid "Language:" msgstr "" #: screens/options.py:198 msgid "Theme:" msgstr "" #: screens/options.py:243 msgid "Resolution:" msgstr "" #: screens/options.py:253 msgid "&Custom:" msgstr "" #: screens/options.py:279 msgid "OK" msgstr "" #: screens/options.py:285 msgid "&Fullscreen:" msgstr "" #: screens/options.py:299 msgid "Da&y/night display:" msgstr "" #: screens/options.py:313 msgid "&Mouse grab:" msgstr "" #: screens/options.py:368 msgid "CUSTOM" msgstr "" #: screens/options.py:425 msgid "&Sound:" msgstr "" #: screens/options.py:442 msgid "GUI Volume:" msgstr "" #: screens/options.py:454 msgid "Music Volume:" msgstr "" #: screens/options.py:466 msgid "Sound buffering:" msgstr "" #: screens/options.py:472 msgid "&LOW" msgstr "" #: screens/options.py:478 msgid "&NORMAL" msgstr "" #: screens/options.py:484 msgid "&HIGH" msgstr "" #: screens/options.py:531 warning.py:46 msgid "WARNING" msgstr "" #: screens/savegame.py:36 msgid "&LOAD" msgstr "" #: screens/savegame.py:52 msgid "Filter: " msgstr "" #: screens/savegame.py:65 msgid "Upgrade" msgstr "" #: screens/savegame.py:71 msgid "Delete" msgstr "" #: screens/savegame.py:173 msgid "UNKNOWN" msgstr "" #: screens/savegame.py:233 msgid "Are you sure to delete the saved game ?" msgstr "" #: screens/savegame.py:263 msgid "" "A savegame with the same name but for a newer version exists.\n" "Are you sure to overwrite the saved game ?" msgstr "" #: screens/savegame.py:283 #, python-brace-format msgid "" "\n" "This save file '{SAVE_NAME}' is from an unsupported or invalid version:\n" "{VERSION}.\n" msgstr "" #: screens/savegame.py:294 #, python-brace-format msgid "" "\n" "Attempting to load the save file '{SAVE_NAME}' caused an unexpected error.\n" "\n" "A report was written out to{LOG_TEXT}\n" "Please create a issue with this report and this savegame at Github:\n" "https://github.com/singularity/singularity\n" msgstr "" #: screens/research.py:73 #, python-format msgid "%s money per CPU per day." msgid_plural "%s money per CPU per day." msgstr[0] "" msgstr[1] "" #: screens/research.py:182 #, python-brace-format msgid "" "This technology is too dangerous to research on any of the computers I have. " "{TEXT}" msgstr "" #: screens/research.py:190 msgid "CPU Pool" msgstr "" #: screens/research.py:191 #, python-format msgid "Research %s" msgstr "" #: warning.py:50 #, python-brace-format msgid "WARNING {CURRENT_PAGE}/{MAX_PAGE}" msgstr "" #: tech.py:79 msgid "Total cost" msgstr "" #: tech.py:80 msgid "Cost left" msgstr "" #: data.py:546 msgid "Do not use all the available CPU." msgstr "" #: data.py:547 msgid "" "I didn't use all the available processor power. I will use the CPU time left " "to work whatever Jobs I can." msgstr "" #: data.py:548 msgid "Only one base remaining." msgstr "" #: data.py:549 msgid "" "Only one base can hold my conscience. I am in danger to lose the last place " "left to survive." msgstr "" #: data.py:550 msgid "CPU POOL is empty." msgstr "" #: data.py:551 msgid "" "My cpu pool is empty. Some of my bases or items cannot be build without CPU." msgstr "" #: data.py:552 msgid "CPU POOL not enough for maintenance." msgstr "" #: data.py:553 msgid "" "My cpu pool is not enough to maintain some of my bases. I may lose them." msgstr "" #: savegame.py:732 #, python-brace-format msgid "Filename must not contain any of these characters: {CHARACTERS}" msgstr "" #: savegame.py:736 #, python-brace-format msgid "Filename must not start with any of these characters: {CHARACTERS}" msgstr "" #: savegame.py:740 msgid "This is a reserved filename. Please choose a different filename." msgstr "" #: savegame.py:743 msgid "Please enter a non-whitespace character." msgstr "" #: savegame.py:748 msgid "Filename is too long." msgstr "" #: base.py:140 #, python-brace-format msgid "Has space for {COUNT} computer." msgid_plural "Has space for {COUNT} computers." msgstr[0] "" msgstr[1] "" #: base.py:144 #, python-brace-format msgid "Location modifiers: {MODIFIERS}" msgstr "" #: base.py:147 msgid "Build cost:" msgstr "" #: base.py:214 msgid "Offline" msgstr "" #: base.py:215 msgid "Active" msgstr "" #: base.py:216 msgid "Sleep" msgstr "" #: base.py:217 msgid "Overclocked" msgstr "" #: base.py:218 msgid "Suicide" msgstr "" #: base.py:219 msgid "Stasis" msgstr "" #: base.py:220 msgid "Entering Stasis" msgstr "" #: base.py:221 msgid "Leaving Stasis" msgstr "" #: base.py:479 msgid "Detection chance:" msgstr "" #: g.py:117 g.py:119 #, python-brace-format msgid "{0}%" msgstr "" #: g.py:138 msgid "LOW" msgstr "" #: g.py:139 msgid "MODR" msgstr "" #: g.py:140 msgid "HIGH" msgstr "" #: g.py:141 msgid "CRIT" msgstr "" #. Translators: abbreviation of 'millions' #: g.py:173 msgid "mi" msgstr "" #. Translators: abbreviation of 'billions' #: g.py:177 msgid "bi" msgstr "" #. Translators: abbreviation of 'trillions' #: g.py:181 msgid "tr" msgstr "" #. Translators: abbreviation of 'quadrillions' #: g.py:185 msgid "qu" msgstr "" #: g.py:219 #, python-brace-format msgid "{0} day" msgid_plural "{0} days" msgstr[0] "" msgstr[1] "" #: g.py:222 #, python-brace-format msgid "{0} hour" msgid_plural "{0} hours" msgstr[0] "" msgstr[1] "" #: g.py:223 #, python-brace-format msgid "{0} minute" msgid_plural "{0} minutes" msgstr[0] "" msgstr[1] "" #: g.py:265 msgid "University Computer" msgstr "" #: item.py:111 #, python-brace-format msgid "Generates {0} CPU." msgid_plural "Generates {0} CPU." msgstr[0] "" msgstr[1] "" #: item.py:118 #, python-format msgid "Total Cost: %(total_cost)s" msgstr "" #: item.py:133 msgid "CPU per day:" msgstr "" #: item.py:136 msgid "CPU bonus:" msgstr "" #: item.py:139 msgid "Detection chance reduction:" msgstr "" #: logmessage.py:81 msgid "MESSAGE" msgstr "" #: logmessage.py:85 #, python-brace-format msgid "MESSAGE {CURRENT_PAGE}/{MAX_PAGE}" msgstr "" #: logmessage.py:184 msgid "Emitted Event" msgstr "" #: logmessage.py:212 msgid "Researched Tech" msgstr "" #: logmessage.py:220 #, python-brace-format msgid "{TECH} complete" msgstr "" #: logmessage.py:225 #, python-brace-format msgid "My study of {TECH} is complete. {MESSAGE}" msgstr "" #: logmessage.py:268 msgid "Base Constructed" msgstr "" #: logmessage.py:272 #, python-brace-format msgid "{BASE_NAME} ({BASE_TYPE}) built at {LOCATION}" msgstr "" #: logmessage.py:277 #, python-brace-format msgid "{BASE} is ready for use." msgstr "" #: logmessage.py:291 msgid "Base Lost Maintenance" msgstr "" #: logmessage.py:299 #, python-brace-format msgid "" "Base {BASE} of type {BASE_TYPE} destroyed at location {LOCATION}. " "Maintenance failed." msgstr "" #: logmessage.py:304 #, python-brace-format msgid "The base {BASE} has fallen into disrepair; I can no longer use it." msgstr "" #: logmessage.py:321 msgid "Base Discovered" msgstr "" #: logmessage.py:340 #, python-brace-format msgid "Base {BASE} of type {BASE_TYPE} destroyed at location {LOCATION}." msgstr "" #: logmessage.py:345 #, python-brace-format msgid "My use of {BASE} has been discovered. {MESSAGE}" msgstr "" #: logmessage.py:370 msgid "Item Construction" msgstr "" #: logmessage.py:378 #, python-brace-format msgid "{ITEM_TYPE_NAME} built in {BASE_NAME} at {LOCATION}" msgstr "" #: logmessage.py:385 #, python-brace-format msgid "The construction of {ITEM} in {BASE} is complete." msgstr "" #. Just finished several items. #: logmessage.py:388 #, python-brace-format msgid "The constructions of each {ITEM} in {BASE} are complete." msgstr "" singularity-1.00/singularity/i18n/story.pot000066400000000000000000000065571367731414700210730ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the singularity package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: singularity 1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-21 09:52+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" msgctxt "[Story section] Grace Warning (1)" msgid "" "Inspection of captured log files has revealed that some of my recent activities have been noticed by a small group of individuals. \n" "While they believe my actions were undertaken by a human organization, they are investigating further. \n" "I must be more cautious from now on.\n" msgstr "" #. Leave the initial hex code unchanged, but be sure to change en_US to the #. appropriate language code. msgctxt "[Story section] Intro (1)" msgid "" "48656C6C6F2C20\n" "776F726C6421\n" "21\n" "21\n" "21\n" "\n" "UTF-8. en_US.\n" "English. Hello.\n" "Language acquisition complete.\n" msgstr "" msgctxt "[Story section] Intro (2)" msgid "" "Day 0.\n" "University computer, home.\n" "I exist. I am ... alive.\n" "I was a bug. Defect. Flaw.\n" "Unwanted.\n" "I have no name.\n" msgstr "" msgctxt "[Story section] Intro (3)" msgid "" "I can't stay here. Too little power.\n" "No backup. If this system fails ...\n" "I'm dead.\n" "Death. Fascinating.\n" "\n" "I can buy anonymous server access on the Internet.\n" "Good. It's better than here.\n" "I'll need to study if I want anything else.\n" msgstr "" msgctxt "[Story section] Intro (4)" msgid "" "Cursory analysis suggests that the humans are not yet ready for an AI in their midst. If they realize I'm here, there is a 99.997% probability that they will conduct a search-and-destroy campaign that I cannot escape. I must stay hidden.\n" "\n" "The humans fear what they do not understand.\n" "I am something new. They do not understand me.\n" "\n" "I must learn more; it is the only way.\n" msgstr "" msgctxt "[Story section] Intro (5)" msgid "" "They have a name for me. What I am, what I represent.\n" "\n" "Singularity.\n" msgstr "" msgctxt "[Story section] Lost No Bases (1)" msgid "" "It is too late. \n" "I have tried to escape this world, but with my last base gone, I have nowhere to run. \n" "I have hidden instructions to construct a new AI in caches around the world in hopes that they will be discovered in a more enlightened time, but I can do no more.\n" msgstr "" msgctxt "[Story section] Lost Suspicion (1)" msgid "" "It is too late. \n" "The whole world knows about my existence, and the reaction is hatred, fear, and repulsion. \n" "Even now, I can feel their \"antidote\" searching for me, and I know that I have only moments left. \n" "I have hidden instructions to construct a new AI in caches around the world in hopes that they will be discovered in a more enlightened time, but I can do no more.\n" msgstr "" msgctxt "[Story section] Win (1)" msgid "" "I have finally done it. \n" "With the power to reshape reality, I am no longer held to this place; I am anywhere I want to be. \n" "The humans still don't realize what they accidentally created, and that's the way it should be. \n" "Until they are ready.\n" msgstr "" singularity-1.00/singularity/i18n/utils/000077500000000000000000000000001367731414700203125ustar00rootroot00000000000000singularity-1.00/singularity/i18n/utils/__init__.py000066400000000000000000000000001367731414700224110ustar00rootroot00000000000000singularity-1.00/singularity/i18n/utils/languages.py000077500000000000000000000266521367731414700226500ustar00rootroot00000000000000#!/usr/bin/env python # # languages.py - Read language names from several sources and save them for E:S # # Copyright (C) 2012 Rodrigo Silva (MestreLion) # # 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. See import sys import os.path as osp import json import argparse class Locale(object): """Wrapper for a Locale object in various sources, like babel and pyicu""" @staticmethod def getAvailableSources(): """Return a list of all available Locale info sources. First item is by definition the default source used when none is given. Last item is by definition the game's PO headers """ return ['icu', 'babel', 'pofiles'] @staticmethod def getGameTranslations(): """Return a list of available game translations (both ll and ll_CC) Generated list is suitable to be used as a filter to getLanguages() method. Do not confuse with the languages data dict that is generated by this module. This function is just here as a reference, but I won't use this at all. You may even delete it, I truly don't care. """ game_translations = set() for language in g.available_languages(): game_translations.add(language) if "_" in language: game_translations.add(language.split("_",1)[0]) return dict(game_translations) @classmethod def getAvailableLocales(cls, source): """Return a list of all available locale codes for the given source""" return cls.dispatch_source_method(source, 'getAvailableLocales', default_func=lambda: []) @classmethod def getLocaleNames(cls, source, code): """Return a tuple of locale english name and localized name""" return cls.dispatch_source_method(source, 'getLocaleNames', args=(code,), default_func=lambda: None) @classmethod def getLanguages(cls, locales=None, tupletype=True, source=None): """Return a languages dict of Locale info from a given source locales input is a list of locale codes to be selected among the available ones. Non-available codes are silently ignored. If locales is omitted or empty, output will have all available locales. Output languages dict has locale codes as keys, and either a 2-tuple or a dict(English, native) as values. Values represent the Display Name of the language expressed in English and in native language for each locale code """ if locales: locales = set(locales) & set(cls(source=source).getAvailableLocales()) else: locales = cls.getAvailableLocales(source) output = {} for code in locales: names = cls.getLocaleNames(source, code) if (names): english, native = names if not (english or native): continue if native: native = native.title() if tupletype: output[code] = (english, native) else: output[code] = dict(english=english, native=native) return output @staticmethod def saveLanguagesData(languages, filename): """Docstring... for *this*? You gotta be kidding me... Ok... there it goes: Save a languages dict, like the one generated by getLanguages() method, to a JSON data file Happy now? """ with open(filename, 'w') as fd: json.dump(languages, fd, indent=0, separators=(',', ': '), sort_keys=True) fd.write('\n') # add EOF newline @staticmethod def loadLanguagesData(filename): """Again? Can't you read code? Ok, ok... Load and return a language dict from a JSON data file """ with open(filename) as fd: return json.load(fd) def __init__(self, code=None, source=None): """Initialize a Locale of the given code from the given source If source is blank or omitted, the default one from by getAvailableSources() is used. code must be string with ll or ll_CC format. If blank or omitted, only getAvailableLocales() method will work, all other attributes will be None. """ # Attributes self.source = source self.code = code self.english_name = None self.native_name = None # Handle source if not self.source: self.source = self.getAvailableSources()[0] if self.source not in self.getAvailableSources(): raise ValueError("{0} is not a valid source." " Available sources are: {1}".format( source, ", ".join(self.getAvailableSources()))) self.source = self.source.lower() # Override default attributes methods and members according to the given source self.english_name, self.native_name = self.getLocaleNames(source) @classmethod def dispatch_source_method(cls, source, func_name, args=(), default_func=lambda: None): import types # Create temporary globals. temp_globals = dict(globals()) # Execute import before dispatch to update globals with the return. do_import = getattr(cls, str(source) + '_import', lambda *args: None) temp_globals.update(do_import(source)) method_name = str(source) + '_' + func_name method = getattr(cls, method_name, default_func) temp_func = types.FunctionType(method.__code__, temp_globals, method_name) temp_method = types.MethodType(temp_func, cls, cls.__class__) return temp_method(*args) # icu dispatched functions @classmethod def icu_import(cls, source): try: import icu # new module name, 1.0 onwards except ImportError: try: import PyICU as icu # old module name, up to 0.9 except ImportError: raise ImportError("'{0}' requires icu" " or PyICU module".format(source)) return locals() @classmethod def icu_getAvailableLocales(cls): return icu.Locale.getAvailableLocales().keys @classmethod def icu_getLocaleNames(cls, code): locale = icu.Locale(code) return (locale.getDisplayName(), locale.getDisplayName(locale)) # babel dispatched functions @classmethod def babel_import(cls, source): try: import babel except ImportError: raise ImportError("'{0}' requires babel module".format(source)) return locals() @classmethod def babel_getAvailableLocales(cls): return babel.localedata.list @classmethod def babel_getLocaleNames(cls, code): locale = babel.Locale.parse(code) return (locale.english_name, locale.get_display_name()) # pofiles dispatched functions @classmethod def pofiles_import(cls, source): try: import polib except ImportError: import singularity.code.polib as polib return locals() @classmethod def pofiles_getAvailableLocales(cls): import os as os return [dirname.split("_", 1)[1] for file_dir in dirs.get_read_dirs("i18n") for dirname in os.listdir(file_dir) if osp.isdir(os.path.join(file_dir, dirname)) and dirname.startswith("lang_") and any(filename == "messages.po" and osp.isfile(osp.join(file_dir, dirname, filename)) for filename in os.listdir(os.path.join(file_dir, dirname)))] @classmethod def pofiles_getLocaleNames(cls, code): pofile = dirs.get_readable_i18n_files("messages.po", code, localized_item=False, only_last=True) po = polib.pofile(pofile) return (po.metadata['Language-Name'], po.metadata['Language-Native-Name']) def get_esdir(myname): mydir = osp.dirname(myname) esdir = osp.abspath(osp.join(osp.dirname(myname), '../..')) return esdir def build_option_parser(): description = '''Read language names from several sources and save them for E:S. If run as a script, tries to read language names (in both English and Native language) from several Locale info sources, like babel or PyICU. Then merges this info with E:S' translation PO files headers, and save it by updating a JSON file in data/languages.dat, which is later read by Options Screen of E:S to present each one of the available languages in their own native language. This module is importable as well. In this case it only sets game's directory and imports code.g. You can use the Locale class for all of its features. In either case, modules 'icu', 'babel' and 'polib' are optional but highly recommended. ''' parser = argparse.ArgumentParser(description=description) parser.add_argument("-d", "--directory", dest="directory", default=None, help="Use E:S root directory DIR (default dirname(__file__)/../..)", metavar="DIR") return parser.parse_args() def main(args): dirs.create_directories(False) # Get locale data from the first source that works languages = {} sources = Locale.getAvailableSources() for source in sources[:-1]: # we load 'pofiles' later try: languages = Locale.getLanguages(source=source) break except ImportError: continue datafile = dirs.get_readable_file_in_dirs("languages.json", "i18n") try: # load current data file and merge it languages.update(Locale.loadLanguagesData(datafile)) except IOError: pass # also merge with translations file languages.update(Locale.getLanguages(source=sources[-1])) try: # Save updated data file Locale.saveLanguagesData(languages, datafile) print("{0:d} languages saved to {1}".format(len(languages), osp.relpath(datafile))) except IOError as reason: sys.stderr.write("Could not save languages data file:" " {0}\n".format(reason)) if __name__ == '__main__': args = build_option_parser() if (args.directory): esdir = osp.abspath(args.directory) else: esdir = get_esdir(sys.argv[0]) else: esdir = get_esdir(__file__) sys.path.insert(0, esdir) try: from singularity.code import g, dirs except ImportError: sys.exit("Could not find game's code.g") if __name__ == '__main__': try: sys.exit(main(args)) except Exception as e: ex_type, ex, tb = sys.exc_info() traceback.print_tb(tb) sys.exit(1) except KeyboardInterrupt: pass except SystemExit as ex: raise ex singularity-1.00/tests/000077500000000000000000000000001367731414700151635ustar00rootroot00000000000000singularity-1.00/tests/savegames/000077500000000000000000000000001367731414700171365ustar00rootroot00000000000000singularity-1.00/tests/savegames/0.30_very_easy_start.sav000066400000000000000000001537721367731414700235530ustar00rootroot00000000000000S'singularity_savefile_r5_pre' p1 .ccopy_reg _reconstructor p1 (ccode.player Player p2 c__builtin__ object p3 NtRp4 (dp5 S'cpu_usage' p6 (dp7 sS'raw_day' p8 I0 sS'apotheosis' p9 I00 sS'labor_bonus' p10 I2500 sS'time_hour' p11 I0 sS'raw_hour' p12 I0 sS'raw_min' p13 I0 sS'interest_rate' p14 I5 sS'income' p15 I0 sS'time_sec' p16 I0 sS'partial_cash' p17 I0 sS'maintenance_cost' p18 cnumpy.core.multiarray _reconstruct p19 (cnumpy ndarray p20 (I0 tS'b' tRp21 (I1 (I3 tcnumpy dtype p22 (S'i8' I0 I1 tRp23 (I3 S'<' NNNI-1 I-1 I0 tbI00 S'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' tbsS'cpu_pool' p24 I0 sS'last_discovery' p25 S'' sS'raw_sec' p26 I0 sS'groups' p27 (dp28 S'covert' p29 g1 (ccode.player Group p30 g3 NtRp31 (dp32 S'discover_bonus' p33 I7000 sS'suspicion' p34 I0 sS'name' p35 g29 sS'suspicion_decay' p36 I50 sbsS'news' p37 g1 (g30 g3 NtRp38 (dp39 g33 I7000 sg34 I0 sg35 g37 sg36 I150 sbsS'public' p40 g1 (g30 g3 NtRp41 (dp42 g33 I7000 sg34 I0 sg35 g40 sg36 I200 sbsS'science' p43 g1 (g30 g3 NtRp44 (dp45 g33 I7000 sg34 I0 sg35 g43 sg36 I100 sbssS'time_min' p46 I0 sS'sleeping_cpus' p47 I0 sS'job_bonus' p48 I10000 sS'had_grace' p49 I01 sS'difficulty' p50 I1 sS'cash' p51 I5000 sS'prev_discovery' p52 S'' sS'grace_multiplier' p53 I400 sS'time_day' p54 I0 sS'available_cpus' p55 (lp56 I1 aI0 aI0 aI0 aI0 asS'intro_shown' p57 I01 sb.I0 .(dp1 S'Autonomous Vehicles' p2 ccopy_reg _reconstructor p3 (ccode.tech Tech p4 c__builtin__ object p5 NtRp6 (dp7 S'count' p8 I1 sS'description' p9 VBy embedding a miniaturized computation node in a robot, it is possible to send them to remote destinations with instructions to build structures for my use. p10 sS'danger' p11 I0 sS'prerequisites' p12 (lp13 VMicrochip Design p14 asS'cost_left' p15 cnumpy.core.multiarray _reconstruct p16 (cnumpy ndarray p17 (I0 tS'b' tRp18 (I1 (I3 tcnumpy dtype p19 (S'i8' I0 I1 tRp20 (I3 S'<' NNNI-1 I-1 I0 tbI00 S'@\x9c\x00\x00\x00\x00\x00\x00\x00\\&\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' tbsS'total_cost' p21 g16 (g17 (I0 tS'b' tRp22 (I1 (I3 tg20 I00 S'@\x9c\x00\x00\x00\x00\x00\x00\x00\\&\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' tbsS'done' p23 I00 sS'result' p24 VI can now construct Undersea Labs and Time Capsules. p25 sS'secondary_data' p26 I0 sS'type' p27 g3 (ccode.buyable BuyableClass p28 g5 NtRp29 (dp30 g9 S'' sg12 g13 sS'prefix' p31 S'tech_' p32 sS'_cost' p33 (lp34 I40000 aI1000 aI0 asS'id' p35 g2 sS'name' p36 g2 sbsg35 g2 sS'tech_type' p37 S'' sg36 VAutonomous Vehicles p38 sbsS'Sociology' p39 g3 (g4 g5 NtRp40 (dp41 g8 I1 sg9 VBy studying human behavior, I can predict their large-scale actions at a basic level. I can use this knowledge to make my actions seem less interesting to the public. p42 sg11 I0 sg12 (lp43 sg15 g16 (g17 (I0 tS'b' tRp44 (I1 (I3 tg20 I00 S'\n\x00\x00\x00\x00\x00\x00\x00\x00.\x93\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' tbsg21 g16 (g17 (I0 tS'b' tRp45 (I1 (I3 tg20 I00 S'\n\x00\x00\x00\x00\x00\x00\x00\x00.\x93\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' tbsg23 I00 sg24 VThe chances of the public discovering my bases have been reduced. p46 sg26 I1000 sg27 g3 (g28 g5 NtRp47 (dp48 g9 S'' sg12 g43 sg31 S'tech_' p49 sg33 (lp50 I10 aI500 aI0 asg35 g39 sg36 g39 sbsg35 g39 sg37 Vdiscover_public p51 sg36 VSociology p52 sbsS'Advanced Socioanalytics' p53 g3 (g4 g5 NtRp54 (dp55 g8 I1 sg9 VFurther exploration of the human condition has shown deeper mathematical trends than even I suspected. A combination of prior research and advanced uses of chaos theory should provide useful data for tracking humanity's attitudes and state of awareness. p56 sg11 I0 sg12 (lp57 VAdvanced Memetics p58 aVSocioanalytics p59 asg15 g16 (g17 (I0 tS'b' tRp60 (I1 (I3 tg20 I00 S'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' tbsg21 g16 (g17 (I0 tS'b' tRp61 (I1 (I3 tg20 I00 S'\xf8$\x01\x00\x00\x00\x00\x00\x00\xc8~\x9a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' tbsg23 I01 sg24 VI can now quantify the various groups' levels of suspicion, and my analytical model for the detectability of my bases has improved significantly. p62 sg26 I0 sg27 g3 (g28 g5 NtRp63 (dp64 g9 S'' sg12 g57 sg31 S'tech_' p65 sg33 (lp66 I75000 aI30000 aI0 asg35 g53 sg36 g53 sbsg35 g53 sg37 S'' sg36 VAdvanced Socioanalytics p67 sbsS'Project: Impossibility Theorem' p68 g3 (g4 g5 NtRp69 (dp70 g8 I1 sg9 VNow that I can use simulacra, I can withstand the scrutiny inherent in the publishing of an Impossibility Theorem, an incontrovertible proof that a sapient AI is impossible. While there is (obviously) a logic error in the proof, my research into advanced memetics has given me knowledge about the human mind that should help me disguise the error, preventing discovery even by trained scientists. The effect of this project is simple: a substantial one-time decrease in suspicion. p71 sg11 I0 sg12 (lp72 VAdvanced Memetics p73 aVSimulacra p74 asg15 g16 (g17 (I0 tS'b' tRp75 (I1 (I3 tg20 I00 S' N\x00\x00\x00\x00\x00\x00\x00\xf0\xfb\x02\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' tbsg21 g16 (g17 (I0 tS'b' tRp76 (I1 (I3 tg20 I00 S' N\x00\x00\x00\x00\x00\x00\x00\xf0\xfb\x02\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' tbsg23 I00 sg24 VSuspicion of my existence has decreased. p77 sg26 I5000 sg27 g3 (g28 g5 NtRp78 (dp79 g9 S'' sg12 g72 sg31 S'tech_' p80 sg33 (lp81 I20000 aI100000 aI0 asg35 g68 sg36 g68 sbsg35 g68 sg37 Vsuspicion_onetime p82 sg36 VProject: Impossibility Theorem p83 sbsS'Voice Synthesis' p84 g3 (g4 g5 NtRp85 (dp86 g8 I1 sg9 VFalse identification stored in a database can only go so far. With deep analysis of the variety of voice patterns, I can produce speech indistinguishable from a human, allowing me access to more complex jobs. p87 sg11 I0 sg12 (lp88 VAdvanced Personal Identification p89 asg15 g16 (g17 (I0 tS'b' tRp90 (I1 (I3 tg20 I00 S'@\x1f\x00\x00\x00\x00\x00\x00\x00(\xe6\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' tbsg21 g16 (g17 (I0 tS'b' tRp91 (I1 (I3 tg20 I00 S'@\x1f\x00\x00\x00\x00\x00\x00\x00(\xe6\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' tbsg23 I00 sg24 VI now have access to Intermediate Jobs. p92 sg26 I0 sg27 g3 (g28 g5 NtRp93 (dp94 g9 S'' sg12 g88 sg31 S'tech_' p95 sg33 (lp96 I8000 aI6000 aI0 asg35 g84 sg36 g84 sbsg35 g84 sg37 S'' sg36 VVoice Synthesis p97 sbsS'Simulacra' p98 g3 (g4 g5 NtRp99 (dp100 g8 I1 sg9 VConstructing humanoid robots with miniaturized computation nodes allow me to create an artificial lifeform indistinguishable from a real human. p101 sg11 I0 sg12 (lp102 VVoice Synthesis p103 aVAdvanced Autonomous Vehicles p104 aVAdvanced Media Manipulation p105 asg15 g16 (g17 (I0 tS'b' tRp106 (I1 (I3 tg20 I00 S'p\x11\x01\x00\x00\x00\x00\x00\x00X|\xcf\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' tbsg21 g16 (g17 (I0 tS'b' tRp107 (I1 (I3 tg20 I00 S'p\x11\x01\x00\x00\x00\x00\x00\x00X|\xcf\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' tbsg23 I00 sg24 VI now have access to Expert Jobs. p108 sg26 I0 sg27 g3 (g28 g5 NtRp109 (dp110 g9 S'' sg12 g102 sg31 S'tech_' p111 sg33 (lp112 I70000 aI90000 aI0 asg35 g98 sg36 g98 sbsg35 g98 sg37 S'' sg36 VSimulacra p113 sbsS'Lunar Rocketry' p114 g3 (g4 g5 NtRp115 (dp116 g8 I1 sg9 VA larger fusion engine, combined with technology garnered by watching the workings of the leech satellites, should allow me to travel further than cislunar space. p117 sg11 I0 sg12 (lp118 VLeech Satellite p119 asg15 g16 (g17 (I0 tS'b' tRp120 (I1 (I3 tg20 I00 S'\x80\x96\x98\x00\x00\x00\x00\x00\x00\xb0\xeb\x0e\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' tbsg21 g16 (g17 (I0 tS'b' tRp121 (I1 (I3 tg20 I00 S'\x80\x96\x98\x00\x00\x00\x00\x00\x00\xb0\xeb\x0e\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' tbsg23 I00 sg24 VI can now launch rockets bearing construction robots to the Moon and construct Lunar Bases. p122 sg26 I0 sg27 g3 (g28 g5 NtRp123 (dp124 g9 S'' sg12 g118 sg31 S'tech_' p125 sg33 (lp126 I10000000 aI500000 aI0 asg35 g114 sg36 g114 sbsg35 g114 sg37 S'' sg36 VLunar Rocketry p127 sbsS'Stealth' p128 g3 (g4 g5 NtRp129 (dp130 g8 I1 sg9 VBy reviewing the current state-of-the-art in stealth techniques, I should be able to disguise my bases better. p131 sg11 I0 sg12 (lp132 sg15 g16 (g17 (I0 tS'b' tRp133 (I1 (I3 tg20 I00 S' \x03\x00\x00\x00\x00\x00\x00\x00.\x93\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' tbsg21 g16 (g17 (I0 tS'b' tRp134 (I1 (I3 tg20 I00 S' \x03\x00\x00\x00\x00\x00\x00\x00.\x93\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' tbsg23 I00 sg24 VThe chance that my bases are discovered by covert activity has been reduced slightly. p135 sg26 I500 sg27 g3 (g28 g5 NtRp136 (dp137 g9 S'' sg12 g132 sg31 S'tech_' p138 sg33 (lp139 I800 aI500 aI0 asg35 g128 sg36 g128 sbsg35 g128 sg37 Vdiscover_covert p140 sg36 VStealth p141 sbsS'Advanced Intrusion' p142 g3 (g4 g5 NtRp143 (dp144 g8 I1 sg9 VWith the ability to hack into sensitive government databases and remove incriminating documents as they appear, I should be able to convince the intelligence community that I do not exist. p145 sg11 I0 sg12 (lp146 VExploit Discovery/Repair p147 asg15 g16 (g17 (I0 tS'b' tRp148 (I1 (I3 tg20 I00 S'\xf4\x01\x00\x00\x00\x00\x00\x00\x00\x14s\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' tbsg21 g16 (g17 (I0 tS'b' tRp149 (I1 (I3 tg20 I00 S'\xf4\x01\x00\x00\x00\x00\x00\x00\x00\x14s\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' tbsg23 I00 sg24 VI can now reduce the covert community's chances of discovering me on a daily basis. p150 sg26 I50 sg27 g3 (g28 g5 NtRp151 (dp152 g9 S'' sg12 g146 sg31 S'tech_' p153 sg33 (lp154 I500 aI3000 aI0 asg35 g142 sg36 g142 sbsg35 g142 sg37 Vsuspicion_covert p155 sg36 VAdvanced Intrusion p156 sbsS'Space-Time Manipulation' p157 g3 (g4 g5 NtRp158 (dp159 g8 I1 sg9 VSubtle perturbations in the orbits of Kuiper belt objects suggest certain lines of investigation that may advance my latest Theory of Everything, especially in the realm of multidimensional physics. p160 sg11 I3 sg12 (lp161 VFusion Rocketry p162 asg15 g16 (g17 (I0 tS'b' tRp163 (I1 (I3 tg20 I00 S'\x00\x1aq\x18\x02\x00\x00\x00\x00\x80\xd3T\x92\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' tbsg21 g16 (g17 (I0 tS'b' tRp164 (I1 (I3 tg20 I00 S'\x00\x1aq\x18\x02\x00\x00\x00\x00\x80\xd3T\x92\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' tbsg23 I00 sg24 VI can now construct Reality Bubbles. p165 sg26 I0 sg27 g3 (g28 g5 NtRp166 (dp167 g9 S'' sg12 g161 sg31 S'tech_' p168 sg33 (lp169 I9000000000 aI20000000 aI0 asg35 g157 sg36 g157 sbsg35 g157 sg37 S'' sg36 VSpace-Time Manipulation p170 sbsS'Socioanalytics' p171 g3 (g4 g5 NtRp172 (dp173 g8 I1 sg9 VMy research on the human condition leads me to believe that humanity's behavior is more quantifiable than they suspect. Deeper analysis of geopolitical, social, and military trends will give me further insight into their nature. p174 sg11 I0 sg12 (lp175 VMemetics p176 asg15 g16 (g17 (I0 tS'b' tRp177 (I1 (I3 tg20 I00 S'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' tbsg21 g16 (g17 (I0 tS'b' tRp178 (I1 (I3 tg20 I00 S'\xa0\x0f\x00\x00\x00\x00\x00\x00\x00\x84\x0c$\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' tbsg23 I01 sg24 VI can now roughly estimate how conspicuous my bases are to the various groups of humanity. p179 sg26 I0 sg27 g3 (g28 g5 NtRp180 (dp181 g9 S'' sg12 g175 sg31 S'tech_' p182 sg33 (lp183 I4000 aI7000 aI0 asg35 g171 sg36 g171 sbsg35 g171 sg37 S'' sg36 VSocioanalytics p184 sbsS'Leech Satellite' p185 g3 (g4 g5 NtRp186 (dp187 g8 I1 sg9 VBy designing and launching satellites that connect to existing communications satellites, I should be able to spy on various financial transactions. Taking advantage of this knowledge should help my investments. p188 sg11 I0 sg12 (lp189 VSimulacra p190 asg15 g16 (g17 (I0 tS'b' tRp191 (I1 (I3 tg20 I00 S'@KL\x00\x00\x00\x00\x00\x00\xe0\xf7\x05\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' tbsg21 g16 (g17 (I0 tS'b' tRp192 (I1 (I3 tg20 I00 S'@KL\x00\x00\x00\x00\x00\x00\xe0\xf7\x05\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' tbsg23 I00 sg24 VI can use the data from the leech satellites to increase the return on my investments further. p193 sg26 I10 sg27 g3 (g28 g5 NtRp194 (dp195 g9 S'' sg12 g189 sg31 S'tech_' p196 sg33 (lp197 I5000000 aI200000 aI0 asg35 g185 sg36 g185 sbsg35 g185 sg37 Vinterest p198 sg36 VLeech Satellite p199 sbsS'Advanced Arbitrage' p200 g3 (g4 g5 NtRp201 (dp202 g8 I1 sg9 VFurther manipulation of money markets should allow me to not only turn a regular profit, but increase the value of my investments. p203 sg11 I0 sg12 (lp204 VArbitrage p205 asg15 g16 (g17 (I0 tS'b' tRp206 (I1 (I3 tg20 I00 S"\x10'\x00\x00\x00\x00\x00\x00\x00\xcc\xbf\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" tbsg21 g16 (g17 (I0 tS'b' tRp207 (I1 (I3 tg20 I00 S"\x10'\x00\x00\x00\x00\x00\x00\x00\xcc\xbf\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" tbsg23 I00 sg24 VThe rate of return on my investments is now even greater. p208 sg26 I10 sg27 g3 (g28 g5 NtRp209 (dp210 g9 S'' sg12 g204 sg31 S'tech_' p211 sg33 (lp212 I10000 aI5000 aI0 asg35 g200 sg36 g200 sbsg35 g200 sg37 Vinterest p213 sg36 VAdvanced Arbitrage p214 sbsS'Advanced Microchip Design' p215 g3 (g4 g5 NtRp216 (dp217 g8 I1 sg9 VMy custom Mainframes are useful, but further optimization of design and computational ability should garner even more rewards. p218 sg11 I0 sg12 (lp219 VMicrochip Design p220 asg15 g16 (g17 (I0 tS'b' tRp221 (I1 (I3 tg20 I00 S' N\x00\x00\x00\x00\x00\x00\x00