From 3355fdd8bd6c329f55118ebe5b5063ced102309a Mon Sep 17 00:00:00 2001 From: Robert Soulliere Date: Tue, 22 Feb 2011 12:11:46 -0500 Subject: [PATCH] Add files to 2.0. --- 2.0/admin/AdminMisc.xml | 320 + 2.0/admin/actiontriggers.xml | 322 + 2.0/admin/admin-booking.xml | 310 + 2.0/admin/serversideinstallation_2.0.xml | 1745 + 2.0/admin/sip.xml | 595 + 2.0/admin/troubleshooting.xml | 305 + 2.0/admin/z3950.xml | 205 + 2.0/appendices/glossary.xml | 563 +- ...sideinstallation-staffclient-running-1.png | Bin 0 -> 57714 bytes ...sideinstallation-staffclient-running-2.png | Bin 0 -> 99778 bytes ...sideinstallation-staffclient-running-3.png | Bin 0 -> 34973 bytes ...sideinstallation-staffclient-running-4.png | Bin 0 -> 79843 bytes .../serversideinstallation-testing-1.png | Bin 0 -> 166470 bytes .../serversideinstallation-testing-2.png | Bin 0 -> 176633 bytes ...ideinstallation-virtual-vbox-install-1.png | Bin 0 -> 56383 bytes ...ideinstallation-virtual-vbox-install-2.png | Bin 0 -> 79940 bytes ...ideinstallation-virtual-vbox-install-3.png | Bin 0 -> 68509 bytes ...ideinstallation-virtual-vbox-install-4.png | Bin 0 -> 30069 bytes ...ideinstallation-virtual-vbox-install-5.png | Bin 0 -> 79840 bytes ...rsideinstallation-virtual-vm-install-1.png | Bin 0 -> 21008 bytes ...sideinstallation-virtual-vm-install-10.png | Bin 0 -> 61271 bytes ...sideinstallation-virtual-vm-install-11.png | Bin 0 -> 20529 bytes ...sideinstallation-virtual-vm-install-12.png | Bin 0 -> 24168 bytes ...sideinstallation-virtual-vm-install-13.png | Bin 0 -> 31946 bytes ...sideinstallation-virtual-vm-install-14.png | Bin 0 -> 30725 bytes ...sideinstallation-virtual-vm-install-15.png | Bin 0 -> 31946 bytes ...sideinstallation-virtual-vm-install-16.png | Bin 0 -> 30725 bytes ...sideinstallation-virtual-vm-install-17.png | Bin 0 -> 47790 bytes ...sideinstallation-virtual-vm-install-18.png | Bin 0 -> 60665 bytes ...sideinstallation-virtual-vm-install-19.png | Bin 0 -> 63757 bytes ...rsideinstallation-virtual-vm-install-2.png | Bin 0 -> 68843 bytes ...sideinstallation-virtual-vm-install-20.png | Bin 0 -> 52103 bytes ...sideinstallation-virtual-vm-install-21.png | Bin 0 -> 56042 bytes ...rsideinstallation-virtual-vm-install-3.png | Bin 0 -> 63816 bytes ...rsideinstallation-virtual-vm-install-4.png | Bin 0 -> 33392 bytes ...rsideinstallation-virtual-vm-install-5.png | Bin 0 -> 72006 bytes ...rsideinstallation-virtual-vm-install-6.png | Bin 0 -> 76222 bytes ...rsideinstallation-virtual-vm-install-7.png | Bin 0 -> 58326 bytes ...rsideinstallation-virtual-vm-install-8.png | Bin 0 -> 77053 bytes ...rsideinstallation-virtual-vm-install-9.png | Bin 0 -> 70611 bytes 2.0/pdf/temp.fo | 42041 ++++++++++++++++ 2.0/root.xml | 8 + 2.0/stafftasks/booking.xml | 202 + 43 files changed, 46376 insertions(+), 240 deletions(-) create mode 100644 2.0/admin/AdminMisc.xml create mode 100644 2.0/admin/actiontriggers.xml create mode 100644 2.0/admin/admin-booking.xml create mode 100644 2.0/admin/serversideinstallation_2.0.xml create mode 100644 2.0/admin/sip.xml create mode 100644 2.0/admin/troubleshooting.xml create mode 100644 2.0/admin/z3950.xml create mode 100755 2.0/media/serversideinstallation-staffclient-running-1.png create mode 100755 2.0/media/serversideinstallation-staffclient-running-2.png create mode 100755 2.0/media/serversideinstallation-staffclient-running-3.png create mode 100755 2.0/media/serversideinstallation-staffclient-running-4.png create mode 100755 2.0/media/serversideinstallation-testing-1.png create mode 100755 2.0/media/serversideinstallation-testing-2.png create mode 100755 2.0/media/serversideinstallation-virtual-vbox-install-1.png create mode 100755 2.0/media/serversideinstallation-virtual-vbox-install-2.png create mode 100755 2.0/media/serversideinstallation-virtual-vbox-install-3.png create mode 100755 2.0/media/serversideinstallation-virtual-vbox-install-4.png create mode 100755 2.0/media/serversideinstallation-virtual-vbox-install-5.png create mode 100755 2.0/media/serversideinstallation-virtual-vm-install-1.png create mode 100755 2.0/media/serversideinstallation-virtual-vm-install-10.png create mode 100755 2.0/media/serversideinstallation-virtual-vm-install-11.png create mode 100755 2.0/media/serversideinstallation-virtual-vm-install-12.png create mode 100755 2.0/media/serversideinstallation-virtual-vm-install-13.png create mode 100755 2.0/media/serversideinstallation-virtual-vm-install-14.png create mode 100755 2.0/media/serversideinstallation-virtual-vm-install-15.png create mode 100755 2.0/media/serversideinstallation-virtual-vm-install-16.png create mode 100755 2.0/media/serversideinstallation-virtual-vm-install-17.png create mode 100755 2.0/media/serversideinstallation-virtual-vm-install-18.png create mode 100755 2.0/media/serversideinstallation-virtual-vm-install-19.png create mode 100755 2.0/media/serversideinstallation-virtual-vm-install-2.png create mode 100755 2.0/media/serversideinstallation-virtual-vm-install-20.png create mode 100755 2.0/media/serversideinstallation-virtual-vm-install-21.png create mode 100755 2.0/media/serversideinstallation-virtual-vm-install-3.png create mode 100755 2.0/media/serversideinstallation-virtual-vm-install-4.png create mode 100755 2.0/media/serversideinstallation-virtual-vm-install-5.png create mode 100755 2.0/media/serversideinstallation-virtual-vm-install-6.png create mode 100755 2.0/media/serversideinstallation-virtual-vm-install-7.png create mode 100755 2.0/media/serversideinstallation-virtual-vm-install-8.png create mode 100755 2.0/media/serversideinstallation-virtual-vm-install-9.png create mode 100644 2.0/pdf/temp.fo create mode 100644 2.0/stafftasks/booking.xml diff --git a/2.0/admin/AdminMisc.xml b/2.0/admin/AdminMisc.xml new file mode 100644 index 0000000000..ec6144ef98 --- /dev/null +++ b/2.0/admin/AdminMisc.xml @@ -0,0 +1,320 @@ + + + + + Server Operations and Maintenance + receipt template editor + + This chapter deals with basic server operations such as starting and stopping Evergreen as well wall + security, backing up and troubleshooting Evergreen. + + +
+ Starting, Stopping and Restarting + Occasionally, you may need to restart Evergreen. It is imperative that you understand the basic + commands to stop and start the Evergreen server. You can start and stop Evergreen from the command line of + the server using the osrf_ctl.sh script located in the + openils/bin directory. + The osrf_ctl.sh command must be run as the opensrf user. + To view help on osrf_ctl.sh and get all of its options, run: + osrf_ctl.sh -h + To start Evergreen, run: + osrf_ctl.sh -l -a start_all + The flag is used to indicate that Evergreen is configured to use localhost as + the host. If you have configured opensrf.xml to use your real hostname, do not use the flag. The + option is required and indicates the action of the command. In this case + . + + + If you receive the error message: osrf_ctl.sh: command not found, then your environment variable + PATHenvironment variablePATH does not include the + /openils/bin directory. You can set it using the following command: + export PATH=$PATH:/openils/bin + If you receive the error message Can't locate OpenSRF/System.pm in @INC … BEGIN + failed–compilation aborted, then your environment variable PERL5LIBenvironment + variablePERL5LIB does not + include the /openils/lib/perl5 directory. You can set it + using the following command: + export PERL5LIB=$PERL5LIB:/openils/lib/perl5 + + It is also possible to start a specific service. For example: + osrf_ctl.sh -l -a start_router + will only start the router service. + + If you decide to start each service individually, you need to start them in a specific order + for Evergreen to start correctly. Run the commands in this exact order: + osrf_ctl.sh -l -a start_router + osrf_ctl.sh -l -a start_perl + osrf_ctl.sh -l -a start_c + + After starting or restarting Evergreen, it is also necessary to restart the Apache web server + web serverApache for the OPAC to work correctly. + To stop Evergreen, run: + osrf_ctl.sh -l -a stop_all + As with starting, you can choose to stop services individually. + To restart Evergreen, run: + osrf_ctl.sh -l -a restart_all +
+
+ Backing Up + databasesbacking up + + Backing up your system files and data is a critical task for server and database administrators. + Having a strategy for backing up and recovery could be the difference between a minor annoyance for users and + a complete catastrophe. + + Backing up the <application>Evergreen</application> Databasedatabases + Most of the critical data for an Evergreen system – patrons, bibliographic records, holdings, + transactions, bills – is stored in the PostgreSQLdatabases + PostgreSQL database. You can therefore use normal + PostgreSQL backup procedures to backup this data. For example, the simplest method of backing up the Evergreen + database is to use the pg_dump command to create a live backup of the database without having to + interrupt any Evergreen services. Here is an example pg_dump command which will dump a local Evergreen database into a the file evergreen_db.backup: + pg_dump -U evergreen -h localhost -f evergreen_db.backup evergreen + To restore the backed up database into a new database, create a new database using the + template0 database template and the UTF8 encoding, and run the psql command, specifying the new + database as your target: + createdb -T template0 -E UTF8 -U evergreen -h localhost new_evergreen + psql -U evergreen -h localhost -f evergreen_db.backup new_evergreen + + This method of backup is only suitable for small Evergreen instances. Larger sites + should consider implementing continuous archiving (also known as log shipping) to provide + more granular backups with lower system overhead. More information on backing up PostgreSQL + databases can be found in the official PostgreSQL documentation. + + + + Backing up Evergreen Files + directoriesbacking up + When you deploy Evergreen, you will probably customize many aspects of your system including + the system configuration files, Apache configuration files, OPAC and Staff Client. In order to + protect your investment of time, you should carefully consider the best approach to backing up + files. + There are a number of ways of tackling this problem. You could create a script that regularly + creates a time-stamped tarball of all of these files and copies it to a remote server - but that + would build up over time to hundreds of files. You could use rsync + rsync to ensure that the files of + interest are regularly updated on a remote server - but then you would lose track of the changes to + the files, should you make a change that introduces a problem down the road. + Perhaps one of the best options is to use a version control system like + BazaarVersion Control SystemSubversion, + gitVersion Control Systemgit + or SubversionVersion Control System + Subversion to regularly push updates of the files you care about to a repository on a + remote server. This gives you the advantage of quickly being able to run through the history of the + changes you made, with a commenting system that reminds you why each change was made, combined with + remote storage of the pertinent files in case of disaster on site. In addition, your team can create + local copies of the repository and test their own changes in isolation from the production + system. Using a version control system also helps to recover system customizations after an + upgrade. + + + Full System Backup + A full system backup archives every file on the file system. Some basic methods require you + to shut down most system processes; other methods can use mirrored RAIDRAID setups or + SANSAN storage to + take snapshot backups of your full system while the system continues to run. The subject of how + to implement full system backups is beyond the scope of this documentation. + +
+
+ Security + security + As with an ILS and resource accessible from the world wide web careful consideration needs to be + given to the security of your Evergreen servers and database. While it is impossible to cover all aspects + of security, it is important to take several precautions when setting up production Evergreen site. + + + Change the Evergreen admin password and keep it secure. The + default admin password is known by anyone who has installed Evergreen. It is not a secret + and needs to be changed by the Administrator. It should also only be shared by those who + need the highest level of access to your system. + + + Create strong passwords using a combination of numerical and alphabetical characters + for all of the Administrative passwords including the postgres and + opensrf users + + + Open ports in the firewallfirewall with caution - It is only necessary to open ports + 80 and 443 + for TCP connections to the Evergreen server from the OPAC and the staff client. It is critical for administrators to + understand the concepts of network security and take precautions to minimize vulnerabilities. + + + + Use permissions permissions and permission groups wisely - it is important to understand the + purpose of the permissions and to only give users the level of access that they require. + + + +
+
+ Managing Log Files + logsmanaging + Evergreen comes with a sophisticated logging system, but it is important to manage the OpenSRF + and Evergreen logs. This section will provide a couple of log management techniques and tools. + + Using the <systemitem class="service">logrotate</systemitem> Utility to Manage Log Size + logsLog Rotate + Fortunately, this is not a new problem for Unix administrators, and there are a number of ways of keeping your logs under control. + On Debian and Ubuntu, for example, + the logrotate utility controls when old log files are compressed and a new log file is started. + logrotate runs once a day and checks all log files that it knows about to see if a + threshold of time or size has been reached and rotates the log files if a threshold condition has been met. + To teach logrotate to rotate Evergreen logs on a weekly basis, or if they are > 50MB in size, + create a new file /etc/logrotate.d/evergreen with the following contents: + +compress +/openils/var/log/*.log { +# keep the last 4 archived log files along with the current log file + # log log.1.gz log.2.gz log.3.gz log.4.gz + # and delete the oldest log file (what would have been log.5.gz) +rotate 5 +# if the log file is > 50MB in size, rotate it immediately +size 50M + # for those logs that don't grow fast, rotate them weekly anyway + weekly +} + + + + Changing Logging Level for <application>Evergreen</application> + logslogging levels + Change the Log Levels in your config files. Changing the level of logging will help + narrow down errors. + + A high logging level is not wise to do in a production environment since it + will produce vastly larger log files and thus reduce server performance. + + Change logging levels by editing the configuration file + /openils/conf/opensrf_core.xmlconfiguration filesopensrf_core.xml + you will want to search for lines containing <loglevel>. + the default setting for loglevel is 3 which will log errors, + warnings and information. + The next level is 4 which is for debugging and provides additional information + helpful for the debugging process. + Thus, lines with: + <loglevel>3</loglevel> + Should be changed to: + <loglevel>4</loglevel> + to allow debugging level logging + Other logging levels include 0 for no logging, + 1 for logging errors and 2 for logging warnings + and errors. + +
+
+ Installing PostgreSQL from Source + databasesPostgreSQL + Some Linux distributions, such as Debian Etch (4.0), do not offer PostgreSQL + version 8.2 as an installable package. Before you continue, examine the software dependencies listed in + to ensure that your Linux distribution supports the required version of PostgreSQL. + + + Some Linux distributions, such as Debian Etch (4.0), do not offer PostgreSQL + version 8.2 as an installable package. Before you continue, examine the software dependencies listed in + to ensure that your Linux distribution supports the required version of PostgreSQL. + + + + + Install the application stow on your system if it is not already installed. Issue the following command as + the root user: + +apt-get install stow + + + + Download, compile, and install the latest release for PostgreSQL 8.2 (which was version 8.2.12 at the time of this writing). + As the root user, follow these steps: + + + +wget http://wwwmaster.postgresql.org/redir/198/h/source/v8.2.17/postgresql-8.2.17.tar.bz2 +tar xzf postgresql-8.2.17.tar.gz +cd postgresql-8.2.17 +./configure --with-perl --enable-integer-datetimes --with-openssl --prefix=/usr/local/stow/pgsql +make +make install +cd contrib +make +make install +cd xml2 +make +make install +cd /usr/local/stow +stow pgsql + + + + + + Create the new user postgres to run the PostgreSQL processes. + As the root user, execute this command: + adduser postgres + + + Initialize the database directory and start up PostgreSQL. As the root user, follow these steps: + + + +mkdir -p /usr/local/pgsql/data +chown postgres /usr/local/pgsql/data +su - postgres +initdb -D /usr/local/pgsql/data -E UNICODE --locale=C +pg_ctl -D /usr/local/pgsql/data -l /home/postgres/logfile start + + + + If an error occurs during the final step above, review the path of the home directory for the + postgres user. It may be /var/lib/postresql instead of /home/postres. + + + +
+
+ Configuring PostgreSQL + databasesPostgreSQL + The values of several PostreSQL configuration parameters may be changed for enhanced performance. The following table lists the default values + and some suggested updates for several useful parameters: + + Suggested configuration values + + + + + + + Parameter + Default + Suggested + + + + + default_statistics_target + 10 + 100 + + + work_mem + 4Mb + 128Mb + + + shared_buffers + 8Mb + 512Mb + + + effective_cache_size + 128Mb + 4Gb + + + +
+
+
diff --git a/2.0/admin/actiontriggers.xml b/2.0/admin/actiontriggers.xml new file mode 100644 index 0000000000..7e7941c5f8 --- /dev/null +++ b/2.0/admin/actiontriggers.xml @@ -0,0 +1,322 @@ + + + + Action Triggers + action triggers + + Action Triggers were introduced to Evergreen in 1.6. They allow administrators the ability to set up actions for specific events. They are useful for notification events such as + hold notifications. + + + To access the Action Triggers module, select + + Admin + Local Administration + Notifications / Action triggers + + + You must have Local Administrator permissions to access the Action Triggers module. + You will notice four tabs on this page: Event Definitions, Hooks, + Reactors and Validators. + +
+ Event Definitions + action triggersevent definitions + Event Definitions is the main tab and contains the key fields when working with action triggers. These fields include: + + Action Trigger Event Definitions + + + + + + Field + Description + + + + + Owning library + The shortname of the library for which the action / trigger / hook is defined. + + + Name + The name of the trigger event, that links to a trigger event environment containing a set of fields + that will be returned to the Validators / Reactors for processing. + + + Hooks + The name of the trigger for the trigger event. The underlying action_trigger.hook table defines the Fieldmapper + class in the core_type column off of which the rest of the field definitions hang. + + + Enabled + Sets the given trigger as enabled or disabled. This must be set to enabled for the Action trigger to run. + + + Processing Delay + Defines how long after a given trigger / hook event has occurred before the associated action (Reactor) + will be taken. + + + Processing Delay Field + Defines the field associated with the event on which the processing delay is calculated. For example, the processing delay + context field on the hold.capture hook (which has a core_type of ahr) is capture_time. + + + Processing Group Context Field + Used to batch actions based on its associated group. + + + Validators + The subroutines receive the trigger environment as an argument (see the linked Name for + the environment definition) and returns either 1 if the validator is true or 0 + if the validator returns false. + + + Reactors + Links the action trigger to the Reactor. + + + Max Event Validity Delay + Define the threshold for how far back the action_trigger_runner.pl script should reach to generate + a batch of events. + + + +
+ + + Creating Action Triggers + action triggerscreating + + From the top menu, select + + Admin + Local Administration + Notifications / Action triggers + + + + Click on the New button. + Select an Owning Library. + Create a unique Name for your new action trigger. + Select the Hook. + Check the Enabled check box. + + Create a unique Name for your new action trigger. + Set the Processing Delay in the appropriate format. Eg. 7 days to run 7 days from the trigger event + or 00:01:00 to run 1 hour after the Processing Delay Context Field. + Set the Processing Delay Context Field and Processing Group Context Field. + Select the Validator, Reactor, Failure Cleanup and Success Cleanup. + + Set the Processing Delay Context Field and Processing Group Context Field. + Enter text in the Template text box if required. These are for email messages. Here is an sample + template for sending 90 day overdue notices: + + + + Once you are satisfied with your new event trigger , click the Save button located at the bottom of the + form + + A quick and easy way to create new action triggers is to clone an existing action trigger. + + Cloning Existing Action Triggers + + Check the check box next to the action trigger you wish to clone + + + Click the Clone Selected on the top left of the page. + + + An editing window with open. Notice that the fields will be populated with content from the cloned action trigger. Edit as necessary and + give the new action trigger a unique Name. + + + Click Save. + + + + Editing Action Triggers + + Check the check box next to the action trigger you wish to delete + + + Click the Delete Selected on the top left of the page. + + + + Before deleting an action trigger, you should consider disabling it through the editing form. This way you can simply enable it if you decide that you would like to use + the action trigger in the future. + + Deleting Action Triggers + + Check the check box next to the action trigger you wish to delete + + + Click the Delete Selected on the top left of the page. + + +
+
+ Hooks + action triggershooks + Hooks define the Fieldmapper class in the core_type column off of which the rest of the field definitions hang. + + Hooks + + + + + + Field + Description + + + + + Hook Key + A unique name given to the hook. + + + Core Type + Used to link the action trigger to the IDL class in fm_IDL.xml + + + Description + Text to describe the purpose of the hook. + + + Passive + Indicates whether or not an event is created by direct user action or is circumstantial. + + + +
+ You may also create, edit and delete Hooks but the Core Type must refer to an IDL class in the fm_IDL.xml file. +
+
+ Reactors + action triggersreactors + Reactors link the trigger definition to the action to be carried out. + + Action Trigger Reactors + + + + + + Field + Description + + + + + Module Name + The name of the Module to run if the action trigger is validated. It must be defined as a subroutine in + /openils/lib/perl5/OpenILS/Application/Trigger/Reactor.pm or as a module + in /openils/lib/perl5/OpenILS/Application/Trigger/Reactor/*.pm. + + + Description + Description of the Action to be carried out. + + + +
+ You may also create, edit and delete Reactors. Just remember that their must be an associated subroutine or module in the Reactor Perl module. +
+
+ Validators + action triggersvalidators + Validators set the validation test to be preformed to determine whether the action trigger is executed. + + Action Trigger Validators + + + + + + + Field + Description + + + + + Module Name + The name of the subroutine in + /openils/lib/perl5/OpenILS/Application/Trigger/Reactor.pm to validate the action trigger. + + + Description + Description of validation test to run. + + + +
+ You may also create, edit and delete Validators. Just remember that their must be an associated subroutine in the Reactor.pm Perl module. +
+
+ Processing Action Triggers + action triggersprocessing + To run the action triggers, an Evergreen administrator will need to run the trigger processing script /openils/bin/action_trigger_runner.pl + . This should be set up as a cron job to run + periodically. + You have several options when running the script: + + : Run the pending events. + : Create hook events + : OpenSRF core config file. Defaults to: + /openils/conf/opensrf_core.xml. + : File containing a JSON Object which describes any hooks that should + use a user-defined filter to find their target objects. Defaults to: /openils/conf/action_trigger_filters.json + : When in process-hooks mode, wait up to [seconds] for the lock file to go away. + Defaults to 3600 (1 hour). + : Define which hooks to create events for. If none are defined, it defaults to the list of hooks defined + in the option. + : Print server responses to stdout (as JSON) for debugging. + : Sets the lock file for the process. + : Show help information. + +
+
+ diff --git a/2.0/admin/admin-booking.xml b/2.0/admin/admin-booking.xml new file mode 100644 index 0000000000..1a5ae446f8 --- /dev/null +++ b/2.0/admin/admin-booking.xml @@ -0,0 +1,310 @@ + + + + Booking Module Administration + + Adapted with permission from original material by the Evergreen + Community + + + + The Evergreen booking module is included in Evergreen 1.6.1.x and above.The following + documentation will include information about making cataloged items bookable; making + non-bibliographic items bookable; and setting permissions in the booking module for + staff. + + +
+ Make a Cataloged Item Bookable in Advance + booking reservationmaking a cataloged item bookable + If their permission settings allow, staff members can make items bookable. Staff members + can do this in advance of a booking request, or they can do it on the fly. + If you know in advance of the request that an item will need to be booked, you can make + the item bookable. + + + + + In the staff client, select + Search + Search the Catalog + + + + Begin a title search to find an item. + + + Click the title of the item that you want to book. + + + + The Record Summary will appear. In this view you can see + information about the item and its locations. Click + Actions for this Record + Holdings Maintenance + in the top right corner of the screen. + + + + The Holdings Maintenance screen will appear. In this screen, + you can view the volumes and copies of an item avaialable at each branch. To view the + barcodes and other information for each copy, click the arrow adjacent to the branch + with the copy that you need to view. Click on successive arrows until you find the + copy that you need to view. + + + Select the item that you want to make bookable. Right click to open the menu, and + click Make Item Bookable. + + + The item has now been added to the list of resources that are bookable. To book + the item, return to the Record Summary, and proceed with + booking.. + + + + + In Evergreen 1.6.1, there is no way to make an item “unbookable” after it has been + made bookable and has been reserved. The Delete Selected button + on this screen deletes the resource from the screen, but the item will be able to be + booked after it has been returned. + + +
+
+ Make a Cataloged Item Bookable On the Fly + If a patron wants to book an item immediately that does not have bookable status, you + can book the item on the fly if you have the appropriate permissions. + + + + Follow steps one through five in . + + + Select the item that you want to make bookable. Right click to open the menu, and + click Book Item Now. + + + A Reservations screen will appear in a new tab, and you can + make the reservation. + + + + +
+
+ Create a Bookable Status for Non-Bibliographic Items + booking reservationnon-bibliographic items + Staff with the required permissions can create a bookable status for non-bibliographic + items. For example, staff can book conference rooms or laptops. You will be able to create + types of resources, specify the names of individual resources within each type, and set + attributes to describe those resources. You can then bring the values together through the + Resource Attribute Map. + + + First, create the type of resource that you want to make bookable. Select + Admin + Server Administration + Booking + Resource Types + . + + + A list of resource types will appear. You may also see titles of cataloged items + on this screen if they were added using the Make Item Bookable + or Book Now links. You should not attempt to add cataloged items + on this screen; it is best to use the aforementioned links to make those items + bookable. In this screen, you will create a type of resource. + + + In the right corner, click New Resource Type. + + + A box will appear in which you will create a type of resource. In this box, you + can set fines, determine “elbow room” periods between reservations on this type of + resource, and indicate if this type of resource can be transferred to another + library. Click Save when you have entered the needed + information. + + + After you click Save, the box will disappear. Refresh the + screen to see the item that you have added. + + + Next, set the attributes for the type of resource that you have created. Select + Server Administration + Booking + Resource Attributes + . + + + + Click New Resource Attribute. + + + + A box will appear in which you can add the attributes of the resource. Attributes + are descriptive information that is provided to the staff member when the booking + request is made. For example, an attribute of the projector may be a cart that allows + for its transportation. Other attributes might be number of seats available in a + room, or MAC or PC attributes for a laptop. Click Save when + the necessary information has been entered. + + + + The box will disappear. Refresh the screen to see the added attribute. + + + + Next, add the values for the resource attributes. A value can be a number, yes/no, + or any other meaningful information. Select + Server Administration + Booking + Resource Attribute Values + . + + + + Select New Resource Attribute Value. + + + + A pop up box will appear. Select the Resource Attribute from + the drop down box. Add the value. You can add multiple values for this field. Click + Save when the required information has been added. + + + + If you refresh the screen, the attribute value may not appear, but it has been + saved. + + + + Next, identify the specific objects that are associated with this resource type. + Click + Admin + Server Administration + Booking + Resources + . + + + + Click New Resource. + + + + A pop-up box will appear. Add information for the resource and click + Save. Repeat this process for each resource. + + + + Refresh the screen, and the resource(s) that you added will appear. + + + + Finally, use Resource Attribute Maps to bring together the + resource and its attributes. Select + Admin + Server Administration + Booking + Resource Attribute Maps + . + + + + Select New Resource Attribute Map + + + + Select the resource that you want to match with its attributes, then click + Save. Repeat for all applicable resources. + + + + You have now created bookable, non-bibliographic resource(s) with + attributes. + + + +
+
+ Setting Booking Permissions + booking reservationsetting booking permissions + Administrators can set permissions so that staff members can view reservations, make + reservations, and make bibliographic or non-bibliographic items bookable. + + If a staff member attempts to book an item for which they do not have the appropriate + permissions, they will receive an error message. + + To set permissions, select + Admin + Server Administration + Permissions + . + + Staff members should be assigned the following permissions to do common tasks in the + booking module. These permissions could be assigned to front line staff members, such as + circulation staff. Permissions with an asterisk (*) are + already included in the Staff permission group. All other + booking permissions must be applied individually. + + + + View Reservations: VIEW_TRANSACTION* + + + Use the pull list: + RETRIEVE_RESERVATION_PULL_LIST + + + Capture reservations: CAPTURE_RESERVATION + + + Assist patrons with pickup and return: + VIEW_USER* + + + Create/update/delete reservations: + ADMIN_BOOKING_RESERVATION + + + + The following permissions allow users to do more advanced tasks, such as making items + bookable, booking items on the fly, and creating non-bibliographic resources for + booking. + + + + Create/update/delete booking resource type: + ADMIN_BOOKING_RESOURCE_TYPE + + + Create/update/delete booking resource attributes: + ADMIN_BOOKING_RESOURCE_ATTR + + + Create/update/delete booking resource attribute + values: ADMIN_BOOKING_RESOURCE_ATTR_VALUE + + + Create/update/delete booking resource: + ADMIN_BOOKING_RESOURCE + + + Create/update/delete booking resource attribute + maps: ADMIN_BOOKING_RESOURCE_ATTR_MAP + + + + In addition to having the permissions listed above, staff members will need a valid + working location in their profiles. This should be done when registering new staff members. + + + +
+
diff --git a/2.0/admin/serversideinstallation_2.0.xml b/2.0/admin/serversideinstallation_2.0.xml new file mode 100644 index 0000000000..89a6f5f205 --- /dev/null +++ b/2.0/admin/serversideinstallation_2.0.xml @@ -0,0 +1,1745 @@ + + + + Server-side Installation of Evergreen Software + + This section describes installation of the Evergreen server-side software and its associated components. + Installation, configuration, testing and verification + of the software is straightforward if you follow some simple directions. + + + Installing, configuring and testing the Evergreen server-side software is straightforward with the current + stable software release. + The current version of the Evergreen server-side software runs as a native application on any of several + well-known Linux distributions + (e.g., Ubuntu and Debian). + It does not currently run as a native application on the Microsoft Windows + operating system (e.g., WindowsXP, WindowsXP + Professional, Windows7), but the software can still be + installed and run on Windows via a so-called + virtualized Linux-guest Operating System (using, for example, + "VirtualBox" or "VMware" + to emulate a Linux + environment). It can also be installed to run on other Linux + systems via virtualized environments (using, for example, "VirtualBox" or + "VMware"). More information on virtualized environments can be found in + . + Installation of the Evergreen Staff Client software is reviewed in . + The Evergreen server-side software has dependencies on particular versions of certain major software + sub-components. Successful installation of Evergreen software requires that software versions agree with those + listed here: + + + Evergreen Software Dependencies + + Evergreen software dependencies + + + + + + + + Evergreen + OpenSRF + PostgreSQL + + + + + 2.0 + 1.6.2 + 8.4 + + + +
+
+ Installing Server-Side Software + This section describes the installation of the major components of Evergreen server-side software. + As far as possible, you should perform the following steps in the exact order given since the + success of many steps relies on the successful completion of earlier steps. You should make backup + copies of files and environments when you are instructed to do so. In the event of installation problems + those copies can allow you to back out of a step gracefully and resume the installation from a known + state. See for further information. + Of course, after you successfully complete and test the entire Evergreen installation you should + take a final snapshot backup of your system(s). This can be the first in the series of regularly + scheduled system backups that you should probably also begin. +
+ + OpenSRF + installation + + Installing OpenSRF 1.6.2 On <systemitem class="osname">Ubuntu</systemitem> or + <systemitem class="osname">Debian</systemitem> + + Linux + Debian + + + Linux + Ubuntu + + This section describes the installation of the latest version of the Open Service Request + Framework (OpenSRF), a major component of the Evergreen server-side software, on + Ubuntu or Debian + systems. Evergreen software is integrated with and depends on the OpenSRF software + system. + Follow the steps outlined here and run the specified tests to ensure that OpenSRF is + properly installed and configured. Do not + continue with any further Evergreen installation steps + until you have verified that OpenSRF has been successfully installed and tested. + + The following steps have been tested on the x86 (32-bit) and x86-64 (64-bit) + platforms. OpenSRF 1.6.2 has been tested on Debian Lenny (5.0), Debian Squeeze (6.0) + and Ubuntu Lucid Lynx (10.04), Debian Lenny (5.0), + CentOS 5, Red Hat Enterprise Linux 5. + In the following instructions, you are asked to perform certain steps as + either the root user, the + opensrf user, or the + postgres user. + + + Debian -- To become the + root user, issue the command + su - and enter the password of the + root user. + + + Ubuntu -- To become the + root user, issue the command + sudo su - and enter the password of the + root user. + + + To switch from the root user to a + different user, issue the command su - USERNAME. For example, to + switch from the root user to the + opensrf user, issue the command + su - opensrf. Once you have become a non-root user, to become + the root user again, simply issue the command + exit. + + + + Add New <systemitem class="username">opensrf</systemitem> User + As the root user, add the + opensrf user to the system. + In the following example, the default shell for the + opensrf user is automatically set + to /bin/bash to inherit a reasonable environment: + + + # as the root user: + useradd -m -s /bin/bash opensrf + passwd opensrf + + + + Download and Unpack Latest OpenSRF Version + + OpenSRF + download + + The latest version of OpenSRF can be found here: + . + As the opensrf user, change to + the directory /home/opensrf then download + and extract OpenSRF. The new subdirectory + /home/opensrf/OpenSRF-1.6.2 will be created: + + + # as the opensrf user: + cd /home/opensrf + wget http://evergreen-ils.org/downloads/OpenSRF-1.6.2.tar.gz + tar zxf OpenSRF-1.6.2.tar.gz + + + + Install Prerequisites to Build OpenSRF + In this section you will install and configure a set of prerequisites that will be + used to build OpenSRF. In a following step you will actually build the OpenSRF software + using the make utility. + As the root user, enter the commands show + below to build the prerequisites from the software distribution that you just downloaded + and unpacked. Remember to replace [DISTRIBUTION] in the following + example with the keyword corresponding to the name of one of the + Linux listed distributions. + For example, to install the prerequisites for Ubuntu version 10.04 (Lucid Lynx) you would + enter this command: make -f src/extras/Makefile.install ubuntu-lucid . + + + # as the root user: + cd /home/opensrf/OpenSRF-1.6.2 + make -f src/extras/Makefile.install [DISTRIBUTION] + + + + for Debian Squeeze (6.0) + LinuxDebian + + + for Ubuntu Lucid Lynx + (10.04) + + + for CentOS 5 + + + for Red Hat Enterprise Linux 5 + + + This will install a number of packages on the system that are required by OpenSRF, + including some Perl modules from CPAN. You can say No to the initial + CPAN configuration prompt to allow it to automatically configure itself to download and + install Perl modules from CPAN. The CPAN installer will ask you a number of times whether + it should install prerequisite modules - say Yes. + + + Build OpenSRF + In this section you will configure, build and install the OpenSRF + components that support other Evergreen services. + + + Configure OpenSRF + + OpenSRF + configure + + As the opensrf + user, return to the new OpenSRF build directory and use the + configure utility to prepare for the next + step of compiling and linking the software. If you wish to + include support for Python and Java, add the configuration + options and + , respectively: + + + # as the opensrf user: + cd /home/opensrf/OpenSRF-1.6.2 + ./configure --prefix=/openils --sysconfdir=/openils/conf + make + + This step will take several minutes to complete. + + + Compile, Link and Install OpenSRF + As the root + user, return to the new OpenSRF build directory and use the + make utility to compile, link and install + OpenSRF: + + + # as the root user: + cd /home/opensrf/OpenSRF-1.6.2 + make install + + This step will take several minutes to complete. + + + Update the System Dynamic Library Path + You must update the system dynamic library path to force + your system to recognize the newly installed libraries. As the + root user, do this by + creating the new file + /etc/ld.so.conf.d/osrf.conf containing a + new library path, then run the command + ldconfig to automatically read the file and + modify the system dynamic library path: + + + # as the root user: + echo "/openils/lib" > /etc/ld.so.conf.d/osrf.conf + ldconfig + + + + Define Public and Private OpenSRF Domains + For security purposes, OpenSRF uses Jabber domains to separate services + into public and private realms. On a single-server system the easiest way to + define public and private OpenSRF domains is to define separate host names by + adding entries to the file /etc/hosts. + In the following steps we will use the example domains + public.localhost for the public + domain and private.localhost + for the private domain. In an upcoming step, you will configure two special + ejabberd users + to handle communications for these two domains. + As the root user, edit the file + /etc/hosts and add the following example domains: + + Jabber + + + + # as the root user: + 127.0.1.2 public.localhost public + 127.0.1.3 private.localhost private + + + + Change File Ownerships + Finally, as the root + user, change the ownership of all files installed in the + directory /openils to the + user opensrf: + + + # as the root user: + chown -R opensrf:opensrf /openils + + + + + + Stop the <systemitem class="service">ejabberd</systemitem> Service + + ejabberd + + Before continuing with configuration of ejabberd + you must stop that service. As the root user, + execute the following command to stop the service: + + + # as the root user: + /etc/init.d/ejabberd stop + + If ejabberd reports that it + is already stopped, there may have been a problem when it started back + in the installation step. If there are any remaining daemon processes such as + beam or + epmd + you may need to perform the following commands to kill them: + + + # as the root user: + epmd -kill + killall beam; killall beam.smp + rm /var/lib/ejabberd/* + echo 'ERLANG_NODE=ejabberd@localhost' >> /etc/default/ejabberd + + + + Edit the <systemitem class="service">ejabberd</systemitem> configuration + You must make several configuration changes for the + ejabberd service before + it is started again. + As the root user, edit the file + /etc/ejabberd/ejabberd.cfg and make the following changes: + + + Change the line: + {hosts, ["localhost"]}. + to instead read: + {hosts, ["localhost", "private.localhost", "public.localhost"]}. + + + + Change the line: + {max_user_sessions, 10} + to instead read: + {max_user_sessions, 10000} + + If the line looks something like this: + {access, max_user_sessions, [{10, all}]} + then change it to instead read: + {access, max_user_sessions, [{10000, all}]} + + + Change all three occurrences of: + max_stanza_size + to instead read: + 2000000 + + + Change both occurrences of: + maxrate + to instead read: + 500000 + + + Comment out the line: + {mod_offline, []} + by placing two % comment signs in front + so it instead reads: + %%{mod_offline, []} + + + + + Restart the <systemitem class="service">ejabberd</systemitem> service + As the root user, restart the + ejabberd service to test the + configuration changes and to register your users: + + + # as the root user: + /etc/init.d/ejabberd start + + + + Register <systemitem class="username">router</systemitem> and + <systemitem class="username">opensrf</systemitem> as + <systemitem class="service">ejabberd</systemitem> users + The two ejabberd users + router and + opensrf must be registered + and configured to manage OpenSRF router service and communications + for the two domains public.localhost and + private.localhost that you added to the file + /etc/hosts in a previous step + (see ). + The users include: + + + the router user, + to whom all requests to connect to an OpenSRF service will be + routed; + + + the opensrf user, + which clients use to connect to OpenSRF services (you may name + the user anything you like, but we use + opensrf in these examples) + + + As the root user, execute the + ejabberdctl utility as shown below to register and create passwords + for the users router and + opensrf on each domain (remember to replace + NEWPASSWORD with the appropriate password): + + + # as the root user: + # Note: the syntax for registering a user with ejabberdctl is: + # ejabberdctl register USER DOMAIN PASSWORD + ejabberdctl register router private.localhost NEWPASSWORD + ejabberdctl register router public.localhost NEWPASSWORD + ejabberdctl register opensrf private.localhost NEWPASSWORD + ejabberdctl register opensrf public.localhost NEWPASSWORD + + Note that the users router and + opensrf and their respective passwords + will be used again in when + we modify the OpenSRF configuration file /openils/conf/opensrf_core.xml . + + + Create OpenSRF configuration files + As the opensrf user, + execute the following commands to create the new configuration files + /openils/conf/opensrf_core.xml and + /openils/conf/opensrf.xml from the example templates: + + + # as the opensrf user: + cd /openils/conf + cp opensrf.xml.example opensrf.xml + cp opensrf_core.xml.example opensrf_core.xml + + + + Update usernames and passwords in the OpenSRF configuration file + As the opensrf user, edit the + OpenSRF configuration file /openils/conf/opensrf_core.xml + and update the usernames and passwords to match the values shown in the + following table. The left-hand side of + shows common XPath syntax to indicate the approximate position within the XML + file that needs changes. The right-hand side of the table shows the replacement + values: + + + Sample XPath syntax for editing "opensrf_core.xml" + + + + + + XPath location + Value + + + + + /config/opensrf/username + + opensrf + + + + /config/opensrf/passwd + private.localhost + password for + opensrf user + + + + /config/gateway/username + + opensrf + + + + /config/gateway/passwd + public.localhost + password for + opensrf user + + + + /config/routers/router/transport/username, + first entry where server == public.localhost + + router + + + + /config/routers/router/transport/password, + first entry where server == public.localhost + public.localhost + password for + router user + + + + /config/routers/router/transport/username, + second entry where server == private.localhost + + router + + + + /config/routers/router/transport/password, + second entry where server == private.localhost + private.localhost + password for + router user + + + + +
+ You may also need to modify the file to specify the domains from which + OpenSRF will accept connections, + and to which it will make connections. + If you are installing OpenSRF on a single server + and using the private.localhost and + public.localhost domains, + these will already be set to the correct values. Otherwise, search and replace + to match values for your own systems. +
+ + Set location of the persistent database + As the opensrf user, edit the + file /openils/conf/opensrf.xml, then find and modify the + element dbfile (near the end of the file) to set the + location of the persistent database. Change the default line: + /openils/var/persist.db + to instead read: + /tmp/persist.db + Following is a sample modification of that portion of the file: + + + + /tmp/persist.db + + +]]> + + + Create configuration files for users needing <command>srfsh</command> + In this section you will set up a special configuration file for each user + who will need to run the srfsh (pronounced surf + shell) utility. + + srfsh + + The software installation will automatically create the utility + srfsh (surf shell), a command line diagnostic tool for + testing and interacting with OpenSRF. It will be used + in a future step to complete and test the Evergreen installation. See + for further information. + As the root user, copy the + sample configuration file /openils/conf/srfsh.xml.example + to the home directory of each user who will use srfsh. + For instance, do the following for the + opensrf user: + + + # as the root user: + cp /openils/conf/srfsh.xml.example /home/opensrf/.srfsh.xml + + Edit each user's file ~/.srfsh.xml and make the + following changes: + + + Modify domain to be the router hostname + (following our domain examples, + private.localhost will give + srfsh access to all OpenSRF services, while + public.localhost + will only allow access to those OpenSRF services that are + publicly exposed). + + + Modify username and + password to match the + opensrf Jabber user for the chosen + domain + + + Modify logfile to be the full path for + a log file to which the user has write access + + + Modify loglevel as needed for testing + + + Change the owner of the file to match the owner of the home directory + + + Following is a sample of the file: + + + + +router +private.localhost +opensrf +SOMEPASSWORD +5222 +/tmp/srfsh.log + +4 + +]]> + + + Modify the environmental variable <envar>PATH</envar> for the + <systemitem class="username">opensrf</systemitem> user + As the opensrf user, modify the + environmental variable PATH by adding a new file path to the + opensrf user's shell configuration + file ~/.bashrc: + + + # as the opensrf user: + echo "export PATH=/openils/bin:\$PATH" >> ~/.bashrc + + + + Start OpenSRF + As the root user, start the + ejabberd and + memcached services: + + + # as the root user: + /etc/init.d/ejabberd start + /etc/init.d/memcached start + + As the opensrf user, + start OpenSRF as follows: + + + # as the opensrf user: + osrf_ctl.sh -l -a start_all + + The flag forces Evergreen to use + localhost (your current system) + as the hostname. The flag starts the other + OpenSRF router , + Perl , and + C services. + + + You can also start Evergreen without the + flag, but the osrf_ctl.sh + utility must know the fully qualified domain name for the system + on which it will execute. That hostname was probably specified + in the configuration file opensrf.xml which + you configured in a previous step. + + + If you receive an error message similar to + osrf_ctl.sh: command not found, then your + environment variable PATH does not include the + directory /openils/bin. + As the opensrf user, + edit the configuration file ~/.bashrc and + add the following line: + export PATH=$PATH:/openils/bin + + + + + Test connections to OpenSRF + Once you have installed and started OpenSRF, as the + root user, test your connection to + OpenSRF using the srfsh + utility and trying to call the add method on the OpenSRF + math service: + + + # as the root user: + /openils/bin/srfsh + + srfsh# request opensrf.math add 2 2 + + Received Data: 4 + ------------------------------------ + Request Completed Successfully + Request Time in seconds: 0.007519 + ------------------------------------ + + For other srfsh commands, type in + help at the prompt. + + + Stop OpenSRF + After OpenSRF has started, you can stop it at any time by using the + osrf_ctl.sh again. As the + opensrf + user, stop OpenSRF as follows: + + + # as the opensrf user: + osrf_ctl.sh -l -a stop_all + + +
+
+
+ Installing Evergreen 2.0 On <systemitem class="osname">Ubuntu</systemitem> or + <systemitem class="osname">Debian</systemitem> + + Linux + Debian + + + Linux + Ubuntu + + This section outlines the installation process for the latest stable version of + Evergreen. + In this section you will download, unpack, install, configure and test the Evergreen + system, including the Evergreen server and the PostgreSQL database system. You will make several + configuration changes and adjustments to the software, including updates to configure the system + for your own locale, and some updates needed to work around a few known issues. + + The following steps have been tested on the x86 (32-bit) and x86-64 (64-bit) + architectures. There may be differences between the Desktop and Server editions of + Ubuntu. These instructions assume the Server + edition. + In the following instructions, you are asked to perform certain steps as + either the root user, the + opensrf user, or the + postgres user. + + + Debian -- To become the + root user, issue the command + su - and enter the password of the + root user. + + + Ubuntu -- To become the + root user, issue the command + sudo su - and enter the password of the + root user. + + + To switch from the root user to a + different user, issue the command su - USERNAME. For example, to + switch from the root user to the + opensrf user, issue the command + su - opensrf. Once you have become a non-root user, to become the + root user again, simply issue the command + exit. + + + + Install OpenSRF + Evergreen software is integrated with and depends on the Open Service + Request Framework (OpenSRF) software system. For further information on + installing, configuring and testing OpenSRF, see + . + Follow the steps outlined in that section and run the specified tests to + ensure that OpenSRF is properly installed and configured. Do + not continue with + any further Evergreen installation steps until you have verified that OpenSRF + has been successfully installed and tested. + + + Download and Unpack Latest Evergreen Version + The latest version of Evergreen can be found here: + . + As the opensrf user, change to + the directory /home/opensrf then download + and extract Evergreen. The new subdirectory + /home/opensrf/Evergreen-ILS-2.0.1 will be created: + + + # as the opensrf user: + cd /home/opensrf + wget http://evergreen-ils.org/downloads/Evergreen-ILS-2.0.1.tar.gz + tar zxf Evergreen-ILS-2.0.1.tar.gz + + + + Install Prerequisites to Build Evergreen + In this section you will install and configure a set of prerequisites that will be + used later in and + to build the Evergreen software + using the make utility. + As the root user, enter the commands show + below to build the prerequisites from the software distribution that you just downloaded + and unpacked. Remember to replace [DISTRIBUTION] in the following + example with the keyword corresponding to the name of one of the + Linux distributions listed in the following + distribution keywords table . + For example, to install the prerequisites for Ubuntu version 10.05 (Karmic Koala) you would + enter this command: make -f Open-ILS/src/extras/Makefile.install + ubuntu-lucid. + + + # as the root user: + cd /home/opensrf/Evergreen-ILS-2.0.1 + make -f Open-ILS/src/extras/Makefile.install [DISTRIBUTION] + + + + + for Debian Squeeze (6.0) + + + + for Ubuntu Lucid Lynx + (10.04) + + + + + (OPTIONAL) Install the PostgreSQL Server + + databases + PostgreSQL + + Since the PostgreSQL server is usually a standalone server in multi-server + production systems, the prerequisite installer Makefile in the previous section + (see ) + does not automatically install PostgreSQL. You must install the PostgreSQL server + yourself, either on the same system as Evergreen itself or on another system. + If your PostgreSQL server is on a different system, just skip this step. + If your PostgreSQL server will be on the same system as your Evergreen + software, you can install the required PostgreSQL server packages as described + in , or you can visit the official + web site http://www.postgresql.org + for more information. + + PostgreSQL version 8.4 is the minimum supported version to work + with Evergreen 2.0. If you have an older version of PostgreSQL, + you should upgrade before installing Evergreen. To find your current version + of PostgreSQL, as the postgres + user execute the command psql, then type + SELECT version(); to get detailed information + about your version of PostgreSQL. + + + + Install Perl Modules on PostgreSQL Server + If PostgreSQL is running on the same system as your Evergreen software, + then the Perl modules will automatically be available. Just skip this step. + Otherwise, continue if your PostgreSQL server is running on another system. + You will need to install several Perl modules on the other system. As the + root user install the following Perl + modules: + as the root user, ensure the gcc compiler is installed: + +aptitude install gcc libxml-libxml-perl libxml-libxslt-perl + + then install the Perl modules: + +perl -MCPAN -e shell +cpan> Business::ISBN +cpan> install JSON::XS +cpan> Library::CallNumber::LC +cpan> install MARC::Record +cpan> install MARC::File::XML +cpan> cpan UUID::Tiny + + For more information on installing Perl Modules vist the official + CPAN site. + + Perl + CPAN + + + + Update the System Dynamic Library Path + You must update the system dynamic library path to force your system to recognize + the newly installed libraries. As the root user, + do this by creating the new file /etc/ld.so.conf.d/osrf.conf + containing a new library path, then run the command ldconfig to + automatically read the file and modify the system dynamic library path: + + + # as the root user: + echo "/usr/local/lib" >> /etc/ld.so.conf.d/osrf.conf + echo "/usr/local/lib/dbd" >> /etc/ld.so.conf.d/osrf.conf + ldconfig + + + + Restart the PostgreSQL Server + If PostgreSQL is running on the same system as the rest of Evergreen, as + the root user you must restart + PostgreSQL to re-read the new library paths just configured. If PostgreSQL is + running on another system, you may skip this step. + As the opensrf user, + execute the following command (remember to replace + PGSQL_VERSION with your installed PostgreSQL version, + for example 8.4): + + + # as the opensrf user: + /etc/init.d/postgresql-PGSQL_VERSION restart + + + + Configure Evergreen + In this step you will use the configure and + make utilities to configure Evergreen so it can be compiled + and linked later in . + As the opensrf user, return to + the Evergreen build directory and execute these commands: + + + # as the opensrf user: + cd /home/opensrf/Evergreen-ILS-2.0.1 + ./configure --prefix=/openils --sysconfdir=/openils/conf + make + + + + Compile, Link and Install Evergreen + In this step you will actually compile, link and install Evergreen and the + default Evergreen Staff Client. + As the root user, return to the + Evergreen build directory and use the make utility as shown below: + + + # as the root user: + cd /home/opensrf/Evergreen-ILS-2.0.1 + make STAFF_CLIENT_BUILD_ID=rel_2_0_1 install + + The Staff Client will also be automatically built, but you must remember + to set the variable STAFF_CLIENT_BUILD_ID to match the version of the + Staff Client you will use to connect to the Evergreen server. + The above commands will create a new subdirectory + /openils/var/web/xul/rel_2_0_1 + containing the Staff Client. + To complete the Staff Client installation, as the + root user execute the following commands to + create a symbolic link named server in the head of the Staff Client + directory /openils/var/web/xul that points to the + subdirectory /server of the new Staff Client + build: + + + # as the root user: + cd /openils/var/web/xul + ln -sf rel_2_0_1/server server + + + + Copy the OpenSRF Configuration Files + In this step you will replace some OpenSRF configuration files that you set up in + when you installed and + tested OpenSRF. + You must copy several example OpenSRF configuration files into place after first + creating backup copies for troubleshooting purposes, then change all the file ownerships + to opensrf. + As the root user, execute the following + commands: + + + # as the root user: + cd /openils/conf + cp opensrf.xml opensrf.xml.BAK + cp opensrf_core.xml opensrf_core.xml.BAK + cp opensrf.xml.example opensrf.xml + cp opensrf_core.xml.example opensrf_core.xml + cp oils_web.xml.example oils_web.xml + chown -R opensrf:opensrf /openils/ + + + + Create and Configure PostgreSQL Database + + databases + PostgreSQL + + In this step you will create the Evergreen database. In the commands + below, remember to adjust the path of the contrib + repository to match your PostgreSQL server + layout. For example, if you built PostgreSQL from source the path would be + /usr/local/share/contrib , and if you + installed the PostgreSQL 8.4 server packages on Ubuntu, + the path would be + /usr/share/postgresql/8.4/contrib/ . + + + + Create and configure the database + + As the postgres + user on the PostgreSQL system create the PostgreSQL database, + then set some internal paths: + + + # as the postgres user: + createdb evergreen -E UTF8 -T template0 + createlang plperl evergreen + createlang plperlu evergreen + createlang plpgsql evergreen + + Continue as the postgres user + and execute the SQL scripts as shown below (remember to adjust the paths as needed, + where PGSQL_VERSION is your installed PostgreSQL + version, for example 8.4). + + + # as the postgres user: + psql -f /usr/share/postgresql/PGSQL_VERSION/contrib/tablefunc.sql evergreen + psql -f /usr/share/postgresql/PGSQL_VERSION/contrib/tsearch2.sql evergreen + psql -f /usr/share/postgresql/PGSQL_VERSION/contrib/pgxml.sql evergreen + + + + Create <systemitem class="username">evergreen</systemitem> PostgreSQL user + As the postgres + user on the PostgreSQL system, create a new PostgreSQL user + named evergreen and + assign a password (remember to replace NEWPASSWORD + with an appropriate new password): + + + # as the postgres user: + createuser -P -s evergreen + + Enter password for new role: NEWPASSWORD + Enter it again: NEWPASSWORD + + + + Create database schema + In this step you will create the database schema and configure your + system with the corresponding database authentication details for the + evergreen database user that you just created in + . + As the root user, enter + the following commands and replace HOSTNAME, PORT, + PASSWORD and DATABASENAME with appropriate + values: + + + # as the root user: + cd /home/opensrf/Evergreen-ILS-2.0.1 + perl Open-ILS/src/support-scripts/eg_db_config.pl --update-config \ + --service all --create-schema --create-offline \ + --hostname HOSTNAME --port PORT \ + --user evergreen --password PASSWORD --database DATABASENAME + + On most systems, HOSTNAME will be + localhost and + PORT will be 5432. + Of course, values for PASSWORD and + DATABASENAME must match the values you used in + . + As the command executes, you may see warnings similar to: + ERROR: schema SOMENAME does not exist (in fact, + you may see one warning per schema) but they can be safely ignored. + If you are entering the above command on a single line, do not + include the \ (backslash) characters. If you are using + the bash shell, these should only be used at the end of + a line at a bash prompt to indicate that the command is + continued on the next line. + + + + + Configure the Apache web server + + web server + Apache + + In this step you will configure the Apache web server to support Evergreen + software. + First, you must enable some built-in Apache modules and install some + additional Apache configuration files. Then you will create a new Security + Certificate. Finally, you must make several changes to the Apache configuration + file. + + + Enable the required Apache Modules + As the root + user, enable some modules in the Apache server, then copy the + new configuration files to the Apache server directories: + + Apache modules + + + + # as the root user: + a2enmod ssl # enable mod_ssl + a2enmod rewrite # enable mod_rewrite + a2enmod expires # enable mod_expires + + As the commands execute, you may see warnings similar to: + Module SOMEMODULE already enabled but you can + safely ignore them. + + + Copy Apache configuration files + You must copy the Apache configuration files from the + Evergreen installation directory to the Apache directory. As the + root user, perform the + following commands: + + + # as the root user: + cd /home/opensrf/Evergreen-ILS-2.0.1 + cp Open-ILS/examples/apache/eg.conf /etc/apache2/sites-available/ + cp Open-ILS/examples/apache/eg_vhost.conf /etc/apache2/ + cp Open-ILS/examples/apache/startup.pl /etc/apache2/ + + + + Create a Security Certificate + In this step you will create a new Security Certificate (SSL Key) + for the Apache server using the openssl command. For a + public production server you must configure or purchase a signed SSL + certificate, but for now you can just use a self-signed certificate and + accept the warnings in the Staff Client and browser during testing and + development. As the root user, + perform the following commands: + + + # as the root user: + mkdir /etc/apache2/ssl + cd /etc/apache2/ssl + openssl req -new -x509 -days 365 -nodes -out server.crt -keyout server.key + + You will be prompted for several items of information; enter + the appropriate information for each item. The new files + server.crt and server.key will + be created in the directory + /etc/apache2/ssl . + This step generates a self-signed SSL certificate. You must install + a proper SSL certificate for a public production system to avoid warning + messages when users login to their account through the OPAC or when staff + login through the Staff Client. For further information on + installing a proper SSL certificate, see + . + + + Update Apache configuration file + You must make several changes to the new Apache + configuration file + /etc/apache2/sites-available/eg.conf . + As the root user, + edit the file and make the following changes: + + + In the section + <Directory "/openils/var/cgi-bin"> + replace the line: + Allow from 10.0.0.0/8 + with the line: + Allow from all + This change allows access to your configuration + CGI scripts from any workstation on any network. This is + only a temporary change to expedite testing and should be + removed after you have finished and successfully tested + the Evergreen installation. See + + for further details on removing this change after the + Evergreen installation is complete. + + + + Comment out the line: + Listen 443 + since it conflicts with the same declaration in + the configuration file: + /etc/apache2/ports.conf. + + + The following updates are needed to allow the logs + to function properly, but it may break other Apache + applications on your server: + + Edit the Apache configuration file and change the lines: + + + export APACHE_RUN_USER=www-data + export APACHE_RUN_GROUP=www-data + + to instead read: + + + export APACHE_RUN_USER=opensrf + export APACHE_RUN_GROUP=opensrf + + + + As the + root user, + edit the Apache configuration file + /etc/apache2/apache2.conf and + modify the value for KeepAliveTimeout + and MaxKeepAliveRequests to match + the following: + + + KeepAliveTimeout 1 + MaxKeepAliveRequests 100 + + + + Further configuration changes to Apache may be + necessary for busy systems. These changes increase the + number of Apache server processes that are started to + support additional browser connections. + As the + root user, + edit the Apache configuration file + /etc/apache2/apache2.conf, locate + and modify the section related to prefork + configuration to suit the load on your + system: + + StartServers 20 + MinSpareServers 5 + MaxSpareServers 15 + MaxClients 150 + MaxRequestsPerChild 10000 + +]]> + + + + + Enable the Evergreen web site + Finally, you must enable the Evergreen web site. As the + root user, execute the + following Apache configuration commands to disable the default + It Works web page and enable the Evergreen + web site, and then restart the Apache server: + + + # as the root user: + # disable/enable web sites + a2dissite default + a2ensite eg.conf + # restart the server + /etc/init.d/apache2 reload + + + + + + Update the OpenSRF Configuration File + As the opensrf user, edit the + OpenSRF configuration file /openils/conf/opensrf_core.xml + to update the Jabber usernames and passwords, and to specify the domain from + which we will accept and to which we will make connections. + If you are installing Evergreen on a single server and using the + private.localhost / + public.localhost domains, + these will already be set to the correct values. Otherwise, search and replace + to match your customized values. + The left-hand side of + shows common XPath syntax to indicate the approximate position within the XML + file that needs changes. The right-hand side of the table shows the replacement + values: + + + Sample XPath syntax for editing "opensrf_core.xml" + + + + + + XPath location + Value + + + + + /config/opensrf/username + + opensrf + + + + /config/opensrf/passwd + private.localhost + password for + opensrf user + + + + /config/gateway/username + + opensrf + + + + /config/gateway/passwd + public.localhost + password for + opensrf user + + + + /config/routers/router/transport/username, + first entry where server == public.localhost + + router + + + + /config/routers/router/transport/password, + first entry where server == public.localhost + public.localhost + password for + router user + + + + /config/routers/router/transport/username, + second entry where server == private.localhost + + router + + + + /config/routers/router/transport/password, + second entry where server == private.localhost + private.localhost + password for + router user + + + + +
+
+ + (OPTIONAL) Create Configuration Files for Users Needing <command>srfsh</command> + When OpenSRF was installed in , the + software installation automatically created a utility named srfsh (surf + shell). This is a command line diagnostic tool for testing and interacting with + OpenSRF. It will be used in a future step to complete and test the Evergreen installation. + Earlier in you also created a configuration + file ~/.srfsh.xml for each user that might need to use the utility. + See for further information. + + + Modify the OpenSRF Environment + In this step you will make some minor modifications to the OpenSRF environment: + + + As the opensrf user, + modify the shell configuration file ~/.bashrc for + user opensrf by adding a Perl + environmental variable, then execute the shell configuration file to load + the new variables into your current environment. + In a multi-server environment, you must add any + modifications to ~/.bashrc to the top of the file + before the line [ -z "$PS1" ] && + return . This will allow headless (scripted) logins to load the + correct environment. + + + # as the opensrf user: + echo "export PERL5LIB=/openils/lib/perl5:\$PERL5LIB" >> ~/.bashrc + . ~/.bashrc + + + + + + (OPTIONAL) Enable and Disable Language Localizations + You can load translations such as Armenian (hy-AM), Canadian French + (fr-CA), and others into the database to complete the translations available in + the OPAC and Staff Client. For further information, see + . + +
+
+
+ Starting Evergreen + In this section you will learn how to start the Evergreen services. + For completeness, instructions for stopping Evergreen can be found later in + . + + + As the root + user, start the ejabberd and + memcached services as follows: + + + # as the root user: + /etc/init.d/ejabberd start + /etc/init.d/memcached start + + + + As the opensrf user, + start Evergreen as follows: + + + # as the opensrf user: + osrf_ctl.sh -l -a start_all + + The flag forces Evergreen to use + localhost (your current system) + as the hostname. The flag starts the other + OpenSRF router , + Perl , and + C services. + + + You can also start Evergreen without the + flag, but the osrf_ctl.sh + utility must know the fully qualified domain name for the system + on which it will execute. That hostname was probably specified + in the configuration file opensrf.xml which + you configured in a previous step. + + + If you receive an error message similar to + osrf_ctl.sh: command not found, then your + environment variable PATH does not include the + directory /openils/bin. + As the opensrf user, + edit the configuration file ~/.bashrc and + add the following line: + export PATH=$PATH:/openils/bin + + + If you receive an error message similar to Can't + locate OpenSRF/System.pm in @INC ... BEGIN failed--compilation + aborted, then your environment variable + PERL5LIB does not include the + directory /openils/lib/perl5. + As the opensrf user, + edit the configuration file ~/.bashrc and + add the following line: + export PERL5LIB=$PERL5LIB:/openils/lib/perl5 + + + + + In this step you will generate the Web files needed by the Staff Client + and catalog, and update the proximity of locations in the Organizational Unit + tree (which allows Holds to work properly). + You must do this the first time you start Evergreen and after making any + changes to the library hierarchy. + As the opensrf user, execute the + following command and review the results: + + + # as the opensrf user: + cd /openils/bin + ./autogen.sh -c /openils/conf/opensrf_core.xml -u + + Updating Evergreen organization tree and IDL using '/openils/conf/opensrf_core.xml' + Updating fieldmapper + Updating web_fieldmapper + Updating OrgTree + removing OrgTree from the cache for locale hy-AM... + removing OrgTree from the cache for locale cs-CZ... + removing OrgTree from the cache for locale en-CA... + removing OrgTree from the cache for locale en-US... + removing OrgTree from the cache for locale fr-CA... + removing OrgTree from the cache for locale ru-RU... + Updating OrgTree HTML + Updating locales selection HTML + Updating Search Groups + Refreshing proximity of org units + Successfully updated the organization proximity + Done + + + + As the root user, restart the + Apache Web server: + + + # as the root user: + /etc/init.d/apache2 restart + + If the Apache Web server was running when you started the OpenSRF + services, you might not be able to successfully log into the OPAC or Staff + Client until the Apache Web server has been restarted. + + +
+
+ Testing Your Evergreen Installation + This section describes several simple tests you can perform to verify that the Evergreen + server-side software has been installed and configured properly and is running as + expected. + + Testing Connections to Evergreen + Once you have installed and started Evergreen, test your connection to Evergreen. Start the + srfsh application and try logging onto the Evergreen server using the default + administrator username and password. Following is sample output generated by executing + srfsh after a successful Evergreen installation. For help with + srfsh commands, type help at the prompt. + As the opensrf user, + execute the following commands to test your Evergreen connection: + + + # as the opensrf user: + /openils/bin/srfsh + + srfsh% login admin open-ils + Received Data: "250bf1518c7527a03249858687714376" + ------------------------------------ + Request Completed Successfully + Request Time in seconds: 0.045286 + ------------------------------------ + Received Data: { + "ilsevent":0, + "textcode":"SUCCESS", + "desc":" ", + "pid":21616, + "stacktrace":"oils_auth.c:304", + "payload":{ + "authtoken":"e5f9827cc0f93b503a1cc66bee6bdd1a", + "authtime":420 + } + } + ------------------------------------ + Request Completed Successfully + Request Time in seconds: 1.336568 + ------------------------------------ + + If this does not work, try the following: + + + As the opensrf user, run the + settings-tester.pl utility to review your Evergreen + installation for any system configuration problems: + + + # as the opensrf user: + cd /home/opensrf + ./Evergreen-ILS-2.0.1/Open-ILS/src/support-scripts/settings-tester.pl + + If the output of settings-tester.pl does not help you + find the problem, please do not make any significant changes to your + configuration. + + + Follow the steps in the troubleshooting guide in + . + + + If you have followed the entire set of installation steps listed here + closely, you are probably extremely close to a working system. Gather your + configuration files and log files and contact the + Evergreen Development Mailing List + list for assistance before making any drastic changes to your system + configuration. + + + + + Testing the Staff Client on Linux + In this section you will confirm that a basic login on the Staff Client works + properly. + Run the Evergreen Staff Client on a Linux system by using the application + XULRunner (installed automatically and by default with Firefox + version 3.0 and later on Ubuntu and Debian distributions). + As the root user, start the Staff Client + as shown: + + + # as the root user: + xulrunner /home/opensrf/Evergreen-ILS-2.0.1/Open-ILS/xul/staff_client/build/application.ini + + A login screen for the Staff Client similar to this should appear: + + Logging into the Staff Client + + + + + First, add the name of your Evergreen server to the field + Hostname in the Server section. You will probably + want to use 127.0.0.1. After adding the server name, click Re-Test + Server. You should now see the messages 200:OK in the fields + Status and Version. + Because this is the initial run of the Staff Client, you will see a warning in the + upper-right saying: Not yet configured for the specified + server. To continue, you must assign a workstation name. Refer to + for further details. + Try to log into the Staff Client with the username admin and + the password open-ils. If the login is successful, you will see the + following screen: + + Logging into the Staff Client + + + + + Otherwise, you may need to click 'Add SSL Exception' in the + main window. You should see a popup window titled Add Security Exception: + + Adding an SSL Exception in the Staff Client + + + + + Click 'Get Certificate', then click 'Confirm + Security Exception', then click 'Re-Test Server' in the + main window and try to log in again. + + + Testing the Apache Web Server + In this section you will test the Apache configuration file(s), then restart the + Apache web server. + As the root user, execute the following + commands. Note the use of restart to force the new Evergreen + modules to be reloaded even if the Apache server is already running. Any problems found + with your configuration files should be displayed: + + + # as the root user: + apache2ctl configtest && /etc/init.d/apache2 restart + + + + Stopping Evergreen + In you learned how to start the + Evergreen services. For completeness, following are instructions for stopping the + Evergreen services. + As the opensrf user, stop all Evergreen + services by using the following command: + + + # as the opensrf user + # stop the server; use "-l" to force hostname to be "localhost" + osrf_ctl.sh -l -a stop_all + + You can also stop Evergreen services without the + flag, but the osrf_ctl.sh utility must know the + fully qualified domain name for the system on which it will execute. That hostname may + have been specified in the configuration file opensrf.xml, which + you configured in a previous step. + +
+
+ Post-Installation Chores + There are several additional steps you may need to complete after Evergreen has been + successfully installed and tested. Some steps may not be needed (e.g., setting up support for + Reports). +
+ Remove temporary Apache configuration changes + You modified the Apache configuration file + /etc/apache2/sites-available/eg.conf in an earlier step as a + temporary measure to expedite testing (see + for further information). + Those changes must now be reversed in order to deny unwanted access to your + CGI scripts from users on other public networks. + + + This temporary network update was done to expedite + testing. You must correct + this for a public production system. + + + As the root user, edit the configuration + file again and comment out the line Allow from all and uncomment the + line Allow from 10.0.0.0/8, then change it to match your network + address scheme. +
+
+ Configure a permanent SSL key + You used the command openssl in an earlier step to + temporarily create a new SSL key for the Apache server (see + for further + information). This self-signed security certificate was adequate during + testing and development, but will continue to generate warnings in the Staff + Client and browser. For a public production server you should configure or + purchase a signed SSL certificate. + There are several open source software solutions that provide schemes to + generate and maintain public key security certificates for your library + system. Some popular projects are listed below; please review them for + background information on why you need such a system and how you can provide + it: + + + http://www.openca.org/projects/openca/ + + + http://sourceforge.net/projects/ejbca/ + + + http://pki.fedoraproject.org + + + + + The temporary SSL key was only created to expedite + testing. You should install a proper SSL certificate for a public + production system. + + +
+
+ (OPTIONAL) IP-Redirection + By default, Evergreen is configured so searching the OPAC always starts in the + top-level (regional) library rather than in a second-level (branch) library. Instead, + you can use "IP-Redirection" to change the default OPAC search location to use the IP + address range assigned to the second-level library where the seach originates. You must + configure these IP ranges by creating the configuration file + /openils/conf/lib_ips.txt and modifying the Apache startup script + /etc/apache2/startup.pl. + First, copy the sample file + /home/opensrf/Evergreen-ILS-1.6.1.2/Open-ILS/examples/lib_ips.txt.example + to /openils/conf/lib_ips.txt. The example file contains the single + line: "MY-LIB 127.0.0.1 127.0.0.254". You must modify the file to use + the IP address ranges for your library system. Add new lines to represent the IP address + range for each branch library. Replace the values for MY-LIB with the + values for each branch library found in the table + actor.org_unit. + Finally, modify the Apache startup script + /etc/apache2/startup.pl by uncommenting two lines as shown, then + restarting the Apache server: + +# - e.g. LIB123 10.0.0.1 10.0.0.254 +use OpenILS::WWW::Redirect qw(/openils/conf/opensrf_core.xml); +OpenILS::WWW::Redirect->parse_ips_file('/openils/conf/lib_ips.txt'); +]]> +
+
+ (OPTIONAL) Set Up Support For Reports + Evergreen reports are extremely powerful but require some simple configuration. + See for information on starting and + stopping the Reporter daemon processes. +
+
+
+
diff --git a/2.0/admin/sip.xml b/2.0/admin/sip.xml new file mode 100644 index 0000000000..7f670c9a2f --- /dev/null +++ b/2.0/admin/sip.xml @@ -0,0 +1,595 @@ + + + + SIP Server + + SIP, standing for Standard Interchange Protocol, was developed by the + 3Mcorporation to be a common protocol for data transfer between ILS' + (referred to in SIP as an ACS, or Automated Circulation System) + Automated Circulation System and a + third party device. Originally, the protocol was developed for + use with 3M SelfCheck (often abbreviated SC, not to be confused with Staff Client) systems, but has since expanded to other companies and devices. It is now common to find + SIP in use in several other vendors' SelfCheck systemsSelfCheck, as well as other non-SelfCheck devices. + Some examples include: + + Patron Authentication (computer access, subscription databases) + Automated Material Handling (AMH) Automated Material Handling (AMH)- The automated sorting of items, often to bins or + book carts, based on shelving location or other programmable criteria + + +
+ + Installing the <systemitem class="protocol">SIP</systemitem> Server + + This is a rough intro to installing the SIP server for Evergreen. + + Getting the code + Current SIP code lives at github: + cd /opt + git clone git://github.com/atz/SIPServer.git SIPServer + Or use the old style: + $ cd /opt + $ sudo cvs -d:pserver:anonymous@openncip.cvs.sourceforge.net:/cvsroot/openncip login + When prompted for the CVS password, just hit Enter (sudo password may be req'd) + $ sudo cvs -z3 -d:pserver:anonymous@openncip.cvs.sourceforge.net:/cvsroot/openncip co -P SIPServer + + + + Configuring the Server + + + Type the following commands from the command prompt:configuration filesoils_sip.xml + $ sudo su opensrf + $ cd /openils/conf + $ cp oils_sip.xml.example oils_sip.xml + + + Edit oils_sip.xmlconfiguration filesoils_sip.xml. + Change the commented out <server-params> section to this: + +<server-params +min_servers='1' +min_spare_servers='0' +max_servers='25' +/> + + + + max_servers will directly correspond to the number of allowed SIP clients. Set the number accordingly, but + bear in mind that too many connections can + exhaust memory. On a 4G RAM/4 CPU server (that is also running evergreen), it is not recommended to exceed 100 + SIP client connections. + + + + + Adding <systemitem class="protocol">SIP</systemitem> Users + + + Type the following commands from the command prompt:configuration filesoils_sip.xml + $ sudo su opensrf + $ cd /openils/conf + $ cp oils_sip.xml.example oils_sip.xml + + + in the <accounts> section, add SIP client login information. Make sure that all + <logins> use the same institution attribute, and make + sure the institution is listed in <institutions>. All attributes in the <login> section will be + used by the SIP client. + + + + In Evergreen, create a new profile group called SIP. + This group should be a sub-group of Users + (not Staff or Patrons). + Set Editing Permission as group_application.user.sip_client and give the group the following permissions: + + COPY_CHECKIN + COPY_CHECKOUT + RENEW_CIRC + VIEW_CIRCULATIONS + VIEW_COPY_CHECKOUT_HISTORY + VIEW_PERMIT_CHECKOUT + VIEW_USER + VIEW_USER_FINES_SUMMARY + VIEW_USER_TRANSACTIONS + + OR use SQL like: + + +INSERT INTO permission.grp_tree (id,name,parent,description,application_perm) +VALUES (8, 'SIP', 1, 'SIP2 Client Systems', 'group_application.user.sip_client'); + +INSERT INTO permission.grp_perm_map (grp,perm,depth) +VALUES (8,15,0),(8,16,0),(8,17,0),(8,31,0),(8,32,0),(8,48,0),(8,54,0),(8,75,0),(8,82,0); + + + + Verify: + + +SELECT * +FROM permission.grp_perm_map JOIN permission.perm_list ON +permission.grp_perm_map.perm=permission.perm_list.id +WHERE grp=8; + + + + Keep in mind that the id (8) may not necessarily be available on your system. + + + For each account created in the <login> section of oils_sip.xml, create a user (via the staff client user editor) + that has the same username + and password and put that user into the SIP group. + The expiration date will affect the SIP users' connection so you might want to make a note of + this somewhere. + + + + + Running the server + To start the SIP server type the following commands from the command prompt: + $ sudo su opensrf + $ oils_ctl.sh -d /openils/var/run -s /openils/conf/oils_sip.xml -a [start|stop|restart]_sip + + + Logging-SIPSIP + + <systemitem class="service">Syslog</systemitem> + It is useful to log SIP requests to a separate file especially during initial setup by modifying your + syslog config file.syslog + + + Edit syslog.conf. + $ sudo vi /etc/syslog.conf # maybe /etc/rsyslog.conf + + + Add this: + local6.* -/var/log/SIP_evergreen.log + + + Syslog expects the logfile to exist so create the file. + $ sudo touch /var/log/SIP_evergreen.log + + + Restart sysklogd. + $ sudo /etc/init.d/sysklogd restart + + + + + <systemitem class="service">Syslog-NG</systemitem> + + + + Edit logging config.syslog-NG + sudo vi /etc/syslog-ng/syslog-ng.conf + + + Add: + +# SIP2 for Evergreen +filter f_eg_sip { level(warn, err, crit) and facility(local6); }; +destination eg_sip { file("/var/log/SIP_evergreen.log"); }; +log { source(s_all); filter(f_eg_sip); destination(eg_sip); }; + + + + Syslog-ng expects the logfile to exist so create the file. + $ sudo touch /var/log/SIP_evergreen.log + + + Restart syslog-ng + $ sudo /etc/init.d/syslog-ng restart + + + + + + Testing Your <systemitem class="protocol">SIP</systemitem> ConnectionSIP + + + In the top level CVS checkout of the SIPServer code. + $ cd SIPServer/t + + + Edit SIPtest.pm, change the $instid, $server, $username, and + $password variables. This will be enough to test connectivity. + To run all tests, you'll need to change all the variables in the Configuration section. + $ PERL5LIB=../ perl 00sc_status.t + This should produce something like: + +1..4 +ok 1 - Invalid username +ok 2 - Invalid username +ok 3 - login +ok 4 - SC status + + + + Don't be dismayed at Invalid Username. That's just one of the many tests that are run. + + + + + More Testing + + + Once you have opened up either the SIP OR SIP2 ports to be + accessible from outside you can do some testing via telnet. You can try this with localhost + if you so wish, but we want to prove that SIP2 works from non-localhost. + Replace $instid, $server, $barcode, $username, + and $password variables below as necessary. + We are using 6001 here which is associated with SIP2 as per our configuration.telnet + +$ telnet $server 6001 +Connected to $server. +Escape character is '^]'. +9300CN**$username**|CO**$password**|CP**$instid** + + You should get back. + 941 + + + Now just copy in the following line (with variables replaced) you don't need to hit enter, just paste! + 2300120080623 172148AO**$instid**|AA**$barcode**|AC$password|AD**$password** + You will get back the patron information for $barcode (something similar to the what's below). +24 Y 00120100113 170738AEFirstName MiddleName LastName|AA**$barcode**|BLY|CQY +|BHUSD|BV0.00|AFOK|AO**$instid**| + + The response declares it is a valid patron BLY with a valid password CQY and shows the user's + $name. + + + +
+
+ + <systemitem class="protocol">SIP</systemitem> CommunicationSIP + + SIP generally communicates over a TCP connection (either raw sockets or over + telnet), but can also communicate via serial connections and other methods. In Evergreen, + the most common deployment is a RAW socket connection on port 6001. + SIP communication consists of strings of messages, each message request and response begin with a 2-digit + command - Requests usually being an odd + number and responses usually increased by 1 to be an even number. The combination numbers for the request command and response is often referred to as a + Message Pair (for example, a 23 command is a request for patron status, a 24 response is a patron status, and the message pair 23/24 is + patron status message pair). The table in the next section shows the message pairs and a description of them. + For clarification, the Request is from the device (selfcheck or otherwise) to the ILS/ACS. The response is… the response + to the request ;). + Within each request and response, a number of fields (either a fixed width or separated with a | [pipe symbol] and preceeded with a + 2-character field identifier) + are used. The fields vary between message pairs. + + + + + + + + + Pair + Name + Supported? + Details + + + + + 01 + Block Patron + Yes + 01_Block_Patron - ACS responds with 24 Patron Status Response + + + 09/10 + Checkin + Yes (with extensions) + 09/10_Checkin + + + 11/12 + Checkout + Yes (no renewals) + 11/12_Checkout + + + 15/16 + Hold + No + 15/16_Hold + + + 17/18 + Item Information + Yes (no extensions) + 17/18_Item_Information + + + 19/20 + Item Status Update + No + 19/20_Item_Status_Update - Returns Patron Enable response, but doesn't make any changes in EG + + + 23/24 + Patron Status + Yes + 23/24_Patron_Status - 63/64 Patron Information preferred + + + 25/26 + Patron Enable + No + 25/26_Patron_Enable - Used during system testing and validation + + + 29/30 + Renew + NO (maybe?) + 29/30_Renew + + + 35/36 + End Session + Yes + 35/36_End_Session + + + 37/38 + Fee Paid + No + 37/38_Fee_Paid + + + 63/64 + Patron Information + Yes (no extensions) + 63/64_Patron_Information + + + 65/66 + Renew All + No + 65/66_Renew_All + + + 93/94 + Login + Yes + 93/94_Login - Must be first command to Evergreen ACS (via socket) or SIP will terminate + + + 97/96 + Resend last message + Yes + 97/96_Resend + + + 99/98 + SC/ACS Status + Yes + 99/98_SC_and_ACS_Status + + + + + + 01 Block Patron + A selfcheck will issue a Block Patron command if a patron leaves their card in a selfcheck machine or if the selfcheck detects tampering (such as attempts + to disable multiple items during a single item checkout, multiple failed pin entries, etc).SelfCheck + In Evergreen, this command does the following: + + User alert message: CARD BLOCKED BY SELF-CHECK MACHINE (this is independent of the AL + Blocked Card Message field). + Card is marked inactive. + + The request looks like: + 01<card retained><date>[fields AO, AL, AA, AC] + Card Retained: A single character field of Y or N - tells the ACS whether the SC has + retained the card (ex: left in the machine) or not. + Date: An 18 character field for the date/time when the block occurred. + Format: YYYYMMDDZZZZHHMMSS (ZZZZ being zone - 4 blanks when local time, Z (3 blanks and a Z) represents UTC(GMT/Zulu) + Fields: See Fields for more details. + The response is a 24 Patron Status Response with the following: + + Charge privileges denied + Renewal privileges denied + Recall privileges denied (hard-coded in every 24 or 64 response) + hold privileges denied + Screen Message 1 (AF): blocked + Patron + + + + + 09/10 Checkin + The request looks like: + 09<No block (Offline)><xact date><return date>[Fields AP,AO,AB,AC,CH,BI] + No Block (Offline): A single character field of Y or N - Offline transactions are not currently + supported so send N. + xact date: an 18 character field for the date/time when the checkin occurred. Format: YYYYMMDDZZZZHHMMSS (ZZZZ being zone - + 4 blanks when local time, Z (3 blanks and a Z) represents UTC(GMT/Zulu) + Fields: See Fields for more details. + The response is a 10 Checkin Response with the following: + 10<resensitize><magnetic media><alert><xact date>[Fields AO,AB,AQ,AJ,CL,AA,CK,CH,CR,CS,CT,CV,CY,DA,AF,AG] + Example (with a remote hold): + 09N20100507 16593720100507 165937APCheckin Bin 5|AOBR1|AB1565921879|ACsip_01| + +101YNY20100623 165731AOBR1|AB1565921879|AQBR1|AJPerl 5 desktop reference|CK001|CSQA76.73.P33V76 1996 +|CTBR3|CY373827|DANicholas Richard Woodard|CV02| + + Here you can see a hold alert for patron CY 373827, named DA Nicholas Richard Woodard, + to be picked up at CT BR3. Since the transaction is happening + at AO BR1, the alert type CV is 02 for hold at remote library. + The possible values for CV are: + + 00: unknown + 01: local hold + 02: remote hold + 03: ILL transfer (not used by EG) + 04: transfer + 99: other + + + the logic for Evergreen to determine the content is magnetic_media comes from either legacy circ scripts or search_config_circ_modifier. + The default is non-magnetic.magnetic media + The same is true for media_type (default 001). Evergreen does not populate the collection_code because it does not really have any, but it will provide the + call_number where available. + Unlike the item_id (barcode), the title_id is actually a title string, unless the configuration forces the return of + the bib ID. + Don't be confused by the different branches that can show up in the same response line. + + AO is where the transaction took place, + AQ is the permanent location, and + CT is the destination location (i.e., pickup lib for a hold or target lib for a transfer). + + + + + 11/12 Checkout + + + 15/16 Hold + Not yet supported. + + + 17/18 Item Information + The request looks like: + 17<xact_date>[fields: AO,AB,AC] + The request is very terse. AC is optional. + The following response structure is for SIP2. (Version 1 of the protocol had only 6 total fields.) + +18<circulation_status><security_marker><fee_type><xact_date> +[fields: CF,AH,CJ,CM,AB,AJ,BG,BH,BV,CK,AQ,AP,CH,AF,AG,+CT,+CS] + + Example: + 1720060110 215612AOBR1|ABno_such_barcode| + 1801010120100609 162510ABno_such_barcode|AJ| + 1720060110 215612AOBR1|AB1565921879| +1810020120100623 171415AB1565921879|AJPerl 5 desktop reference|CK001|AQBR1|APBR1|BGBR1 +|CTBR3|CSQA76.73.P33V76 1996| + + The first case is with a bogus barcode. The latter shows an item with a circulation_status of 10 for in transit between libraries. + The known values of circulation_status are enumerated in the spec. + EXTENSIONS: The CT field for destination location and CS call number are used by + Automated Material Handling systems.Automated Material Handling (AMH) + + + 19/20 Item Status Update + + + 23/24 Patron Status + Example: + 2300120060101 084235AOUWOLS|AAbad_barcode|ACsip_01|ADbad_password| + 24YYYY 00120100507 013934AE|AAbad_barcode|BLN|AOUWOLS| + 2300120060101 084235AOCONS|AA999999|ACsip_01|ADbad_password| + 24 Y 00120100507 022318AEDoug Fiander|AA999999|BLY|CQN|BHUSD|BV0.00|AFOK|AOCONS| + 2300120060101 084235AOCONS|AA999999|ACsip_01|ADuserpassword|LY|CQN|BHUSD|BV0.00|AFOK|AOCONS| + 24 Y 00120100507 022803AEDoug Fiander|AA999999|BLY|CQY|BHUSD|BV0.00|AFOK|AOCONS| + + The BL field (SIP2, optional) is valid patron, so the + N value means + bad_barcode doesn't match a patron, the Y value means 999999 does. + The CQ field (SIP2, optional) is valid password, so the N + value means bad_password doesn't match 999999's password, the Y means userpassword + does. + + So if you were building the most basic SIP2 authentication client, you would check for + |CQY| in the response to know the user's barcode and password + are correct (|CQY| implies |BLY|, since you cannot check the password unless the barcode exists). However, in practice, + depending on the application, there are other factors to consider in authentication, like whether the user is blocked from checkout, owes excessive fines, reported their + card lost, etc. These limitations are reflected in the 14-character patron status string immediately following the 24 code. + See the field definitions in your copy of the spec. + + + 25/26 Patron Enable + Not yet supported. + + + 29/30 Renew + Evergreen ACS status message indicates renew is supported. + + + 35/36 End Session + 3520100505 115901AOBR1|AA999999| + 36Y20100507 161213AOCONS|AA999999|AFThank you!| + The Y/N code immediately after the 36 indicates success/failure. Failure is not particularly meaningful or + important in this context, and for evergreen it is hardcoded Y. + + + 37/38 Fee Paid + Not implemented. + + + 63/64 Patron Information + Attempting to retrieve patron info with a bad barcode: + 6300020060329 201700 AOBR1|AAbad_barcode| + 64YYYY 00020100623 141130000000000000000000000000AE|AAbad_barcode|BLN|AOBR1| + Attempting to retrieve patron info with a good barcode (but bad patron password): + 6300020060329 201700 AOBR1|AA999999|ADbadpwd| + +64 Y 00020100623 141130000000000000000000000000AA999999|AEDavid J. Fiander|BHUSD|BV0.00 +|BD2 Meadowvale Dr. St Thomas, ON Canada + +90210|BEdjfiander@somemail.com|BF(519) 555 1234|AQBR1|BLY|CQN|PB19640925|PCPatrons +|PIUnfiltered|AFOK|AOBR1| + + See 23/24 Patron Status for info on BL and CQ fields. + + + 65/66 Renew All + Not yet supported. + + + 93/94 Login + Example: + 9300CNsip_01|CObad_value|CPBR1| + [Connection closed by foreign host.] + ... + 9300CNsip_01|COsip_01|CPBR1| + 941 + 941 means successful terminal login. 940 or getting dropped means failure. + + + 97/96 Resend + + + 99/98 SC and ACS Status + 99<status code><max print width><protocol version> + All 3 fields are required: + + status code - 1 character: + + 0: SC is OK + 1: SC is out of paper + 2: SC shutting down + + max print width - 3 characters - the integer number of characters the client can print + protocol version - 4 characters - x.xx + + +98<on-line status><checkin ok><checkout ok><ACS renewal policy> +<status update ok><offline ok><timeout period> + + +<retries allowed><date/time sync><protocol version><institution id> +<library name><supported messages><terminal + + location><screen message><print line> + Example: + 9910302.00 + 98YYYYNN60000320100510 1717202.00AOCONS|BXYYYYYYYYYNYNNNYN| + The Supported Messages field BX appears only in SIP2, and specifies whether 16 different + SIP commands are supported by the ACS or not. + + + Fields + All fixed-length fields in a communication will appear before the first variable-length field. This allows for simple parsing. Variable-length fields are by + definition delimited, though there will not necessarily be an initial delimiter between the last fixed-length field and the first variable-length one. It would be + unnecessary, since you should know the exact position where that field begins already. + +
+
+ diff --git a/2.0/admin/troubleshooting.xml b/2.0/admin/troubleshooting.xml new file mode 100644 index 0000000000..8ab2fe1e67 --- /dev/null +++ b/2.0/admin/troubleshooting.xml @@ -0,0 +1,305 @@ + + + Troubleshooting System Errors + If you have Evergreen installed and are encountering systematic errors, here is the steps to find the + cause and solution to most problems. These instructions assume standard locations and file names for Evergreen + installations, and may also include commands for specific Linux distributions. + + Systematic Evergreen Restart to Isolate Errors + + Stop Apache:web serverApachestopping + /etc/init.d/apache2 stop + or + apache2ctl stop + + + Stop OpenSRF:OpenSRF + osrf_ctl.sh -l -a stop_all + You should get either output simlar to this: + +Stopping OpenSRF C process 12515... +Stopping OpenSRF C process 12520... +Stopping OpenSRF C process 12526... +Stopping OpenSRF Perl process 12471... +Stopping OpenSRF Router process 12466... + + Or, if services have already been stopped, output may look like this: + OpenSRF C not running + OpenSRF Perl not running + OpenSRF Router not running + Occasionally osrf_ctl.sh fails to kill OpenSRF processes, so we should check to make + sure that none are still running with the command: + ps -aef | grep OpenSRF + You should manually kill any OpenSRF processes. + If you were unable to stop OpenSRF with the above methods, you could also try this + command: + rm –R /openils/var/run/*.pid + This will remove the temporary OpenSRF process files from the run directory which may + have been left over from a previous system boot cycle. + + + Restart Ejabberd and + Memcached with the following commands:Ejabberd + sudo /etc/init.d/ejabberd restart + sudo /etc/init.d/memcached restartmemcached + + + Start the OpenSRF router and check for errors + OpenSRFservicesrouter + /openils/bin/osrf_ctl.sh -l -a start_router + If the router started correctly, output will be: + Starting OpenSRF Router + If router does not start correctly, you should check the router error log files + for error information. + Evergreen 1.6 uses two routers, a public one and a private one, with two different + logfiles: + /openils/var/log/private.router.loglogsrouter + /openils/var/log/public.router.log + A quick way to find error information in the logs is with the grep command. + grep ERR /openils/var/log/*router.log + As a final sanity check, look for router processes using the process status + command: + ps -aef | grep Router + + + Start the OpenSRF perl services and check for errors + OpenSRFservicesperl + /openils/bin/osrf_ctl.sh -l -a start_perl + You should see the output similar to the following: + +Starting OpenSRF Perl +* starting all services for ... +* starting service pid=7484 opensrf.settings +* starting service pid=7493 open-ils.cat +* starting service pid=7495 open-ils.supercat +* starting service pid=7497 open-ils.search +* starting service pid=7499 open-ils.circ +* starting service pid=7501 open-ils.actor +* starting service pid=7502 open-ils.storage +... + + If the perl services do not start correctly or you receive errors, search for errors + in the following log files: + + /openils/var/log/router.log + /openils/var/log/osrfsys.loglogsosrfsys.log + + At this point you can use the grep command to find errors in + any of the Evergreen log files: + grep ERR /openils/var/log/*.log + As a final sanity check, look for OpenSRF processes: + ps -aef | grep -i opensrf + + + Start the OpenSRF c services and check for errors:] + OpenSRFservicesC + /openils/bin/osrf_ctl.sh -l -a start_c + And output should be: + Starting OpenSRF C (host=localhost) + If the c service does not start, check for errors by grepping + the log files for errors: + grep ERR /openils/var/log/*.log + Check for OpenSRF processes: + ps -aef | grep -i opensrf + + + Smoke test with autogen.shautogen + The autogen tool will take some dynamic information from the database and generate + static JavaScript JavaScript files for use by the OPAC and staff client. It is also able to refresh + the proximity mapproximity map between libraries for the purpose of efficiently routing hold + requests. + As user opensrf, you invoke autogen with the command: + /openils/bin/autogen.sh -c /openils/conf/opensrf_core.xml -u + If Autogen completes successfully, the output will be: + +Updating fieldmapper +Updating web_fieldmapper +Updating OrgTree +removing OrgTree from the cache... +Updating OrgTree HTML +Updating locales selection HTML +Updating Search Groups +Refreshing proximity of org units +Successfully updated the organization proximity +Done + + If Autogen does not complete its task and you receive errors, use + grep to find errors in the log files: + grep ERR /openils/var/log/*.log + + + Connect to Evergreen using the srfsh command-line OpenSRF clientsrfsh (command-line OpenSRF client) + /openils/bin/srfsh + + In order for you to connect using srfsh, you will need to + have set up the .srfsh.xml configuration file in your home directory as as + described in the installation chapter. + + You will then see the srfsh prompt: + srfsh# + At the srfsh prompt, enter this command: + login admin open-ils + You should the request verification: + +Received Data: "6f63ff5542da1fead4431c6c280efc75" +------------------------------------ +Request Completed Successfully +Request Time in seconds: 0.018414 +------------------------------------ + +Received Data: { +"ilsevent":0, +"textcode":"SUCCESS", +"desc":" ", +"pid":7793, +"stacktrace":"oils_auth.c:312", +"payload":{ +"authtoken":"28804ebf99508496e2a4d2593aaa930e", + "authtime":420.000000 +} +} + +------------------------------------ +Request Completed Successfully +Request Time in seconds: 0.552430 +------------------------------------ +Login Session: 28804. Session timeout: 420.000 +srfsh# + If you encounter errors or if you are unable to connect, you should consult the + srfsh.log file. The location of this file is configured in your logssrfsh.log + .srfsh.xml configuration file and is + /openils/var/log/srfsh.log by default. + Pressing + + Ctrl + D + + or entering exit will terminate srfsh. + + + Start Apache and check for errors: + web serverApachestarting + /etc/init.d/apache2 start + or + apache2ctl start + You should see output: + +* Starting web server apache2 +...done. + + the Apache OpenSRF modules write to the + /openils/var/log/gateway.loglogsgateway.log + However, you should check all of the log files for errors: + grep ERR /openils/var/log/*.log + Another place to check for errors is the Apache error logs + generally located in in the /var/log/Apache2 logsApache + Apachelogs + directory + If you encounter errors with Apache, a common source of potential problems are the + Evergreen site configuration files /etc/apache2/eg_vhost.conf and + /etc/apache2/sites-available/eg.conf + configuration filesApacheeg.conf + configuration filesApacheeg_vhost.conf + + + + Testing with <command>settings-tester.pl</command> + As the opensrf user, run the script settings-tester.pl to see if it finds any + system configuration problems. + +cd /home/opensrf/Evergreen-ILS-1.6.0.0 +perl Open-ILS/src/support-scripts/settings-tester.pl + + Here is example output from running settings-tester.pl: + +LWP::UserAgent version 5.810 +XML::LibXML version 1.70 +XML::LibXML::XPathContext version 1.70 +XML::LibXSLT version 1.70 +Net::Server::PreFork version 0.97 +Cache::Memcached version 1.24 +Class::DBI version 0.96 +Class::DBI::AbstractSearch version 0.07 +Template version 2.19 +DBD::Pg version 2.8.2 +Net::Z3950::ZOOM version 1.24 +MARC::Record version 2.0.0 +MARC::Charset version 1.1 +MARC::File::XML version 0.92 +Text::Aspell version 0.04 +CGI version 3.29 +DateTime::TimeZone version 0.7701 +DateTime version 0.42 +DateTime::Format::ISO8601 version 0.06 +DateTime::Format::Mail version 0.3001 +Unix::Syslog version 1.1 +GD::Graph3d version 0.63 +JavaScript::SpiderMonkey version 0.19 +Log::Log4perl version 1.16 +Email::Send version 2.192 +Text::CSV version 1.06 +Text::CSV_XS version 0.52 +Spreadsheet::WriteExcel::Big version 2.20 +Tie::IxHash version 1.21 +Parse::RecDescent version 1.95.1 +SRU version 0.99 +JSON::XS version 2.27 + + +Checking Jabber connection for user opensrf, domain private.localhost +* Jabber successfully connected + +Checking Jabber connection for user opensrf, domain public.localhost +* Jabber successfully connected + +Checking Jabber connection for user router, domain public.localhost +* Jabber successfully connected + +Checking Jabber connection for user router, domain private.localhost +* Jabber successfully connected + +Checking database connections +* /opensrf/default/reporter/setup :: Successfully connected to database... + * Database has the expected server encoding UTF8. +* /opensrf/default/apps/open-ils.storage/app_settings/databases :: Successfully... +* /opensrf/default/apps/open-ils.cstore/app_settings :: Successfully... + * Database has the expected server encoding UTF8. +* /opensrf/default/apps/open-ils.pcrud/app_settings :: Successfully ... + * Database has the expected server encoding UTF8. +* /opensrf/default/apps/open-ils.reporter-store/app_settings :: Successfully... + * Database has the expected server encoding UTF8. + +Checking database drivers to ensure <driver> matches <language> +* OK: Pg language is undefined for reporter base configuration +* OK: Pg language is undefined for reporter base configuration +* OK: Pg language is perl in /opensrf/default/apps/open-ils.storage/language +* OK: pgsql language is C in /opensrf/default/apps/open-ils.cstore/language +* OK: pgsql language is C in /opensrf/default/apps/open-ils.pcrud/language +* OK: pgsql language is C in /opensrf/default/apps/open-ils.reporter-store/language + +Checking libdbi and libdbi-drivers + * OK - found locally installed libdbi.so and libdbdpgsql.so in shared library path + +Checking hostname + * OK: found hostname 'localhost' in <hosts> section of opensrf.xml +$ + + If the output from the script does not help you find the problem, please do not make any further significant changes to your configuration. + Follow the steps in the troubleshooting guide in . + + + Try to login from the staff clientstaff clienttesting + + + Testing the Catalog + OPACtesting + By default, the OPAC will live at the URL http://my.domain.com/opac/. + Navigate to this URL and the front page of the OPAC should load. There is a basic text entry field with some extra search options. If you have any + problems loading this page, check the Apache error logs. If the page loads but does not function correctly, then check for possible javascript errors. We + highly recommend testing with the Firefox browser because of the helpful javascript debugging tools. + Assuming that the OPAC is functioning and there is data in your database, you can now perform other simple functional tests + (e.g., searching the catalog). + + + diff --git a/2.0/admin/z3950.xml b/2.0/admin/z3950.xml new file mode 100644 index 0000000000..5bf2d4a182 --- /dev/null +++ b/2.0/admin/z3950.xml @@ -0,0 +1,205 @@ + + + + <systemitem class="protocol">SRU</systemitem> and <systemitem class="protocol">Z39.50</systemitem> Server + + Evergreen is extremely scalable and can serve the need of a large range of libraries. The specific requirements and configuration of your system should be determined based on your + specific needs of your organization or consortium. +
+ + Testing SRU with yaz-clientyaz + + yaz-client is installed as a part of Index Data's YAZ software. Recent versions include support for querying SRU servers. + Evergreen ships an SRU configuration SRU + that works out of the box. To search Evergreen with yaz-client, choose the GET query method and issue the find command. + In the following example, we connect to the Evergreen test server dev.gapines.org - substitute this hostname with your own + Evergreen server hostname: + Some older versions of yaz-client have known issues with SRU. Ensure that you are using the latest edition of yaz from + http://www.indexdata.com/yaz. + $ yaz-client http://dev.gapines.org/opac/extras/sru + Z> sru GET 1.1 + Z> find hemingway + + If your database has records that match that term, you will get the corresponding MARCXML records + in your response from yaz-client.MARCXML + Here's what the SRU request looks like as sent to the Evergreen web server: + GET /opac/extras/sru?version=1.1&operation=searchRetrieve&query=hemingway&maximumRecords=0 + You can see what the response looks like by hitting the same URL in your Web browser: + + http://dev.gapines.org/opac/extras/sru?version=1.1&operation=searchRetrieve&query=hemingway&maximumRecords=0 + CQL queries + Evergreen supports some CQL CQL index-sets for advanced queries such as a subset of + Dublin Core (DC) elements. Those DC elements that are + supported map to Evergreen default indexes as follows:Dublin Core + + + + + + + DC element + Evergreen index + + + + + title + title + + + creator + author + + + contributor + author + + + publisher + keyword + + + subject + subject + + + identifier + keyword + + + type + none + + + format + none + + + language + lang + + + + + Here are a few examples of SRU searches against some of these indexes: + + dc.title all complete dinosaur + dc.subject all britain france + dc.title exact The Empire Strikes Back + dc.author=king and dc.title=zone + +
+
+ + Setting up <systemitem class="protocol">Z39.50</systemitem> server supportZ39.50 + + + You must have Evergreen's SRU server running before you can enable Z39.50 server support. + + This support uses an Z39.50-to-SRU translator service supplied + by the Net::Z3950::Simple2ZOOMSimple2ZOOM Perl module to enable Evergreen to act as a Z39.50 server. + You could run the Z39.50 server on a different machine. It just needs to be able to connect to the + Evergreen SRU server. + + Setting up the <systemitem class="protocol">Z39.50</systemitem> server + + Install a recent version of yaz (the Makefile.install should have installed a suitable version). + + Install Net::Z3950::Simple2ZOOM (sudo cpan Net::Z3950::Simple2ZOOM) + + Create a Simple2ZOOM configuration file. Something like the following is a good start, and is + based on the Simple2ZOOM + documentation example. We'll name the file dgo.conf for our example: + +<client> + <database name="gapines"> + <zurl>http://dev.gapines.org/opac/extras/sru</zurl> + <option name="sru">get</option> + <charset>marc-8</charset> + <search> + <querytype>cql</querytype> + <map use="4"><index>eg.title</index></map> + <map use="7"><index>eg.keyword</index></map> + <map use="8"><index>eg.keyword</index></map> + <map use="21"><index>eg.subject</index></map> + <map use="1003"><index>eg.author</index></map> + <map use="1018"><index>eg.publisher</index></map> + <map use="1035"><index>eg.keyword</index></map> + <map use="1016"><index>eg.keyword</index></map> + </search> + </database> +</client> + + You can have multiple <database> sections in a single file, each pointing to a different scope of your consortium. The name attribute on + the <database> element is used in your Z39.50 connection string to name the database. The + <zurl> element must point to + http://hostname/opac/extras/sru. As of Evergreen 1.6, you can append an optional organization unit shortname for search + scoping purposes, and you can also append /holdings if you want to expose the holdings for any returned records. So your zurl + could be http://dev.gapines.org/opac/extras/sru/BR1/holdings to limit the search scope to BR1 and its children, and + to expose its holdings. + + + Run simple2ZOOM as a daemon, specifying the configuration files and one or more listener addresses that the + Z39.50 server will + be accessible on. If you do not specify a port, it will automatically run on port 9999. In the following example, + we tell it to listen both to localhost on port 2210, and on dev.gapines.org + n port 210: + + <yazgfs> + <server id="server1"> + <retrievalinfo> + <retrieval syntax="xml"/> + <retrieval syntax="marc21"> + <backend syntax="xml"> + <marc inputformat="xml" outputformat="marc" inputcharset="utf-8" outputcharset="marc-8"/> + </backend> + </retrieval> + </retrievalinfo> + </server> +</yazgfs> + + + + Run simple2ZOOM as a daemon, specifying the configuration files and one or more listener addresses that + the Z39.50 server will be accessible on. + If you do not specify a port, it will automatically run on port 9999. In the following example, we tell it to listen both to localhost on port 2210, and on dev.gapines.org on port 210: + simple2zoom -c dgo.conf -- -f xml2marc-yaz.cfg localhost:2210 dev.gapines.org:210 + + + To test the Z39.50 server, we can use yaz-client again: + +yaz-client +Z> open localhost:2210/gapines +Connecting...OK. +Sent initrequest. +Connection accepted by v3 target. +ID : 81/81 +Name : Simple2ZOOM Universal Gateway/GFS/YAZ +Version: 1.03/1.128/3.0.34 +Options: search present delSet triggerResourceCtrl scan sort namedResultSets +Elapsed: 0.010718 +Z> format marcxml +Z> find dc.title=zone and dc.author=king +Sent searchRequest. +Received SearchResponse. +Search was a success. +Number of hits: 0, setno 4 +records returned: 0 +Elapsed: 0.611432 +Z> find dead zone +Sent searchRequest. +Received SearchResponse. +Search was a success. +Number of hits: 4, setno 5 +records returned: 0 +Elapsed: 1.555461 +Z> show 1 +Sent presentRequest (1+1). +Records: 1 +[]Record type: XML +<record xmlns:... (rest of record deliberately truncated) + +
+
+ diff --git a/2.0/appendices/glossary.xml b/2.0/appendices/glossary.xml index 1230f840ff..59c3a16342 100644 --- a/2.0/appendices/glossary.xml +++ b/2.0/appendices/glossary.xml @@ -7,59 +7,64 @@ A - + Apache Apache - Open-source web server software used to serve both static content and - dynamic web pages in a secure and reliable way. More information is available - at http://apache.org. + Open-source web server software used to serve both static + content and dynamic web pages in a secure and reliable way. More + information is available at + http://apache.org. B - + Bookbags bookbags Bookbags are lists of items that can be used for any number of - purposes. For example, to keep track of what books you have read, books you - would like to read, to maintain a class reading list, to maintain a reading - list for a book club, to keep a list of books you would like for your - birthday. There are an unlimited number of uses. + purposes. For example, to keep track of what books you have read, + books you would like to read, to maintain a class reading list, to + maintain a reading list for a book club, to keep a list of books you + would like for your birthday. There are an unlimited number of + uses. C - + CentOS Linux CentOS - A popular open-source operating system based on Red Hat Enterprises - Linux (a.k.a. "RHEL") and often used - for in web servers. More information is available at http://www.centos.org. + A popular open-source operating system based on Red Hat + Enterprises Linux + (also known as "RHEL") and often used for in web servers. More + information is available at + http://www.centos.org. - + Closure Compiler A suite of open-source tools used to build web applications with - Javascript; originally developed by Google. - More information is available at + Javascript; originally developed by Google. + It is used to create special builds of the Evergreen Staff Client. + More information is available at http://code.google.com/closure/compiler/. - + CPAN Perl @@ -67,14 +72,15 @@ An open-source archive of software modules written in - Perl. More information is available at + Perl. More information is available at http://www.cpan.org. + D - + Debian Linux @@ -82,10 +88,11 @@ One of the most popular open-source operating system using the - Linux kernel that provides over 25000 - useful precompiled software packages. Also known as - Debian GNU/Linux. More information is - available at http://www.debian.org. + Linux kernel that provides + over 25000 useful precompiled software packages. Also known as + Debian GNU/Linux. More + information is available at + http://www.debian.org. @@ -94,30 +101,34 @@ domain name - A unique set of case-insensitive, alphanumeric strings separated by - periods that are used to name organizations, web sites and addresses on the - Internet (e.g.: www.esilibrary.com). Domain names can be reserved - via third-party registration services, and can be associated with a unique IP - address or suite of IP addresses. + A unique set of case-insensitive, alphanumeric strings + separated by periods that are used to name organizations, web sites + and addresses on the Internet (e.g.: + www.esilibrary.com). Domain names can be reserved via + third-party registration services, and can be associated with a + unique IP address or suite of IP addresses. E - + ejabberd ejabberd - An open-source Jabber/XMPP instant messaging server that runs under popular - operating systems (e.g., Mac OSX, + An open-source Jabber/XMPP instant messaging server that is + used for client-server message passing within Evergreen. It runs + under popular operating systems (e.g., + Mac OSX, GNU/Linux, and - Microsoft Windows). One popular use is - to provide XMPP messaging services for a - Jabber domain across an extendable cluster of - cheap, easily-replaced machine nodes. More information is available at + Microsoft Windows). One + popular use is to provide XMPP messaging + services for a Jabber domain across an + extendable cluster of cheap, easily-replaced machine nodes. More + information is available at http://www.ejabberd.im. @@ -130,16 +141,17 @@ G - + Gentoo Linux Gentoo - A popular open-source operating system built on the - Linux kernel. More information is available - at http://www.gentoo.org. + A popular open-source operating system built on the + Linux kernel. More + information is available at + http://www.gentoo.org. @@ -149,22 +161,23 @@ I - + IP Address IP Address - (Internet Protocol address) A numerical label consisting of four numbers - separated by periods (e.g., "192.168.1.15") assigned to individual members of - networked computing systems. It uniquely identifies each system on the network - and allows controlled communication between such systems. The numerical label - scheme must adhere to a strictly defined naming convention that is currently - defined and overseen by the Internet Corporation for Assigned Names and - Numbers ("ICANN"). + (Internet Protocol address) A numerical label consisting of + four numbers separated by periods (e.g., "192.168.1.15") assigned to + individual members of networked computing systems. It uniquely + identifies each system on the network and allows controlled + communication between such systems. The numerical label scheme must + adhere to a strictly defined naming convention that is currently + defined and overseen by the Internet Corporation for Assigned Names + and Numbers ("ICANN"). - + Item/copy Buckets copy buckets @@ -175,24 +188,26 @@ copy buckets - Virtual containers to use in batch processing of item or - copy records. They can be used to perform various cataloging/holdings - maintenance tasks in batch. + Virtual containers to use in batch processing + of item or copy records. They can be used to perform various + cataloging/holdings maintenance tasks in batch. J - + Jabber jabber XMPP - Now known as XMPP (eXtensible Messaging and Presence Protocol), it was - originally named "Jabber". + The communications protocol used for client-server message + passing within Evergreen. Now known as XMPP (eXtensible Messaging and + Presence Protocol), it was originally named "Jabber". + @@ -206,17 +221,18 @@ M - + MARC MARC - The MARC formats are standards for the representation and communication - of bibliographic and related information in machine-readable form. + The MARC formats are standards for the representation and + communication of bibliographic and related information in + machine-readable form. - + MARCXML MARCXML @@ -225,32 +241,34 @@ Framework for working with MARC data in a XML environment. - + McCoy - An open-source application that allows add-on authors to provide secure - updates to their users. More information is available at - + An open-source application that allows add-on authors to + provide secure updates to their users. It is used to create special + builds of the Evergreen Staff Client. More information is available + at http://developer.mozilla.org/en/McCoy. - + memcached memcached - A general-purpose distributed memory caching system, usually with a - client~server architecture spread over multiple computing systems. It reduces - the number of times a data source (e.g., a database) must be directly accessed - by temporarily caching data in memory, therefore dramatically speeding up - database-driven web applications. + A general-purpose distributed memory caching system, usually + with a client-server architecture spread over multiple computing + systems. It reduces the number of times a data source (e.g., a + database) must be directly accessed by temporarily caching data in + memory, therefore dramatically speeding up database-driven web + applications. N - + Network address network address @@ -261,76 +279,92 @@ - + nsis - An open-source software tool used to create Windows installers. - More information is available at - http://nsis.sourceforge.net. + An open-source software tool used to create Windows + installers. It is used to create special builds of the Evergreen + Staff Client. More information is available at + + http://nsis.sourceforge.net. O - + OPAC OPAC - The "Online Public Access Catalog"; an online database of a library's - holdings; used to find resources in their collections; possibly searchable by - keyword, title, author, subject or call number. + The "Online Public Access Catalog"; an online database of a + library's holdings; used to find resources in their collections; + possibly searchable by keyword, title, author, subject or call + number. - + OpenSRF OpenSRF - The "Open Scalable Request Framework" (pronounced 'open surf') is a - stateful, decentralized service architecture that allows developers to create - applications for Evergreen with a minimum of knowledge of its - structure. + The "Open Scalable Request Framework" (pronounced 'open surf') + is a stateful, decentralized service architecture that allows + developers to create applications for Evergreen with a minimum of + knowledge of its structure. P - + + Perl + + Perl + + + The high-level scripting language in which most of the business logic of Evergreen is written. + + + + PKI PKI - Public Key Infrastructure (PKI) describes the schemes needed to generate - and maintain digital SSL Certificates. + Public Key Infrastructure (PKI) describes the schemes needed + to generate and maintain digital SSL Certificates. - + PostgreSQL databases PostgreSQL - A popular open-source object-relational database management system that - underpins Evergreen software. + A popular open-source object-relational database management + system that underpins Evergreen software. - - Putty + + PuTTY SSH Putty - A popular open-source telnet/ssh client for the Windows and Unix - platforms. More information is available at + A popular open-source telnet/ssh client for the Windows and + Unix platforms. As used in Evergreen, a handy utility used to create + an SSH Tunnel for connecting Staff Clients to Evergreen servers over + insecure networks. More information is available at http://www.chiark.greenend.org.uk/~sgtatham/putty/. + @@ -340,159 +374,187 @@ R - + Resource Hacker - An open-source utility used to view, modify, rename, add, delete and - extract resources in 32bit Windows executables. - More information is available at - Resource Hacker + An open-source utility used to view, modify, rename, add, + delete and extract resources in 32bit Windows executables. It is + used to create special builds of the Evergreen Staff Client. More + information is available at + + Resource Hacker - + RHEL Linux RHEL - Also known as "Red Hat Enterprises - Linux". An official - Linux distribution that is targeted - at the commercial market. It is the basis of other popular - Linux distributions, e.g., - CentOS. More information is available - at http://www.redhat.com. + Also known as "Red Hat Enterprises + Linux". An official + Linux distribution that is + targeted at the commercial market. It is the basis of other popular + Linux distributions, e.g., + CentOS. More information is + available at + http://www.redhat.com. S - + SIP SIP - SIP, standing for Standard Interchange Protocol, was developed by the 3M - Corporation to be a common protocol for data transfer between ILS' and third party - devices. + SIP (Standard Interchange Protocol) is a communications + protocol used within Evergreen for transferring data to and from + other third party devices, such as RFID and barcode scanners that + handle patron and library material information. Version 2.0 (also + known as "SIP2") is the current standard. It was originally + developed by the 3M Corporation. - + srfsh srfsh - A command language interpreter (shell) that executes commands read from the - standard input. It is used to test the Open Service Request Framework (OpenSRF). + A command language interpreter (shell) that executes commands + read from the standard input. It is used to test the Open Service + Request Framework (OpenSRF). - + SRU SRU - SRU is a standard XML-focused search protocol for Internet search - queries, utilizing CQL (Contextual Query Language), a standard syntax for - representing queries. + SRU (Search & Retrieve URL Service) is a search protocol + used in web search and retrieval. It expresses queries in Contextual + Query Language (CQL) and transmits them as a URL, returning XML data + as if it were a web page. + - + + SRW + + SRW + + + SRW (Search & Retrieve Web Service), also known as "SRU + via HTTP SOAP", is a search protocol used in web search and + retrieval. It uses a SOAP interface and expresses both the query and + result as XML data streams. + + + + SSH SSH - An encrypted network protocol using public-key cryptography that allows - secure communications between systems on an insecure network. Typically used - to access shell accounts but also supports tunneling, forwarding TCP ports and - X11 connections, and transferring files. + An encrypted network protocol using public-key cryptography + that allows secure communications between systems on an insecure + network. Typically used to access shell accounts but also supports + tunneling, forwarding TCP ports and X11 connections, and + transferring files. - + SSH proxy SSH proxy - As used in Evergreen, a method of allowing one or more Staff Clients to - communicate with one or more Evergreen servers over an insecure network by - sending data through a secure SSH tunnel. It also buffers and caches all data - travelling to and from Staff Clients to speed up access to resources on - Evergreen servers. + As used in Evergreen, a method of allowing one or more Staff + Clients to communicate with one or more Evergreen servers over an + insecure network by sending data through a secure SSH tunnel. It + also buffers and caches all data travelling to and from Staff + Clients to speed up access to resources on Evergreen servers. - + SSH tunnel SSH tunneling - An encrypted data channel existing over an SSH network connection. Used - to securely transfer unencrypted data streams over insecure networks. + An encrypted data channel existing over an SSH network + connection. Used to securely transfer unencrypted data streams over + insecure networks. - + SSL Certificate SSL - As used in Evergreen, it is a method of ensuring that Staff Clients are - able to connect to legitimate Evergreen servers. - In general, it is a special electronic document used to guarantee - authenticity of a digital message. Also known as a "public key", or "identity" - or "digital" certificate. It combines an identity (of a person or an - organization) and a unique public key to form a so-called digital signature, - and is used to verify that the public key does, in fact, belong with that - particular identity. + As used in Evergreen, it is a method of ensuring that Staff + Clients are able to connect to legitimate Evergreen servers. + In general, it is a special electronic document used to + guarantee authenticity of a digital message. Also known as a "public + key", or "identity" or "digital" certificate. It combines an + identity (of a person or an organization) and a unique public key to + form a so-called digital signature, and is used to verify that the + public key does, in fact, belong with that particular + identity. + T - + tunneling tunneling SSH tunneling - As used in Evergreen, it is a method of allowing Staff Clients to securely - connect to legitimate Evergreen servers. - In general, it is a method of encapsulating data provided in one network - protocol (the "delivery"protocol), within data in a different network protocol - (the "tunneling" protocol). Used to provide a secure path and secure - communications through an insecure or incompatible network. Can be used to - bypass firewalls by communicating via a protocol the firewall normally blocks, - but "wrapped" inside a protocol that the firewall does not block. + As used in Evergreen, it is a method of allowing Staff Clients + to securely connect to legitimate Evergreen servers. + In general, it is a method of encapsulating data provided in + one network protocol (the "delivery"protocol), within data in a + different network protocol (the "tunneling" protocol). Used to + provide a secure path and secure communications through an insecure + or incompatible network. Can be used to bypass firewalls by + communicating via a protocol the firewall normally blocks, but + "wrapped" inside a protocol that the firewall does not block. U - + Ubuntu Linux Ubuntu - A popular open-source operating system using the - Linux kernel that was originally based on the - Debian GNU/Linux operating system. - More information is available at + A popular open-source operating system using the + Linux kernel that was + originally based on the + Debian GNU/Linux + operating system. More information is available at http://www.ubuntu.com. @@ -500,88 +562,98 @@ V - + Virtualization virtualization - A method of executing software in a special environment that is partitioned or - separated from the real underlying hardware and software resources. In typical usage, it - allows a host operating system to encapsulate or emulate another - operating system environment in such a way that the emulated environment is completely - unaware of the hosting environment. For instance, it allows a - Linux application to execute within a + A method of executing software in a special environment that + is partitioned or separated from the real underlying hardware and + software resources. In typical usage, it allows a + host operating system to encapsulate or emulate + a guest operating system environment in such a + way that the emulated environment is completely unaware of the + hosting environment. As used in Evergreen, it enables a copy of the + Linux operating system + running Evergreen software to execute within a Windows environment. + + + - + VirtualBox virtualization software VirtualBox - A popular commercial package of virtualization software that emulates the x86 - microprocessor architecture. It can be installed on - Linux, Mac OS X, - Windows or - Solaris "host" operating systems and allows - other "guest" (typically including Linux and - Windows) operating systems to be loaded and executed. + A popular commercial package of virtualization software that + emulates the x86 microprocessor architecture. It can be installed on + Linux, + Mac OS X, + Windows or + Solaris "host" operating + systems and allows other "guest" (typically including + Linux and + Windows) operating systems + to be loaded and executed. - + Virtual PC virtualization software Virtual PC - A popular commercial package of virtualization software that emulates the x86 - microprocessor architecture. It is installed on a Windows "host" operating system and - allows other "guest" (typically including Linux - and Windows) operating systems to be loaded and - executed. + A popular commercial package of virtualization software that + emulates the x86 microprocessor architecture. It is installed on a + Windows "host" operating system and allows other "guest" (typically + including Linux and + Windows) operating systems + to be loaded and executed. - - Volume Buckets - - volume buckets - - - Virtual containers to use in batch processing of multiple - volumes. They can be used to perform various cataloging/holdings maintenance - tasks in batch. - - - + VMware virtualization software VMware - A popular commercial package of virtualization software that emulates the x86 - microprocessor architecture. It can be installed on - Linux, + A popular commercial package of virtualization software that + emulates the x86 microprocessor architecture. It can be installed on + Linux, Mac OS X, - Windows or - Solaris "host" operating systems and - allows other "guest" (typically including - Linux and - Windows) operating systems to be - loaded and executed. + Windows or + Solaris "host" operating systems + and allows other "guest" (typically including + Linux and + Windows) operating systems + to be loaded and executed. + + Volume Buckets + + volume buckets + + + Virtual containers to use in batch processing + of multiple volumes. They can be used to perform various + cataloging/holdings maintenance tasks in batch. + + W - + Wine Linux @@ -589,84 +661,88 @@ A popular open-source application that allows - Linux and + Linux and Unix - systems to run Windows executables. - More information is available at + systems to run Windows + executables. More information is available at http://www.winehq.org/. X - + XML XML - The eXtensible Markup Language, a subset of SGML; a set of rules for - encoding information in a way that is both human- and machine-readable. It is - primarily used to define documents but can also be used to define arbitrary - data structures. It was originally defined by the World Wide Web Consortium - (W3C). + The eXtensible Markup Language, a subset of SGML; a set of + rules for encoding information in a way that is both human- and + machine-readable. It is primarily used to define documents but can + also be used to define arbitrary data structures. It was originally + defined by the World Wide Web Consortium (W3C). - + XMPP XMPP jabber - An open-standard communications protocol, based on XML, used in - message-oriented middleware. It supports the concept of a consistent - domain of message types that flow between software - applications, possibly on different operating systems and architectures. - More information is available at - http://xmpp.org. + The open-standard communications protocol (based on XML) used + for client-server message passing within Evergreen. It supports the + concept of a consistent domain of message types + that flow between software applications, possibly on different + operating systems and architectures. More information is available + at http://xmpp.org. + - + xpath xpath - The XML Path Language, a query language based on a tree representation - of an XML document. It is used to programmatically select nodes from an XML - document and to do minor computation involving strings, numbers and Boolean - values. It allows you to identify parts of the XML document tree, to navigate - around the tree, and to uniquely select nodes. The currently version is "XPath - 2.0". It was originally defined by the World Wide Web Consortium (W3C). + The XML Path Language, a query language based on a tree + representation of an XML document. It is used to programmatically + select nodes from an XML document and to do minor computation + involving strings, numbers and Boolean values. It allows you to + identify parts of the XML document tree, to navigate around the + tree, and to uniquely select nodes. The currently version is "XPath + 2.0". It was originally defined by the World Wide Web Consortium + (W3C). - + XUL xUL - The XML User Interface Language, a specialized interface language that allows - building cross-platform applications that drive Mozilla - -based browsers such as Firefox. More information is - available at + The XML User Interface Language, a specialized interface + language that allows building cross-platform applications that drive + Mozilla-based browsers such as + Firefox. More information is available at https://developer.mozilla.org/en/XUL. - + xulrunner XULRunner - A specialized run-time application environment that provides support for - installing, upgrading and uninstalling XUL - applications. It operates with Mozilla-based - applications such as the Firefox browser. - More information is available at + A specialized run-time application environment that provides + support for installing, upgrading and uninstalling + XUL applications. It operates with + Mozilla-based applications such as the + Firefox browser. More information is + available at https://developer.mozilla.org/en/XULRunner. @@ -675,38 +751,45 @@ Y - + YAZ yaz - A programmers’ toolkit supporting the development of Z39.50/SRW/SRU - clients and servers. + A programmers’ toolkit supporting the development of + Z39.50 / SRW / SRU clients and servers. + + + - + yaz yaz-client - Z39.50/SRU client for connecting to YAZ servers. - More information is available at - http://www.indexdata.com/yaz + A Z39.50/SRU client for connecting to YAZ servers. + More information is available at + + http://www.indexdata.com/yaz/doc/yaz-client.html + Z - + Z39.50 Z39.50 - A client–server protocol for searching and retrieving information from - remote computer databases. + An international standard client–server protocol for + communication between computer systems, primarily library and + information related systems. + diff --git a/2.0/media/serversideinstallation-staffclient-running-1.png b/2.0/media/serversideinstallation-staffclient-running-1.png new file mode 100755 index 0000000000000000000000000000000000000000..4ae44dbc63cef5991db8905c5fd419c697b1e03a GIT binary patch literal 57714 zcmZ6y1yCJLv@Hz5-JRg>!QFzp9o#i|aF+zP5InfM1xav7aF^i09fDhM_&eWyx9YvW zC<@M*nV#wHEo-l}CrV9477dvg843ytO%P@vGy(A80oXSxKmx zanb|u0p46uRtoCn-%nmgX%hGb>Ajqu8x$0J@4sK@6lQc1@Fjw~ys|XH5;P_*EkU_~ z^(hn-1(dv$gqHX3qinA%T>=#b{)Krw_`2PE; zKvw#~Vb&drgwtivtkFP2;hBxu-;+N-zB`>}J!!u`Yjj)_>ji}-J|k!I?<_i{FSiro ziA6KBF*$a`Pt&jV)n{4kO1?p%rr-1Dc5*AG`_EUVDF1f%x<3A`fJmuC>-67c&zUK- zW)K*8Q4jNc3ka@M78!&G`WK^CF{Umq<9Ku`qJ3#@>4@$0+OddMGTHt44#u8p7bMY2 zZ{HVF%_7{36(!)psMZ%DhmTu+)?Lf!3#;S*j9ZysLF`j(%v)_7U8Jj0rNfhQViTWd zW{n+PK%t0ToFdBW{FqY_{VQoVAtOgRjqBladPXQ4Y(_~Jd8yWuuZi88 zV~8=d$t}Q`$QM&35%QOx1{{Z1Cc2ASm>3dMuC*D+A(mD=|GR) zh*$mSkSvumNBrdw_mdTIK1AxMrOfBsqk$#(PcrdsGwAw?3fTB9a@Q>DK5g4nG_yj=keIP=4y%EeX&pnj2j;;KLEg-; z7PsAhoBYe1WH)ppaTIvA3@MRpK!*dQ4~qiq_CizC*8zJ~y2=M{`Zhfl8`5E%{=a zx%biIjuRa32uw-|kIiA=C}C-LQWj>B{aZuA(MV_zipluXBW+TMv4H>q8>PY>r!;kKNto8pmdqdUO<7Ma9Ll z0zU*(O~gGD!^O(5Cmm--%1tVd-63f$EllY=t%5+WRMvDCl{}dh%qW^*ha^d z#Q4zN#xN@>VR z_L5nXo|+{}+ut46+jr1TUf3dnO+8Kx^?x3eby@H&DXpF1A9q9a0HjzTmY8&r#+mB8J)VAZg;-D{<57^b{MJJ1X@^Le=L{Hjks_ zylB#Asrqf)pP9?LdDP%rVE-}Bz)M}a4k zC{?Rst5sf*+E;5Y$jHc8W%xk-a?@)id{qmf7}{^eXRlmr^kBbHIvFDw`Tp6jD)xNO ztH^mkM)+bJJ|lN(lw0a~kM$~Y=k+Cg_UJSn<>!Lb))JI$2Gu{3dA1*85IhRpD&Yy| z!f5KOoXJSsp7vXzu!tJ%eS6yo#&S;ioc7i*Ok@J(@ifWqg43*xl?sov*xDXm_oIr; z4{FX!Bub4QrlZcp8_NbKmT3^AW>D*gif=ZdOPLuv&jH`y4Foo+evs313_VMNP+KGY^>N+-O`masr<~=L2Q$Doqadj9>KJ3 zP}uDfGsmPp?&yex?I^WpmY|WQ&uXtSuBB=*Rd#9WEtL2EZ;7H7>N>iKW#Le-&IRR> z)aps@xL+4cC9y|R@?r7LUa8X!d+Az!{zro-^oZ%u$J0b^Mq)LA{&3fcR@TZV$}TPO zT20vmsSdm1fwZ|}Egzi&g{5@um0re`y`84?=`aqUe#CA0Haxs%Y>Ro~KjQ7_%k^u7 zQl6d)%L7JNRuSD-aCUxC`)}!1U+fUJ9&&rK!VZb%O5rq}T7wmwgA6k(@C_dO5Iy1 zoDbErv1FW)rVI|-)hMs!361%LKBE>vvHd_E48}jSN~}TYF&9t$f$bv8PwMHw%PgA9 zzR5f5K_mZJv)0(MH~%2CJ7ehe%hsfHFC5%iUxSWRSYxjddte`qbI^c?h41@=0CLxd z;s61Ct-cQyc)~tgcgrt-=KZ^#7*0jFb3PckF4R9@LghYx&Fvr4$3{hQBAgEC5`AJE zO20l&#^>-tB&a`$t5Q(v!;*S&HLo>S?m0ou7F{#%u zQt~;X_WkZWxK?{Kv7dgrf#F`%+&z-fVeGlgHP6@+-`E6GPg~B@07pBcB13%E z-4$c+vbQJgtNDtAu}N#X--|!`G~1uyM*7rOU(LM82AEi96usVn3Db$)QsS`h52D1( zPc=%DSn3f5e9tS3Ove#Q`t#kQiAl+K+fDGB{f81+7WZJ)&L!CqUdM#sp`Nz0(ulP8 zMP<==6DsCopZqQUNKzn%&qhjPv!ghG&EQdF+na^oYvj@5===Y z``51gFG3vyy|GM*EG%g~3l3_zZgqm~cX5VTKFn9p2aIfjjgHXb(hwfRGq|3?)UDMr zQ#r1Zs){Fx_79k}IfL#+^W+H#cRQ5J2dmAt&{3vxF*lm>Qk!cI>Q+t;{5X5AVov!u z9_%0w6ZaoZso@eWnoCS`!=samYg^MrpzpovCOyay{}tb`BoO2iflcW_i}qcSxd~`HT6EFLlvszQDwW$k;rZ(Nww02xQvKC3%J29q2rR| zM62<;x8n?JNIK8-o!|NP6?}cs6<9oAi&ng}UC1N*V2TK-7CK`ss<13>-JkjnjmEj6 z<^773sf@Gg1Oydy9TAHf)!r!uZCuIxtx6qIbRm-$Z^Sl;ggVWyX$`9D_)FAet^0S* z4cM_YzUkbJ%=NH}ovX^?DcHD$B{BNLe3aUhOh$IYsL-L`2EEWz!WQeD5t70^^UIn; z@y8Com*5x`X}s3%lJb$}(O&7v*17tzg~4Srh5w7QAutI_0w+i+jO=wR^6mZ7x2*XF zE6ZXXTT2mPrnJAospx`J4ln9uZb^_3Ix zS|&Zd|Aa^q!pyj#l(|^vn%)n%4*jq0W5&n|9giN8Cfyao7uON{%k^ZZ0WC1j;ybA$ z_ZydRpV}rj@g%YeQiA=Fj4-8vn<;XVH5>e*ynR78WLO&zc^xIxWbkt-cxeZUYs zniVGYzUNC$_-1r~oRsYCz=4PGMC^=ZPJlDaORF2dQ3l!8)+z5)i3?q}K6tdb-vP|@ zLLp6JYu!JbY&g88^ogyD-;b4%l}!zL6=Dp)(@qJT+@}vYEVpN?9P1M)tRB18H^|X{ z7n4@;Y{j}IuH}b73MHQIkHoaY#Rzx%Xi4_hT8Nw?#>%u=_}Pug5Gl{R1GKdL3f2-A z>mBJG4VvW2l1glowJH!P2R#+Drt^8iipl<1+0epj^>>z|{H%MVddm>h^(^b_eweIw za&ckzo9`=!&w_yPMSs)3@GgnyOH*q8Oy#vGp8RE2_ z;WQHT0%?RySNFv-+$L;*Tb}cV?QaaRZ?0F5g!H3Jklyn4TaKN3ZHS*>!7G#eNNK=# zwQh1!@^gQ4D$JkIf-?U(I|VOl>&->-AARve3JRLwhJlsuJAX(@yhJrHjVRa+4mKVW z!j<)_0-?7khg3W+#)m^Ji&_tUaYu1CWsf0@9JtCbDRxd2I=3m|61k4xJ6z#=eu`ynLZhNW!8gi=0T4N<_&)vfsxe)`YKm ztn|*R@|%No{xUL`PQS{aUokKWc;+*JsS$A%HXlpwGTGY zP96voA=W%VT6g`;z;xr*JRJQ^hUoDFg@iNQ({CFrZ8-azmuec% zUdT0(H#4I&4q`Cd;-mbLZAnc}j}ReUP*4QrB?F_8WK{L|`1U?q=wmb!MnpW`%%-1w z;=A8vqM*+DR+;MZ{8bTbpa#S@7Ts~_YgZn2+t~2m?1%ly@3a{u`MS8CN554EJgX5a znb_LG3fg;$_PC*c>|LJUztuTq8C~flSb+COae#{s{+vHazsAvVncu!SxNoc>$EX`# za$n{~;zfBj--T)Bl1^$yW!7s@DrBtSKGM%#E~u{0$V&xP|C$ngFQs0r>th=|21QXt z`*j~BC+9Sk?Ut{pQT89Hn|MDM?3bVl!C6SIX0ebSS!t4v(dkRF;H>n^wBvNr6d&2f z*WtNip}0Xa$~?!+R2o_Vd$i~8j%z9F_wybSr^YsO8P=a^qOM7JN$jVgGq|0ktgU^k z-5)TvH6V~|)9agqmBR6Ilxaae%Fw*lZ9+Y?42@%y>_mEDV{#S$1WA$f@xqEM=LSgBRMSf*2!3GK{76~ElutyweWHi#r+W8@ z)Dym@P?GL2qZdh({skGmwxbLDR3MhF5h;T6CJt&FAHjBsCCT`hOE>xEoczu3SNBPr(B#y@LAoSh4th;yv?Z-Hr~#p_F6} zTFvA0H@@P`S>LxZT^Qr>fC4gA|)Y+|MWq z^)%aj8}x7F%?(GZw|AtoP{GN7k_aiO7HIY&38URvD14Bg2{YwT>bcjmi)Ym5t*oZ;js&8Fb`KYSyEFZrbn(J5{SX&!iG(LSnt?~} z)^*NYxEzv%izI;y$wY*T1TqfYGuL~X7Je=02qyO*D*72BP6Ka}aDp%0J@`2BX|`|E?{K2MD>M)`FVSjO6DsazDJ!eJ8A$sZr&O8G6N5wpAN?Lup) zgDdRV#|)YZEo>gjFHyr8YOk`sS2aL!yFBPMxDb%l&O4a>kbgh^)TqtNorQn;*5mD~d?? zf(GgT9y&!xoD`TnN^nRV`agU#``1ln?Ek}3mq@<6eJd4z`dIxdR~u%qz9qE(zq1}~ za9c-qs6<4v8ymTgJcT3?NzoAw4i3a@n`kLvhlYlVii#fDlD{k+Tkn6}*xuQhWh$Mu zqh)1{ySj2OY{!oYLt!KJ|812<6BRo;iu3E;&B;nEp+NNZwq+8I^1qw+I#*6U1&Y0m zK%-|B36Y7*JX^4crYG~X2$+VzM`(6p4^OfN{#P$RKIk5b>N53YVe&3 z@C_R+E^1)~Grp>+J2)r(cnz-hyOj*ci8Mr~11AH&M(Sh7thXY_1AiD;wB!^pwBJtz zX|R`yE?&F7TWyB}*UKgL0_F|76YE7K7QL>c;qvk_fhN7Gs!H&(wybQu?UafHhw!R$ zt4-WJDR7aHq4%9G^U)V^ju$?fCiPL*Lx;%0%Qr_)-0uOhp&I_~a7CWd(BoTC~p zT;^DRf%NHg>8YNfOJ549us5b&s?Sl~K+DCj{OA`K1e@!_i5w9>1{S7*w*xAcmX>Et zT`QxbLZ?#dxV(c>ddzNyNWz zXg%JJ6I1XxD{C|?1mSWw)7fQ+)}rMxnwf!#DVmHkpEKYdm96SAnkoZs!KvO8l?}J-#UOO&z|thIT2WMkL+2u#c$L!*?wcr*I=_;lSj2LF!)!mhSIG~`sJ%^XL} zx3T(g(zAD6P{HK2Du5Fl@bEX^mN=1SCr-6NJ^!)OAp$7 zgU2Dh@82VdO6_WX?=yu;?m0<$8>eLpkP zD{nSTh*o~9ZKRP0UYA4OY0|UHYS0W!rQh1?tJ8`ven(g2%R?9K_TG-$-Hy)Z)YRd| z!y22@&VZ`tT@v1>=9Y26!&Vg;8TgKeE33`ov;>pSsvLyEqJw&!S+v0T4r{x{Kf<9* zdSn~5c~XvWYFCDN9L_a3uZeaVJ)uDve0M7LI$gyjAmFmxR~r|5@fW?jwOBQ{3hdoX z#Ul&c#@ZbZ_>^K2Fti%r*YbQ%@(ygnTEL5lL6g(g`GC#koPjg+*{Wa6yD2JH{aLTI z>W!zq7`?}5D#?5b0uy2Qh#oW7@BghZvIrIo0=nhwaBcI}CnDjSW#MrmenjQzv%4p# zvW>x#zgAXO4vY0+PBwqn^CQUfo11&z6O@*e{3=l8wT#danrK5KhuIDosi>u-G0v3DYPcy#k{cd|6w{xp|KD&!gKvekciF;Yu7ahk~!b9CeY z<6zV{I6a1O-C65tcbn@h)FCM{Xe8>|#!e@+ zrvLP>63JS$_<^@7D(HNMK_YFQClrLJbj=+WCo4eT%LsZtGyywrzxs6ZF;YY5Ctny; z%&Z;5jyOkTpSjt?-`7Y7$S5&tkd%+zk{^FkC}(mjd!Kl=9n1$oT_4Wd%#XiDeJx1i z6z^=;oI_n~JM)!N?75i;#ES4Zl0%kU8hP&yV-S@3qjz#G8WtHCS>*N+ zR~B|+seYU$s>|YYUi}Dy+rZd>2rR4q_oBu|RQW_;_NKkB(k$7?xWa?lZ>jdOy~y}h zu5@bJHsFc*oE&=Dq*(kJTT}7`y#5mqOC-ghc^wvhOq%t)Tl)T*z?eVuV7ksW3&1(PJn^4F}Sj6{g`(lJ`E5rUd>r5CE@ocaM;~bbOf2B##cjq+;kL&X- zoSyvmT2nH^>o-0=ryV!mcPTpi%f-yO{ufB%)ePHarS>7EB*dvuL=@K%Q-tA z9X6XC90H64h!tRtY{$R7OrIb3sC^>dHXE|lH#FETl)YICdVx{S;NJLvaI*J^!j@<9 z0!=zR7FX_X{5XIzm?$-%l6|*d7_WP^D#^q=-16LNTUIgr7DMz$Ffn%rz-?ak& z949WSbO)R$6Em}N4KI*%qh2KBpmbDQ%}2Ucy(`^pD$aw6R{4CG>iP*JS2*4a-4_kv_b75Zbxb>rGMNIS63^-t?_ zCL$aTT_6e^-AH1c>Oj=C{%V~?6$qJv7MahPpHnkrx}ag?CI)XIJLBxy`-wDI=wS=( zcd|0Z+!>8ms7Zc7bnZqLi}d7$49GT(@6>I8WGQ79DEfeLWCQY<8g7hyvq`X#P*cOs zfb!L!mA#_uVe1B>4>?`9=n*hpuE=)$maxLlGom^WNZ+n9NkXCDT_(r5UpT(DyrOEU z#ooAwlQOG3c3)W7(MnUAm}&=pOy9kUa(wiKM(6!z%wXz9*XDRmS2Qos7qafrhLN${nmXh5?Rwknni@o1MPJ4`dm^4xU^Fs; zAfF-i#kVCjBUK{FdhE=nqf0CdJt0mza9F*9?oW6DLs^9{vZC>T-8Z_UXq(NwX@lu2 zP2|s}94>a$o>c2gr|lsFTV~z2=S3wYoA3E`JN*SR`JBzR2eBI8O?|Ad=fr3AC8vZ< zGZvg$;3fRw)O0x|OJ3(UK^Bfmrj*I+_*K8U{dQB)&}*epuvCkNCOSGsPFb1jAuH-d zwLju2DaFZC1^rn(_zI`J@-TtA;zh?>KNZhC|Aj?A=Pa{Jdqc|bZRY$$R{{3J%+)7@ zOlRY+&#Q8eGw)P@YQEyN79w58@ort*sqNSk!1Gg9{ocx#M}naH>Dl%MQ)mF!V@bq5 zOck;hsOGLN`(Lus(9%k~rr;U-9$0DD81~I3(O;fX$73SGeqB0N%6-!#=fxz-!G3wK zY7BzI$B*r~qd^+mVbf$BkIsWRCO)6f?1Rp<;+RG_+1t-P){)->xLH4%CE#YagS9lc zTN-#+UYf%>PV!QI`Z9AkUvfi!7cI8-q;-%Jcz=-Fry12VH65|yv}aP=(GSs4E^u7> z?%i(ez)Mow^(^Szbqx=)jqv-Ir{vVsi`DM1e{;wUyeAsbsS;1b+Y*`(eqcGV80sJ<&?j**Pf972UXul%*YPJMHxQ#ZCW5HTq(@v>sR5 z?D_FdOrXnT+T6I#9M13W(H%ywR^(t8KTu~w3mE7{TJK6fU(F{|Uha-PC|{3F%(`^- zO_5wUSC3l6y>^C(UJO!ql}-KeZ7SLEy;Wyhyv16t9jkhCGa2>#ED(~``Wuo+Ll$tQ?k~D#8?aZi|M=HgBsiMg&CZUA zEPjArR2NY~L4gSlE-YL_UQyBF>@#I7iO{F6mnZaPCofjTp!?&d%bTvXpRzAap~=a( z!TWazzk;OBW@p3CoqpsFYkKJEiWLi+1m4kBRB&4K$KnLOj0>F#+lqnQ9P{Q@RPV{o z7&zwso>=iR)XiE@5NqJ4(mqw&w%qAj-|Ihp0R23}495r_E>=L8fpz$F*XMqM7s6A0 z%6fkK0fUj1xY}hMB$EB@AE!_1CXIVevBVW>)lmiN!{vG zhv3EZeJrtsPcWY-RZ8z>u5Fj(C*>txG_T|E`|Dsm`bC`?Bho>j&F9h@^vh^h^5loi zW;J|bmmO<4RAaDozs<0UlXZxhhg536@jTKktm>jQ_B-b3e7?8;H9gJ9%DTfIbcZ71 z_qPi2T{pmfj`BNSppmV`aXAAr39mz*-^~d~>0jPh=+;}xvl4^!2Jk{f1@SA^@AHBD zq%x^iscc5k1q`Spyez&oPq6qby1{FwrJAKG+q=63w)(7<^!+#<-!w-xB2Sg-Sx9zb zQuf@<@v!%*&33cBh&gRXzr^_bDW^~OJ^ofyT0DJP)p`3AXuaZxF{{BHR#qrnq-kpSePNXOVY}=oNPB?bYEsjOrP3FNuzx$?-bL+P^p1mCS zaNKA=j~+~?obi5ywP~h)_0ML{?XxIYXDtX%y9LjZ!1K!OcP-qornSJ#CFic!@`-Y) zs-*=5RFqv#E3I{AJ>jsc*plFJQ15$Lu5qr@l7^6jfBn+19?z0jP(aQo!9s-fKKqGq zcYjzb@bY*$G&oo`>+EhMo4O;ow5|2TM@=2#HX)K0f`IX>NIq$8PBPv;qPts?t?SX% zsq@a7%y*v>{k32(IA(|TC8*}UUYEttdm~IsOAC})t%5!UYlh z@#!#rbpGzrz zQvA!k34*Y&Fe*}X6w1&qyp9vAj+oYgH}jvFhha*(A1$aO zQuYFSmsU~v1lEyYB$X8hn3mO?htaa%X-BtpLsZ*It0E#L2rK=3VVK>gH!;vK@Q9_; zjQDJZ4B$zdH=~(*ms{Mz#;kFk9&S__G-L2tW9xJNU`s~wnfP57Ii8;M@QVTA&43}A%6cq=RtticQ4%HKwu>0iLpd&TV@Q39 z&#E8!_jm~BaodOnLW?D-vZWzw34+AYod{ zbZT>So1C&2THH##cT#jhF(p}azlwv!-ROzvi^QT1tvQsO54#?@cu1mV`*0YUb zU}xs3ssDwouCL+nXr!;fq7WS;CGV1u!0XBW*XyY1pKYY2L<3$%U00VPItE!990Uze zxYA*8{a&iQFgwM?<|kRDcIU~Ml8*N8#VRYtD{9tfUM8Y z2grdb0hnC?q7Y!vi~uKM2uwZl;iOF!RCq2+j!pke_V4K$`|t0L%vma>-q*7_ah)DR zv}uT$V|2S?ne^Psii4H*^EFhMh`^BE0k^8Y@4J5o2o5P=%Aq4W*x+Bz&Zo!A36dwB zX>PDJK~IM!VFe847u!SOqhI)(bATmpItM*uf_NbzDO#yhi_ffG#qq2S;gMhi7+2z5 z2HmRn7Ft4LBGsSyT6T0&ehMi1>L*uFTaM zF#kRJ?IP(rlPF{Oq=d~Vk&)#| z=rI9#k8k-sj3nY?pjbu4=FP(tcM4z`m^Sj#fER6E`+^8bfQrIpy}_>E7zx1Uk!PE_ zH3V|E8G{$zc6HP+Q8Ufdyk8LGeYcZ#cIVHcS5M<>@;NE#EeGLts)5t)7~fi6US4ot z3_(NCOW-T$AW2dBR(B(zZ_^^axQ@adFdv`*A3{fnnpeRD1e!wGc$pEjY#}ch2n1C6 zOHIx;(9>Ma{K_4DHGsXG**95PpLbexo9_*Oee zgZ_mIzTN-0!UmfO>%T|z-jC;lr_}Mn(LEa+zn+o>W`s`Llcow~3oDqwJ*-z+J!FhQ zwdoHWRVjlTNlzQt75z6h3y+b}(d`WTnvH&vmtnBQhI>NsB7b$O@3!f4{S(VIOF2FM zXpsfpnr$s!?2It7v)c?OGeQ~qpZ5tr95p1Tq!3+D_HWlc3kE&=|4WmA35X-+;nWa* zx*`P>5?D5CR+P^6cG9+$K!w(W*75u6Lq-OM_01S|-giDv*Yos^4$y;bDdEPAduwxaQk~3Ew(bzB?KKfb)ZA-mu59X~kMMjokkXy12ObpW_VHD}fXb zxCBxG*HAEFw}IDQG}}+hZWB{&Ud~z&tE>H~_Lt`e5a2i51(70plyZa@%M_pPuW`^L z?j3gzadynM`r~Y;OX4=tLCNzwYQ?bB0fSYdro3YKA3eO;cj`88soFu5^&g&f}~`QtMr|;A>i}qc=c5Rxt{D*CS_NpEMvi06QiAbT1Ivvr)D@i)Ms# znE~QxR?v$dH1OIDP-t|U*S!Y=zcKv*1#;>J+~PNT0ysE0Ep2ULO^G*#o{Lr>;jw~| z0D}Vv{~F4}pi(w3BSfuh?+7sG&F6ZydP9kZ>_EA($musDft14;Ktk) z!e=**oj=S6#nbJRsJl@NI(m0#kL%Uo6x2^ssCfEw?#6mf4AESS_)_8~A)<&Li3V$B zB-mHsBy@D4Yktm@!2WqarC~KyApI`G4sjiL*uN+TT$_+1FDUy{K?<|ZuR05Q@w~&2 zLC=?vS05b}1o|ZRpT4o1kwZpC*8OS>&V^lz&nU9>kQrSgs5#y57hK909H4l5^_Mrmu7%0gN+DV;7CSPgb)Jl)NzepqMX_P z&z%(6J1m>uWb)X5oY>>R^`clu_;IX4$Hf&gJd6zTdj65cL{eg6>^e7bHo#oi0P=5|;J zj*UevQA(EtMFLPDmX{4dZMKxaq=8&IQd)SW*$ zekz1{Z4cR-y2SaX*ZkLdze4K8o)-S6=~eztlX{&VlucRwmI1xa|T_5e3KaCkjg zyQT*l0u6d1ft`V9IE&o4((FRLm*bZ+MPI6tZ9b@J^l+WF_hc>M($dm$w9qn*xh#pe z>c?InjDmt9;Csa|@ac6S2qREgekU#eQVD-Hx^~s=tIAm!jl`Ip5uJ5c+DqUHW=%_l zmkVagC)=TsZbtJ+@FC4BL*I5$>^bK$cNsCvj>$CtGtD@#%7vhK#>K^b4{kbLrN_nAam5ML1>#}^#QgbTA??Q3 zLY}7I^!4hu-&#xp{K5xlc@-a@7A#W`dN}}U`T5oCEfVZwmPY%S^=viEOgeZKS#;_Tqkl_R=#h&m&sl%Tdy|cPp+VtpD6cKGFN>nh!Bd zvZ&MsJjtG#mR8o8GN7+OCJLXmtNt19S*1;)UCBDGf&b0>vHfyo2olIFzkBB_* zmeR8g2FMllRwHF5UC++MxTW)FDvQVH)}zfK52r!FAc9N*jAVitnnB3g3F?fRwiCgg zeE|PS{;3_Hq3iF`>AJh1&sH2CKd7*w2PfFq7wUvRkqSrxppVlj{BBYlXiMkbB8KmO z!tq!}s{r1}$*Vs9?YQWJgLbX4GCyhm-sL~w^>DKXSV$nukhpi9_jkE&51N6ON8Yy> zB85Z(!80=qWlehCgV$+UTtnkmEq3z560>`Lp*?YH38j1X-Q^zFUOD}_mX5lf`iF_b zjc}40o29vGOBBP+msH@^BI0@Isb1R0DyTJdO&}C1Zq~-iXfa z&%_&QgSX>)0S~|O0t0})(9(hs=SgM$itJ1=HJ%g0BMf4KbE)TOSa8woliHbbLm z1hR{0+5|k02%FYCNrGCQegBDHDji3mu6`AjM0}nsh3v%ATQYG}k`KeolUjJ0v(b|t zN4y4-0mq&s^)zpGH)DoI2e+qH#lWjGL_DOM)qHD~kGDuye`Yi3ttUz<>OYRKXAc4c zlT%dQ0aE8)fjafMPe+2_(+9pitj$~8;1b(qkNIp;{`XL6BYn9qk2a*}vfZvDa^&x+ zL-XqE69HTViJQIimI~;MwA9pqDj&}SRocJuSaOVt1rF%F8AT6@EG*F1#{pl8C5@&286=QW z=d}i)H?rmiwjO!EdkAbd&`|c$q>OG~4CoHywUA)-z=>05DO3ngRf(P2hF=`4RFeDk_5{>j29C+>6;3 zaov_nOiD_iiCS#P?FAaA`e94gd^`shZlaK%%{AH`b6M0i7QT?M+;G7=J`P9wzRUk{B2)* z?mFYP^`0NFJ5(X?*&|}c-XBbV*i3R0B2G5iTI6JNMGQwr!wMv4rvSoez`DV_LCkvN6c`BCfzMEIam6UI5h?om3I-?a zU0&|hIV_d}9pHSSFrMnCi_bj?gF7QW?oBP<>K{XWjmHM6I+*83gEEU!m41=TvG9`e zcP_}oPEG$XyxaOZw7U^_4fHuU*VA$7d@=;X^xL8uF72OIjW~D>+%PqcNYViOHl52V z_tNPPG(&*xSY{*0+20^giGaynQ`OMG25>p1fN<#;?$rlfmxGhfu7X1AP!YgQQ z<(>ogf57gfdh1$QLBV`Rn!xOvE|N@P4lTvd4lw=Im`{=xLJM#q5U7V1JAfiPy#Xc9`I|Qf!5pjn%`;e)rZxYN zHx>it-+n)1MjNJDuKI8Blqj{ab-THIU35s`jYMw+Z;;AIBV)=b2(FSLoh}~hvf@k4 z@DOid0Rfn2m|8!%)XoTDf_TG+CI$lxKo z$E-Ua^VNGnQmnv;$kE8dJ>It0ZDZjBTTzqUz`ef}9JWr$vS>4VX2!kekL@#;-*%Rd zZj^N|x92DQR0SV-QC4CP3nNiDX71KR7LSn0y1B@&x9S-I6H@?qWzZ4!e|maeX-VE9i$n=v#@;G=}o>hWEy?NVxy0kG4rAq=LzcAo-o%keu^XRMZCypaT}m#n|Vr zSihc!?$QF-R@nvzdMQ`8*U!8KGWU**1D zY68@~w6m(r|D$LBeYF(q{GnPL3-f+kIk5MM*^<}VVS8fDZVA;5pTwqtO z+H1cH8ZH-&yP+g`w^k z5;$%h8XTXW1-;w^(X*&3oy|Dh+_pk;gLm}}i8iO-P4S-1t5MYn|6%H?u?1t=`t$j! zR=)90vP>7Nm^Rw~R{HMMhad8L>m44Gbi53;ht;MW-or_?=89*%E++i59;31Yd&f~7 zg@=HW4UWQL-x;E}mPP*=mAY0IQL|P3Q|R2MKe?<7>kHrebpe@0Kqbx4CT-q|{2g0x z=D?IA42G{F6I7pMCK@ z{#N{LH~iSTt;4EEPT%#4XIsr9>-qfdiN5Oal$U``bpOb*Y($dleEJ>XhMkLk!em9o z#W_8>rn>QY%=}NC`O~zk<^SykAjEv+TaWjLEf;^xw}68Bn2$Lje2F?Ca+8JS;;?zM zW>d7kep@<-`^4=j8`Jl_x6_X*JxQ~c45S|g!gf%)oF6w;9+FNP1J>^7_qPU>_@ftD zvzG_R{!eiVPIE5Rm;1%Y7EhILS#s*QprfkpS?uqLkdj@6@~{WF;lJskl+Vn5-I=kfv*zXyM1~n56P2q#nGKjUJF1?$1~C-WBi8 z+GWf4)I7?@EmQ?%)LL0vn@`xkJ=alzU~D{v5Hq};N6I$OE9~N`?ZTWt@j=?pu%=|@ zO3KP2#g4(fn@{zAcFI@#vZF}gW>q{K)M~g`zoYxz@{MxlH=u&ccV|CY^?f>CD*K$; zPZU3X;g$MXDX9WdS%1AZW(X-J<|J*sEj6(bSkyau_5k_}&uvd;@XXAwD&5x5k}-oU zZSq$yyH|knU0;}@PG;75ZpZ&Pp(x&@%Q{n|88KVgNzKKjIlk7wFZ9BJ$e3xPdTz(JI%7LnE0xUo0iJ z_|o6?CtS)f(0pqX$PsKV=Ppx${3^*=S=|sw1&7z%sHW&dXL2t+jasd-(Q@61m{NQf zZQkCglE0)dtHBxr6Ct?aTrv)q?+5qv2h~g(Y;Ca< zF(?8x^_W2uKCE}Y1@Pc$k$^ygh_ny*_t4M5Z2$ica^eL4j=;JDB|!53`S7Y0Tt`Wh z2Uu@R$^ZKU_9PHA5GkRJz;&4a_lN(6r&3LzlIBpp{8+ulJ%-YWMhX3-dgm_+TC9Ld zPf3cd_y?Kt8Oznx6>(=rzQi^$B|EO>5Q;Ed!qfAwEy4uo+{1)Q zqvGOd+1NfUEa+n6;K(T{#e#l;%(&j(-u)LGZ0yMR_T zJN>C_yk@}E1K(V=dy85M)-`)5xyFC=%AwT`eo8}-<`Vd|D_)S~1Dm{{U#{A!urAWx z{lMnd*1r*WqKQfrIH~d}6Q`Ezocj9uL^sD1Pibj6U?`!lX$2aVc&*#fPql)4)#8tK zON=;#DKO^`fw~98JjLhQ9(!VMx<3xC-4TJ-twld4TW7P2> z;GS%NPNAPOwAi3+zauBb?((0aw#zjypX2u9N_0maSPv_mEG9pld#zvrxh!;Z!}?h| z;+|fNiqX*@3&Ia^U8gUz9BcfG-&uJyqP8msc-ZVO!)l+O_# zRj&8CeJR8uR8RiF^`xDm02Sdt_`R#~4%wUnuLmf}|>t?53IPfOaJ0Xd`48DAH zhqVFxfF_?Qy|yhUj_q#lSl$DRWY=RgP3D-#HuqOoS~~9CB!4Ya$vhVOIagCj$;;phk=5=b+J8F zoe@q(!euH_xN;&eG-sm#q?^*$$R)Kd7*F}>Ch7Pa5z&jAZvUW(Cv_2LgJhI+ZV zpIQ9n?iC6a>A&8e7uy$CpPv8Wq;l@dkPz;Gz?ce{k5ry5CxCXM>Dm&7B$FbP)OF|p z3+`++@Ns3tm)mroPA#aV321rg18uEqTi%x+(Gcwd3gOIQJO2s>e6X}b?=0!JobEP- z!`;pesH8I+^e7I^~Dx!PxD2kQ_sA2bJE3;`f8sM zh?i??=(k z^@gQmW)p?a_V)HLR%cQ`XSUk#Bmw1z(_;J^@IioTpV_ryWP^BJU|kb&Q@4-ye*72m zXRbHCuh9=!ye&-03YC}lBZNyiuuTyGBvyj%>2h)oF2tiHhg@c$)ZZ zy<*k$LD4jY!$qJ~`bSwB=WG^vE4ooYoewGVC|55qjTeW1^eUfqbJPOamh;&@p9BTY zmvtw~X0s(l+GUoYblvg^HVi6ti|@JSzx3h?H(;2xYUfoi96y71Ibl_rMuIYDLloTd z@Vy@yRsd^AyVF6=UEe>ZUZzASxw-m8C}|3GRhrjMq*$oeH7iGFGlBWsA$mmpO9uyk za8DF9_5Y}=jFmZ}*II9s8nyLkP58(*NX^pD-oyEoSTx}JCpdlf@S{(~?4bhP8&hI2 zMF2$lb2Bg3a@4J_&lj8VMH8*a9CI(Jaqi)r^9!#g#|9*+y3n0Er#9@<9@j_IPkr=G zi6y`8x4TCsz9r2?|&;)K`!z5-G&WclDB&RJ8aRdi;_FGFFQw?HQw9N1eT_&F~&qJu*y1ZPxkbX@_$z^a61frV0(O~>|l9s@F^bFLg&UVwGcBF2g^@4fn-zkqswteBf14GJ6zF0SZ_i(`Yv>Ydp=7uYWVCxP?x^l}$8H|jtJ-tSGrRK@&WiI#AJ^8t#;!E1Ip`OU1KEL`n?4&Bx)gVFA^bOrF_@7n z48$&&4LM)0V8KY~@7_Y2*>Kf!Fd9VUcZHbl-qc<{wQE|o;bFy~8c)|&8IIiN%^3^? zCYy->rv6UVq_WEWM>8|~#ir4#AJ~xV$vIe9zr=^z8LRd?#*LK>wyD4c}i9G|fKbL0X zkjCxG2>a`OAa<2dNp!zo3qvyx4reUjNQ@glImfXt-A39b=KE&7++)0#?uSvkqP@vQ z0()7$Ry9F&x6@w%5tZjq0=!&fH(Hx0B4=~G%D0}VOJY#T>j$9`=Jm`m!SLEzn!*L7 z^dr)nTUvl%@m5j_8Z6flhE0LT=*k~c)7FT3{MY;7VJp-pO^w=~-M`=DY5VGUPldMV zr^!x~)quIDxnlC^)2F+;P1wrmuOy+GA|#Gh`B(`RBWPqCdX2AWymyf!g-<^?)5o%T9M zo=vjpB3+#yXP7EI1izTU{3mBMR&O#y!Lwx-k(~TO$?l;)neo*5k;CRtVE(41KQ>A0 z?Gs^&vncp@Y4Onde<(|gmzlks;CjD0R7?fuF&H+$fCuZ~O_6qzrRo9IIXf?z`-B|a#Iyn(^hL7$S zi^59(htyJE;^U>DSJ5sa{2&%gU^}XHyBO%}Sf0I1xhJ10SjC!3S<(2*sTxQWEa0_Jo{$bqdJM|KcGg#+Xs}&*qK!E5Q7~z!sBRB(uKg>f zg1Hu$1pO*!JZ{rjo?g4>zWE^vM>67#ma6Z;yc|AiVq)TN^jh)G)2^uCa2d6l8gtgI zzvBQ!XQ_H;>g$Ln{qn#(uwmZT8nvy~f@<@4bF2yf-J9kAucwfie$EDrfwC_cZ z&;|u_l%C`PeNf}>9Mx%kP6{Y_2leHx_^X)fy(h4e%$an`LPRLwJmK$gNjw7Gd=J3p zS2tW3zA)h21Jsipn1I#8Q629j1mOy=D&Pc${+Z^&;cZRe0d0q(06*!ijTdO(ut?_< ztm}Bqgc=(C&|P6r!D}=7A#v`e^)z|Z>1lnfMBSy?{^ym(K*wr&ExssrqrZK5&MeR} z+!6`l@P~4S{o4D+pnd8k71a;qphvvoY|Pvsr}EkxX9T>2p*xO>O5E9z3{0;ODE6?$ zkjSVb_-CQ?Kx~Up)I^$}w*o=ni;CF@&h{}Ad#|M|j-d5xGDwv)d48>H>(6K#wp-O(N`9s^BPIa94<9ZaX2E2_1r3od;FgRweK z)a?7&dg&`i*hO?wX#{_KM37{BC3ouE{t>o;?STm9!Nk}OedX3VKutfo;s@M!IPcwH zmNX#@vwCi03m}QyTwkqCRdd7F6=Y0wmu1}~#WNZXqOY(|e4|%J%Zf>-6FB~7!1;ds z8;nbRh&hZCza@u~aA(6Kkgrp(-Lvbhh|_xmhfuQnHZO3ps;1{q>$$?H8%Qg^Y$~I} zgXIk1bch#Pm%@yOzAHkz-1qvvIyN-qAiTDbyMJ>%Shl@9wZ#()tV_csCzrRfVupnZ zEuLBY>7@|pR!gDWZF_$^St24Mn|w3G6${)j$A9lMe8Z-}#W+QO-mqmW?F>*0GVD&L z*B9g&ZM=AB%4M3a@R$f?d!64WUTbr;o`0o2<3ja&W60<*QXUR_G)FCs-%|L{P5Vz- znT&Le5oKdc+tKs0_?9LX0)ZiPxk?2Rz0~y2kN#$}PL-=;rL-NAk`cFvZ}zZSyD-OLtuovQa1kgO#PQGJdgcvvtgE& zDiy_`>ADo<7rh1EOJSEG*coMw&i=xCT;16k7p*!(>dUrvjW5I7N%f7L=mP+~R3 zH(qYdVsa)txuPtb^>T&TPih{WfGO4c=GtSwgO<~L=rcTx{k87S(*V?{ms@GkA$47v zqmc4BQ(paJ`ynUTmXP~IEJ!y#!rwp5hDZHjFF9QcXZNZG;_*2>b!m8|_yzzK^sM@9 zGu48(@XWw}hh~C8={fliy-UFq>DR9*sHmvMO}n?8GIGrik0wPZKEOw(-`{uiTH7?< zcyXAwoMhjM37l%6>wuMeRbdc5JTSRlT&Xfe4|<8IUN(I^YI&5n zi~bAl5YsQ+ETJ$2DJdyIlkKc;=ai-9;9zvKbE}jwEHQvtp5|#%JIu>0&nqcp{v8eNNuVP?<=uEPQZs9_IwC^7FKIO~eIWhPW5n=n+^(-S9|FJ3>Oz;je zH`sNqKQP>_PY}Lp_9)av;*vf1hG}b6ew|T3RAqe_yIR`C~L-8l|TuL9$vZQPO z5rzz#3oflF33fnX_tGC@4$31MUS8gKv-rqundsmurnuUdb{nZB2;Tr$9hoG)DE_lBtF7}B^9;c`m(K!%^~jZ6Iq6_4Pz4@+KHeWw3sk(`a^F^#IU+iBWAyr}Y*pUhDHRICC zlCbGFOAdl=_F77c&&(}`Il^DDxVRWLJV8IKr@-=cBfplE)H~gs^IM*<e7gs^2tG6pg8y zM+m>YumOeDsXxge473kkiO{u5788+Bp{i{o9?<&?zuppO(vU3~xly=M8@OZVK7;J{ zsP(=r4fwX8Bj~mG)xj%ga6l(?yAk55p``hgPOQ|0hWe@)4%_R7hUHl))_Ez36@C*?~!ubjZd>w*}TR| z&g5e{dpanEgyu@*^3WrWJLp^f6>kwrVo-hxDRZ)-)Y4oXVwXM0Y$HA!%*_0s@7-N; z&F&`A>Xq=|k$HTpLAapPz%TGBymEV8eP^JD6$2FZ(IXCd=gJ=sL>D6%P7W*qe%hR_ zg(HMcB^M92=&PoYHW-sStSN!O2JIe*YlRyQt9{5?qc=7r@!7>TbE3d|D4JGY%6LHy z52YeP?gkT0U|`_cO7tYYUv~ocf&(8wYy3u0m(bD4#h1Y&6PZma==KeM4HpANQdTxg zDND*UzV(kUgww_7fb;-$fInkl#YZ?36XjOu2LUq&2bmU~)g$M zlp~NwPzFn#w#E;tFeyKM>ucft)(1Wuu_y)=I^}E(gkKP<*)ZeT_-rwhK{^F?MtF1Z zi|Me%3>9i6py4y%sSDK~Cft-~n;}iwG+{REWH`iS2e#wwXcmT4^@ByRx*r%no*Y zIH6!)@ql-iuTdTbo)|W$xuNcZie||dTSym-5c%4*@c^78mkdER2?A{f_e_RnrQJ6c z9ie!yvwGf}8`|u)z`=d*g}_c^fZ*|D2jS?2)-zg{^)$xJD_0#1Gw>Mrd~^pC^T*qQ zN6_9Z!Je59g%({9uQfs35;zT8@w)n`^=rzLP2*`bf24M06rW(47k?_iV5Mf{7&(dIiv)7~d6!Y&Q|= zc=$lB3maPm=z%ft2l^op0x=%IgDlP{RiP42VP!o&B*$|9YNGNkAVM>1vfa49eN zbs`iZ@NI(lhz0Lr32?S0;AG%P1~e&NvD)c9_*Hs=Ws_D{AJ^G70e~GAcBmKB#;x$# zfTS|xbrFgXFl7f3uq4=L?t_o10Z6o@Bw6@2E04!5)`s&4;bkBSS$IoO0f_>8-SPKt zI-DDp(=~DH!+8+GkZv%(1AR2&jel390w1fH%%I`FpLznj4YxVX20o!+K0=_-m3^OZ zXc3Pa40nU@=tVU(AN%VmRN5IKd?D}RElaDpQo&+uii!SD!N0kEqe zrbeJI2%WEHh;GQjf_oMC5Og#`IQzl8Ma1VohtK%da3o(1igjNFy5@{pY62>3d{?BCwgW8CqT8b%?o5P`j&1=CIrAUt4k z`2;{2fRYGVo|xV69)c(b;8?dcgcwe4R&`(4n2=XtsX@Vlz{0>v2BQ_&Pr!keQ_IBI|v>m z6~IH9j{l;!wJkNK`fEI~Bfoun zB`3!P1B9isl@ybM<@V4IO>?^7mvLAh3WRQ>#JKwrpu*5tLca)-*O})8@{O68V-x4@ zMQ#610qh||LrRE-3w|@A^eHxwfaL&RO7`5|qSB9nC;+eF2S6r`NCS{r{ibe9MT|rk ztcLBnhzVKQ`+A$re{3Lq`4$EcKVL^Kdq2^dEh`Lap74GX_6+Ru;J5J`V7bZI(1Y+D zNlbE?KH8hxp$$>dd!T|MOwK>q380tQiE3cRd+;8!@| zv%GW5i{TAjcv~bq(04&Az^zr>brU4=C%b|jdNU0QEihm}R|ZA`_*j*crRVkxp~HjR zhiAX)9}f8;iWuL#3#LPUV|OB3xHu_ArBs)(kY)k!_>k?(02RX-1cxh zJ$r-c3HA>=F!XSEUkkV$R=}_s;WXNsC^y+(l&rZrov3wZ22CSrb`*d|VfWi`hO&%r` z;KcJ7SXR(?xDpEbcKVN4{nJ*iNLtq%269y_5XOK4_2+S%W)I=%XbFyiRyK}jPY`_4 zz=dbN`SAvP@czKYegWPq7u5g0COFOe(oSGF7G7iD_8BWBzDPbrsOE4W7_86mm?xBL zdT9jC+(elGqi}zfkRo-3+yAdMCM1Khv9a}=%)#8e z_@)I;E=y~`n(44L9tuY=VwpD zF#8$8c-KPM_7&8_6d_M&X<>1~uGjsA@+EMGcYI%*A6AA!NibNT;S6pskvMiE7}Z0s z0x8}Fc;IA$tq>l3yNfMPv*BEPg5W3!Aj825Kv-`Pk&qyp(L!thq{*1W8AFkj2D_AB z4=?2>3Sq+S|8qdb-q5r*eV?8olD4)j$rnWe)dYZ$G?_6wzekp9RbgaUNk=ZDH!!>U zOkOu5GUax3V-rWL66X&(Hy)1{RkhD$mCu>*M3DymUQPPOndvT~(hV-UxSf+5*Th&oip@!S z>!$5^u>?)aSCemYgp0;-xeBt@rJ~+om&Mv zTo|41%<~r^i{jULYN@{+_74WN@7bPxIq7RTtNz0qa5mqVRr`N)K=WU*R>{Hxpe_e5 z36!5mz$IT94X3p&oJmk8gLu{`#C}O^h+1;MCmSf!i)9!|+}_OUy^}nMyZ>dbm*P9B zygP}%*%$owCrv3n!kgi8y@w{($;_1UX|BK*F$)v^R!mH%^SEvyL>znY*nnQCR&9)_ z<8_2@)EPxfOB>J?;(*aaK|_O5JtfEUn1-J}AziWq<1uHfyzp5p6!lQg;BEPILoUvq zOCKjDtN?HT3y^*MGke#w&QyQDuSDW|gl6cow(_r!68`#PO6)E56sgvjuywF?G*2v4 z=CvkS_D=TvY@u5HG7?685yMuuq`|`!ChEgKO(yR|!C%#zn?B$y=bejJ8}!uVq4e>y zr6YnOC9XmyF&)WPkJly({h=5-0$*<|_VJ<~GU`!~h9YpQLv$_D)Z7qv`^N{%p1!%c zaOFrhR|pt@A`%jUAr!31|LAFR8wYFy%Uwy*SyJ!Vy{83$EQbh%hPe<*oO`KsXmbi* zV6$^O+V0K-&alaUhnRI1i=Car<+8YKb>ie0{XFPf?)MOjGn5yCpF7u|tQ{GO>u~#< zyc2B8@6jFTeJNxI{?sG+_BQhRL(foc@h?6ZTm;)k?Rv1Ng9|qZFS+kFB6Er@L@b4~*B!aA z>Poa?1@Q#yDn2tj<>Vr&658fI|owOsDm)gno+m)g(T;Gi_SG`;J z=ia=V`c~>0!KNA!uQ`oC-TeKLnKFWyVd`f|K)BsHZvl;XI9Fu}Di{5;lB~(I6n@i* zLct!QcZ+AG4~XS})jB`kkWlJR=d3w@B%p2W(5{%$>#Vf`5|#;cJwkF zu;MB#m%Whu(vd*BP*P>8JZJ1c^(y~abSfDjX~x9{`VUQlsTpJaf`Ygg|D>Dyjo`A2 zYHF;Hi%zvy6<8fFZAvIV=`==Rr{88EyZXbNm%!rep|ZLx{y*1}+#sj6*BQRo>6`?J z!}PrO>xBnmJN1hJp$2CJl+yzR7VpAHg z{uYcjf?dE2s9J1y7lwY##-&=jB;Qb@L!R)``1OZM;93Mz<6!lr>ASxrJB>D&Hpr|} zzQ2kLA7xKQCpm5Fx?!U{E@xLr)d=jjy;?541C9DaU|Lw408gIvU?6y$RT^rvobSZyW_2a-HGRMVi ztJC483N>8o;NJ9?m}>KD2oIBMab~pLP$^d$(Av-Z>g8X*`}#dS8-3RrR{;MCX6Cs2 z^Y8C!$O``ce)1ia3UgM*7j-?nnH6*T%Iwx#S(G)P96F>xl|Mvil3RmDHbRu5G*Hg^P<%)$n>bKoz4;a3@@iV`#?9{C>%qw>pojgw-n17} zS!2IpK#?fhR%y4);#lZpFi6Y^6 zkbi%;r>OY5lEHtVEemTCE6~PdFbI19Mx{recWNvsit5gxqVg6Ad`P|4UkY!46wF#j zqug09eEl&poNW zjZQ5Hx`_<4an~DJG&Ff`vZk1%>;sh*mP*f&t!BP?SDUq$HG}K#h0HG~mA$UN5LsXt z)Op5VY=rAN#i)G?Wb7_dt41$i93hZiA=W}W!aJGzqq5mK)<#Gwv=SVaGPo9mB~UW2 z_@?_77SFP<+(LK)YuVbt?QrIbk8B7f+zg04+=jrqnQw zfTVyY9E`!qf^NIuCQmne18(g$MUcM^ zm2EMzwHtEB$TQb#nmgiT91MZO#Mn;O?&Fx>2tHTS5TkZc-!IuVF1F0$*;V)DXPwgx zv>L*9FN}jL3he=XB9is z?vS@b3Vvc*=!Ri=Nwb7e4{z%P@rU^4*aZxp!=hP>g6<~> zmvEUSF?3S3-|JVVLUCh@7o?{x_xPa7NF~cOi_5kYDvO)cWv12-!sYzAiDx;S$sx%Izb*;2Oci*h10>pQCvnP(*n4y_*i z{=Hsj7zxIa;eEflnc0K)kJy5GVx%?68pzi79 zgPLmFTO%=~PwUk}eiAP)8M6#HTX{c{sf>ScBr%KW>iTnz?k$L->SObH2_B>vll- zldHc#-d8Yb4gFC=3knWyTG)H#``#jP~)JH6*2r79UI$@lLr4xi-}KLAS%G7YT+y0FG;ZnTghw|BO*5nu#XF_yr<=DhjOLh*5Gc1`6Ef zrYb5?Qz5DQ$-?(js;)iH)XMH-r5}n({~OGhVZWe{I@maUw_~#7*^8d9iRW@|xK|SJQrfIq{d}b?EKI zqIZv4?o&1|$y9ma|G&q_|K(5k|5_5D(?OUO{(tNb&BBplUq$ZO@^Z+6vp2A5jsoW% z4hD*C^^~7Km5|pZ4`}l(8%IE-QujA6sfYr_`OmU!uqt-b$^Fn;c2Kp<^31i;6qNmJ zvs<$#7iusnjL%L|yY+*CE8$sHGGY>LKD^GM9gZ`Ldr38Pzo31%U@Ii5Uh-pVRb5L=M8QT3Q& zuNQqa+YBxwTOH2hMkHWEu28?O3j?r`nbFKm(8D8x5|pOA(qm|7oIL0SBN>HsLwc}Q zB3+#9axYQtg&d0+N>jY+HWL_yKZ;KQwn@C$!TTHq9a z3<_m*IF4p8pxN%-2M=^)sPJ_=uDn3UOKjoBhU#toi837^pD6*;CqvsmSe6B`j{F1I zBtRO1S5&dTPc+C`tjYuv)rW+H0Wf2x-?6XMbXcE^gJByI1W_jOIsZWr;%I=z!DJt1 zB7njom|C$>wVyVW&3Ca^b93!Zcl8LE)e-s?;$w#2QLKvafPnH1ryEG8V?Xt7L-Zqz zza#IW6O@1gYx?}%`JTfvi)sTX z2>FGRizOM{dFx+}8*l5*&n>1sSKgbC=C&Aw3pK(vMFiQ5oVC|(NQKtp-}oHYVXd9% z{zVZLYwPr#IQ zN94D;3OtGMJ$)gut_rNE;CWkk8Qm%y4^Jqx!;Am+7U1WBDlERI-}0~0fEH-+2LP-? z&;inO^EWVZ5;{MnQlISm`lO)xYzLRNqm0BsdiNdTQA!mmM=4QMW;-DRD**CfbBoa!tNA=g|8)iETK~apn z4!aakf9maD?AU{(21cfnX=ic{6R&O-jq+U(Hj8!VM0r!^8&Ms^6i;EG5eIoYreS782rtp_sE$Or;IZGz8UnQl@VaOP+4|~_W^Q(G=Q6P1-P>~xwB&E&#d{?6GIQA+em%8r!2qXRzS)y&{$H?D7AI92;9u-ZL<1pP$UIFt|FWUeDd`UK|B7-5|u$~Tx- z^g>=Yd=oV%*H3{Ps(`>*-U-?PT9nIApI*)D8z8W2^yS_h&uS-HmGA&jN+2m4!5Je1 z&lyYIq0*u2#kk|fe^uGhR5@hUm6{)!gIgUe3PV4XW55p7Uu3Ow3)#$wg;`Vt+fNj- zPvYFSiKQrT8di>Wd-$zOou>G>tj_}xaWxQLf(Sf=rZ2E}r;XDAG$w#hZ(y3=Xev3v zN#)ZA=iWV(dwxxm!gfy~z?K}5dM_)>ioFa1b6)3b(yD|39() z2o5ZSSkNB;%23!55u}+aQ@%!h@;e>(XC+JuHL7e#*E=`Ke*j<8;)w+zUK*kD)j+0A zzFMt6SUv0k`nLP1HH3@#D4 z`veOXs<@M!(_w^`5Clr($LTCMwGF@#=yX$+Acjr=UJSFLRrR`aHyTf?olY2lHzzq? zq5`fdXhBm&mi;my>=IfI1chZM(n3#<k!&1^laxZ2GqDBXD-Z6W6q^$0Pcegb7Z@B2@Bo-4i`5Hw4y0zai(+h4A!iy! zmx_3P5J>@UMg=@@xHbaF|66^}rS{WHN;oJX-T+3_;4MS~2ounZY_tBixe<;5(7poQ zGQY3@O)^|i01_!|W4f%LXLe|Xgvg*pdP#=|p-{^zTZ~X0%-glRI{vfJ!s-Bg=aMCy zLtj&763zKuJvxZbRx_={y(wal`o#&f=dUj|xjV_-UWpwJw!|nFDn=6{&kpMfdZS7C zo!_H!Av5}VZyZzkqp8xV@WCYJ<{z)6A$RkCN!7O7nN5lIw4Rmdl&^d~K&hl4 zgPU1(F`vl~2YkG71lR3{eK*={Y|PMm$g6;xRV{%etdA&w!K3u>U zxNnWV3eJa_cREHxw@(%h#Lju0`I2gm$2SmJEI08c^x01E?tS7CFe)D82+rXRO6JNa&w8q7k4h5r=XJe z*Go5x*dZ3rlx_n9PySmAhh4(F;YVBlX!dJoMvo-8Zhl21jF-`JG0P?2XwC=WvxJHH zch@>d2Ww7V><#{iy3ARo_dcwdmS9$uYC@+NZBLL7e!v=qPIGRdCR? zC_Yfop`p>CNkz`TjC>-7hx})Ifr{Z8&pqSb0N$%F1gv;IU%al$F0U&l<3&XNe85@0 za(iafx!E<@<*|H`G)BB#dBMESZQA}_F&wV7;BjH~i(=G<37XE6|B@%?a#FnKftlxV z-N%y`yyAqhufa-KQab_qsLqX@r@DoEn17K0@*XmtFq_I+X=Kf^9 z+OjCG$q_T=l&0zN4#B#@-9AUH{5>xf;ONYt5FBAi*W{*&@9wSHr=nB~Enr#5w zm4Ee$NAkHvsmGWSoG_v-8_?+xzYGv;jF%UpVPXoQW~mS9UE$A3)sewvk$lKKxz7#ljJ z7r-r>JoCqYLQA`1og?w}soTkRH=q*=Do5nbPMA#<6|HYLKB&BPCrDI9aN_BPeGpBbMFteuJFaCJ+Pzq_wJh%(7nUcd>xCxKB4JK z|AlrZW=s_Bs{xJ7etn1@%2OF=un~bl5Go3lsl6)PD|PFoeQs{D(Vb8J7ib(%7fWA0EPLzFS*k^&Zw5rn*uBN`)3C0Mf;d$Iz7QfQ`D@DdgW7|>w3n~M z#la4@OA?l0&d{6`uOP_4jl^c#7v zUJBP1*>4P98VFStuHe%&X(qVB^#z;fj)cxowgEYC7j4?_a1{pkvc|^7K2kBs$zg+Q zoC~pWac0vS4t#qTSIhQk?&~83=pq1gKr;q~2|8iSY`U0~jUH4Wh=gZ$AZ=*m65GLU zN-W^=lfD`9)DSRBiIMb^Cr?&^D1zP4>&guxqhEl16|ADV;17V+3hU}6%%u@UDC7Wr z0Om{yV6OCxj5vs|R;zzkZZ-8eB*YN%ijfle91)L-GR()})Eg@{KrLaipKU+}+Eo&$ z-mwbX1-0l>$a@1mw+xzqsx=xo>kwFxYL&x}I5OEmC{=){gOCzBxC7VrP+T+%=Pb(6Zm=jHu@kdTFjn>L}&GZHvJ25^LAz;uz&G7Ykk5dJjCRsvBq zT{4me5?g&?m4nOSrJ>5vm{}*%z!T zDk{8oi}&D1-kk-cVh%AXi#CEHhu3xgDG+s8)-!eB*K> z5h4M{pe!;2G^lKmcC9MpLO>(61Po;==r!OMjfdLvOLDRt_>>UfbNd%c@V3D&WIA2L zy8+47Llg*?KfH%m(MGUX0OHe!-}B!&2-j}}BY-KWrb}T(YQv*~xETsCZirE4LHZmN z^n{x`2Er;JGl&g}%YebPOu&T@IlqXAOF*~a@BlCw_$(!8AEBUw*)F!c;1MVMt_Mr| z=7fg;ne^p4l31EBJ%MXy5Psa}x$knskJj%podZyg@ci658HLXNUeD`#2-#E^P8}Wx z5)k62=4=oNwn-dhKyke-P>Wr#h=Xef!Q6MfYqAv&C$**(i7Frl_5^uHOo9|n2p_di^;8yl$ zYs0&Qh_(c%%Y|T;dR8&*Z%OsXmY=YoNpFt`hfs4pk@>0(1~4F6jp(Uid6DrOcPZCg z?mvWOv^KnoP04k`q87}lLFTZEAdw?c$>;)%@e7|3B9 zR+BuiyMiN1Qq%kDC|ftBa!>;VCpdUXL6QPr1#o=U+0=*Ex{qG24Ry!*wYFh4QPBTD z!4@J)d~>-`R1IH`dfFNrhA)KlDi`aE4GeNXT9KGb?H~DwJZMfK4G#!G9#D7xbB=j? zgGKuE>ZA$U;&vHdy2y9MsU-eBqZ`i->9B+?z7u*hVRFL-4t&ZrJ2eM#|H}ZQ3~maU zotNK5{n4Di+xZvzHFgSHd8I9!f3(1b@Nz(?;#lX1ftP#o>Z)iwTi^kvEc?O5)ugkI zH-eOck)G-=Q%X3g!3W4@JAVhtSOI}V;E*F=^pj(^^miy%Wn$8pm#HiIU6CWK!tlX0 z!}CM4UzTHE;cQZbrxZ!(Vv_@rSqOwI!uSX%Ziyk>f&hZh3kU&)BMB6`jQ0~xP*}Wq z(>~Aj{mqYuuvA-ub!G!;lQRLO{xjE7bHw>EKpZraK1ax#DOvRo%QZKCOu*vh^YbU` z8x}~}KRT!C|IJ9wa`CX={-+sjuGu+AW8t_+0 z?n4F9U?}fhIIzr0KkSSU59}ZCNXNeXE>d&an6NRH-vS-4X6@1 z)qIg~(D@tyzPtc9HNvn98S}Pq;|IjI1K<0cQ5K$i5a1Hl#)Uo4Is5zjvq`L=ZbC$& zLr?#~d^i`P{zXBDK|&JaKlNAi>2w5{QC=A%Ib%g&*44rTw z^@V3?V$iwv&x6wU8wBy3?~Ri+sw{~a-_@Bj+ZYj{fcXwQ=C-|4&IXEjFxe}4s`p#X zXEw7$f%b7jdxDDvTsd}n^(WAfi$r`n-=Sy}CY6v08b4xgy6p0Op-{Cz)sR?r@Z-w9 zaSKFqzSzwpuJ1*4jT~C^2)2#r6j`O_T_k9EAVxTHC!6U5{UWKaQc7Jj5eyfyyUR5m=gci zVITOLsdT4Y@NjF?yVu8;{=!GA0cDnO7H^g?p;R*{B<3kZ3Wy{Aj|BAsPX4zbyXbo> zo1KKov^!%W6bib_m4zF3P108m2$sFKyLR`5ffwcR^CLFrXu&xbmbh0XVuPug z3||D)I(3)(j1Z8<1und2Ru$K7l#M2 z%)fs;a41RAX}skOYN;&d_MXVwIl;VN1)XQXTlmNtU^5njn<`Fs_^l(qe4+UJjAF@? zCn`Bw+(Y!^YQ7GQhc>y6_t9O)jlcqBzto#f!OoHQ8g8ZjSxQ zn!s!9@r*muJ6j9QY3S2;&HbLiGjCMH7nAk?=dOZH)&bZnN=)ZO!HEER`&68OE8;mjiJ}&5?!b8_5GL$TJ{nm zd(V~ujQVo=rOxO-8%NssAGLE0C8eU6?tdsGfvY*fG^~EW#E6=PM*Q;o88A)4VdN`4 z)%>XMIB@ZJ;iv8&9B*;9PcXe!z__FJ_34PmIembVk^&wh1ovdaQG8=A{`$@dNqwrQ zal`S{50C1FJIeki6qC$uNiF!2ADh|+Tvzg@Le@3bbIn5b+Xh)N;QXMZOlv?9N!Po= z4OV$kruu1R{-I))`E#y(4Mz5Kp8Hk6>CHEr{M$Q_N7M}g3Y841Z5LN7VwBcf_+}uCELmj6yU;f)UNwB~O7!kqR{_+$m#V+c51#cNgf^CqA ziSnnsK2(oC&oK9>pp!l0<7?^HP~$7XAor|~%yZ;T`(m>~$Vj>D_f4zW%KsMSDxs!* zV^b47_?W<(fdi+J?Lu2*WYSCU2s%&p2g29~%z^TDm*K)TJev-ieLiwYd~o-H$R-vl zL2%c>!7`iMAra)o6Rrz}3@UDQl?%k=Q&_M^s)n-e}}%@&6D zw&IU%l@e9c_SO3w;MG6UgS&@9a6Wo%C;zlmgxh3mY8;45Q{2NkB5Cdx80AH+4_mNq zMo63*c0XF~aSekm8B=x;Qty8a=BSHC2KH7Z_+EbUtCqh&@wm(CjqLQ8m3FFK##_s#;Io*M9 z+KoNk(y^|BTfrqSeoDOs&*_)lg*NL`^a{a(uTiXxtgO2Ww7PfDG|MGnE(HHJ_wxDB zEoLQ1&R6{(oqc&YmTUVil4J-WWGWOz<}{c>Dw&cb3Yn7SKt+;_o9iwSUzKO!p$;Ymdx!$~wDgvPA=i~M7k-)nQd zNmkE}g$>ke_*R;Tjg_RN5MFK=(MHAoK-JH@YFIAXs2?RDN%O4qL;myFN7m6^Hyvqm zs~h0B5G6GspM9-|3}MnRa*5b4s}%C|kndKNkDvjSt7uFrrS%kl|L7=~DKrPDPTZpY z+J(acS0_4i2U82D64l3~97>WTqNAg)rJN1p>SjAS?TNl*kpF&?eb3@6f14b9;cX1vn%zobz-kzgBH?t{M zb#PrzOeoyXd@izOeAOa5?PuJS+*<0VIe%l(TeUK~b*TlK;l#!|1aXv$6V(H@j~p<8Iku{_~@pq*sYYLsR|_VFt7ABnz6 zQVvzwi&yt0nZB)NwQVB#qnq5+Y^bE7smhY0a_$BpK!K|MD(Xsz31H^?y>FvG_%pJ~ zkQ<4JaYCks-t|YZd+ve9h)=|JJckMNmg(NjjmQJqiS!H%K71-f%)r*g9lAPC2s?Lp z&XL4bG2#LW_b0O=)!EB5#IOIq*hl92nQbrW4H zuq@y{jQ`@p1>w*LRFVKYg7SA)8Z=jja)#W{0=r=^xZm$|jQf38>ftZ{eEi0KjVSNx ziGjCC@g_BOsw+2}ZmB(ArYT6(e&=*3E=D$HFWnA>4o92(H(YdbqETm|wLtQ>zsxcT z@-#i~tl1A6IE&x@EfnYZ=Rk_ihqE4vWE}=9SJXhineMusg#h=aV^QIsB^dd4eIHyh z0naGEseb4!spcbB)MO7Ltisey$M2f99Og7Y0N6Bn9Os5m{*QdKHz6;J}=2#G_OwNghHq4){(Dxp?Ir= zawRj9Dv>yer@0DBDD0U;;wE7L2}l88*;`aOw%>2H9bBC3t^-Jo!4$xP86+bkp@uj< zy#CGv9GHilf4L}xZ83UjP1VSKg4WC&{R*rfDGWMB;bsAcro;4I5i*De2Ao7#K#*Wz z!Hp=DuxIR4)?&o8&SH zoM0BbaJ7DfpSr6f_2%WyoSSQwJVI1Jola}(5YSg=_FKJAQzc`0NdxDcZ{tM_iRgw*>oS<3=9kwZBjm|oW2pV@Yl1?nd#l<&ZhPaR|6_Tqq)Z2 zliZH-+nl+74Ts7za~91vze4pmg&HO6|w5A+RSWh zTM2)gnHArgcUz6XYk6>!ME z)YeuE&NKt%0>}fvVS1$~?@D9V{z1PU&XhqwfJm0GUtefL7QGk>e5AMa+*vAxIX=ep zA;5I-3Mj*sS}*Jpiqb?o{MK;&6kcIqVv@indUX%vzlT#&THqxksSaPOmsSV2Z=bR7 z=(1rcNCjyI!J&8?z%qq(k?oxWRGG_l=KgE7==00#UONgu=r3>)vui?lJzW;yQXJPO znsALfINs0jorOB#yO~xkgZ}|;UCE=Zqq9$NeZ11jgNs`@i8{A6wA%3_{~l=x_O`Te zJmu=L?x#lI4wg9%YI4YGjkt$#$oSr`?_Up~Hn9HtX>yBz!1&LcsrQb<`}78KRSFGT&TX#?~k+KaqdE{U{4%BmW=2i6E|B7W_g&c?CU0 z?kVl#-Jj1pXqWk;JIpYFlW4 zHVqGSCRT$-dc~TYIl^5LwgYRXr(ug5R%yJQT&u zBMjp&gin>H|M>j9cuf~nf-T#6G}l*Yqokd896R;{T13^qOQlovTwE%}ZVNc3j!4%j z-14Ra51dcsxG{L9%^~>|*>C>he0VDgFTw7@PPUE3)T^V`faUQFEs{Y!vdIu&=G&(vB4}AET*2DLb(u_nF z-LAC0^-V)Qc7N3gk=K9NDO4}s{I%$mYp42TrL@$=W?QUHg;XPVQjp7M}Z})!Gc$YCmg=1;c=eNynDl{ z2gSx>%ll7!yfnS$K~Cm#HTJ9H{h~4O=asb@#jh()HP$rjJAN?uN)qFNrrD3u9A|be zuan-F5qo0BcIeh`*OO*^7~MT*NEIlfPmwtMQtJ&{vU>Dw`e5XY$Yyy`*p zjp)1ZtsoeDEb=R0diMkXgM)hc;P!$R-nky;oz9VUehK8#BouuOkt|4LpzB%V=9KO} z@TbWy`2UGEQSUP1;d1-C*CyFu?oL(KfEO%R&!j<7X>dd zQPYLG2Y%%29FXu0t#}`4sg7EP|9?eF#@at{wUcNHT(Q};`>xhze5@s*? zeq!j)6E+EVnjmJzmX_^dG{X%!x5US4^loe#ORG4Bvr1Uf;O92C9AGmF&uuTRtmn7L zTubWyX00FA(iFO1M*NCU?cTgq=|8Sd%>qA{c+UKekr`WX1AhgFPM`hpnH4I}&ulvj z={-wJKW%o~IFs`3m4E3Rupu=oDo$PFuCB?^o-?~{c-ArXTRegCyhbwzcEF7 zCt`9gnlqX{e`R2xo?05NrN?VDU8aQ(DK>}n7zYTCy3o)y{5+DRvv#qpNB*Eq`OOF1 z`Lstk3mp3zZJa3tNl0bN&b_O8o;IF|wH_~pH^gS{-bW4&ey95mVnW5P-ge6-G|RuP$uoq1tyHL|L_-mVd; zYBpdb$?fU&;tb35PIRv4O%gsMk8R|X=H%Ctn!CJ* zd_DL&xkl1f7WV_(Ec?Y@FIyjvW=m=~rE<>Wi->SI-}Vd!N`=y0>^=imX42XW=kvcF zdbVsm?95WS@MetZZhE8N3!^exZ(~+WYs8$4hzB9r0P~f5dj>9zJ@ldmW5Z{2bE4iz%kT^o zjqYL^tG$uR#pk)E+U>k^#a-pN8V@yjWee3qb2gRmdM|2nmaiF%OuyiY3zNF@a#v-A|h`IA~l*p;XO2354LWt%dRxZe{C+s_tY;|elG91 zeDPxYzU|Uz98iX2;<%;Q z!SRJKlxa!u6EO1)$!u0~e<2ub-@|($tVzcC_eyj9%HO4iXbFs)sb#R7kd>N%o&!>8 z!o&q81g3Hk^7ZEmwJtqxyuX&;$h_z=B8S5cgxvb>){TSRes41RShgs(_`P5;r3SzV z{}zXftl@mjof1vGrX7y4D6beP$%C_xcpYe6M}Y;JdjFh0pTF^ou~pYrhu@9{9ms^k zd@PDH0A`+79xf?LO8NdZKQ0e$Jk4&&Krn9M)AAYI2>2!S!<}+JJ*6#(3$O}N#*~xD zxl}7tRZ)2f_!XK*JB+SC$-!{uKBx3kz)*2+e+~fXVihyFw_;<^u>$5W(X4`KA&Rh< z&1xWM%3$acJ`)7_A9Mx6$!Mx{lk1-o=!9O8i zEs6;wQ4i%@Z>yK|pB;vgQuU~V;f0?(!2jCxM=dwJ`ak<2dbB(H=Fg`D_g;VskIpIFZCmUhCDV7I;YF6I4FpJ-wk2;^f*|f<-`#FD6UYY;eVpfew$h zR#=xDcb=>VYm7*JZp@tjnQc`ryVOPe*>WOM*Z`J=6tF0#Bd!Pr^9W#3WfCphs`WiV z3t$o4GI;T0vdn6B0xbdwhIo&}h#$U4U|%D|9p5C3Au$39T#yAujK|Ps66lDq2UcC zu6Q#c=(}68t+Y{81EirLk+5w11-b&<_=$D^>S>~>#jU~joqa4&hEG%92ngV}+%WM< zj7)Kz3159YZt!%#BWMri1T0QvvxEuDL4rGcUC@O@O1TXcKu1!i4ufRm^ zNVfwcqz%N!8Sh#Ffh#uEppcB7jm@ec5A(j$;3K1vGXWk7#&|!^T%z#mt)7};+L8z&Ibvdvq3Ks@^b=_7(OqRxT}Wj37QjT--u8JgON1viUtL3 zK|C-eQro}FVz`chA%bNfy_3N6q6<`fya01)@b>QMg*Dv|OMJV$Zg|{b1Xhq0CK;ey zZL58v`s-JX_BB`cGkDjlixVMrL$B=yPk}J-?R|8GV46@8tcq}_Vqkm|FIW6l>lH=7 z4o-L}#kpOl0VUaNeuUpH|2aHG-kjh71p-LV*lvX1ZFzUGIG}FGY@|5=6ePin46!cv zTbf`t03Gc|C(Y{Lm~FNBkHG!masd2jyX!mPWEG`;!)%|>ykOLcPhlNn`N>K;TM`8i zI%sqt3S}StG$R8;Be(|MeP=JWv@rZLx=EN>DY~XVZK$IY6e8&JbAnH(-l=5<$2>XN zM(NN~8geogj*q=l<(LSb*~E?o({LuPu$aI=TNy4`M~(9Be_A==gu|J~)2mEILsj*a zNhOtQM_u@nCqYfaHHA$#JvDT{;WV(kFEjJCY35ksBj=L7JN_?CS*Kf0ZwA0EaoyjGsdlLFi4Z;}(_XRvUkBd2#(tG6a!7(IS5)#C|vJm?LbFS_i#rEvZ{t)csb zBf)Z5>fY2sOGVZ(Cr>aH(0FN}&jSeB5Xsf=#NzAu=ExQbWpNA6-E=SzK`tw zMlg-1e}1#Ttfmf6#T;B*qXtV}mL68GV_^|qQTyg4ephNUZ@I7RE@FUXQ2A@huhYD1 zJB!h|%XHb^GdsJSdr3Z*b8h`S0*X;h%^fkC*u6?z#OTRFZlu8OksXt{-nXI8!{PT% zs&+VD&=C}kRBGK|N*Nhp1wLB&^^HhGOiVezF_@PL=XSRT6I6o~(%Zh##;gQI0b(C< zhmrKGTGKCzbQ_!=N!5cEaEp3;fKju%V8OPqn&y{+`?l0H%P+%qZr7))Sg{Ra^XEA5JU9Jm#^`cEKAK)WY$&u79+o+h<}bV6eZWnMy!aJgvCEcdt@_fo(w;muxLS z!G=x#efz{bmR}JtFg8{3tDo-hwY?A0(YloNTU&1P@9oLFSG;3KZd@I>w|(pE#E0A- z6Bw*JjDPoezypOmy;(?`5J@3 z-{KJa{X1)>c-BKRwh$qlr9txap9W``I_2&Oxx_bZ^Y=j_CIi=lRO>TmaO^O0a;j_C zq#lcwGCOek