slurm-slurm-21-08-5-1/doc/html/heterogeneous_jobs.shtml000066400000000000000000000776131416043614100230160ustar00rootroot00000000000000

Heterogeneous Job Support

Overview

Slurm version 17.11 and later supports the ability to submit and manage heterogeneous jobs, in which each component has virtually all job options available including partition, account and QOS (Quality Of Service). For example, part of a job might require four cores and 4 GB for each of 128 tasks while another part of the job would require 16 GB of memory and one CPU.

Submitting Jobs

The salloc, sbatch and srun commands can all be used to submit heterogeneous jobs. Resource specifications for each component of the heterogeneous job should be separated with ":" character. For example:

$ sbatch --cpus-per-task=4 --mem-per-cpu=1  --ntasks=128 : \
         --cpus-per-task=1 --mem-per-cpu=16 --ntasks=1 my.bash

Options specified for one component of a heterogeneous job (or job step) will be used for subsequent components to the extent which is expected to be helpful. Propagated options can be reset as desired for each component (e.g. a different account name could be specified for each hetjob component. For example, --immediate and --job-name are propagated, while --ntasks and --mem-per-cpu are reset to default values for each component. A list of propagated options follows.

  • --account
  • --acctg-freq
  • --begin
  • --cluster-constraint
  • --clusters
  • --comment
  • --deadline
  • --delay-boot
  • --dependency
  • --distribution
  • --epilog (option available only in srun)
  • --error
  • --export
  • --export-file
  • --exclude
  • --get-user-env
  • --gid
  • --hold
  • --ignore-pbs
  • --immediate
  • --input
  • --job-name
  • --kill-on-bad-exit (option available only in srun)
  • --label (option available only in srun)
  • --mcs-label
  • --msg-timeout (option available only in srun)
  • --no-allocate (option available only in srun)
  • --no-requeue
  • --nice
  • --no-kill
  • --open-mode (option available only in srun)
  • --output
  • --parsable
  • --priority
  • --profile
  • --propagate
  • --prolog (option available only in srun)
  • --pty (option available only in srun)
  • --qos
  • --quiet
  • --quit-on-interrupt (option available only in srun)
  • --reboot
  • --reservation
  • --requeue
  • --signal
  • --slurmd-debug (option available only in srun)
  • --task-epilog (option available only in srun)
  • --task-prolog (option available only in srun)
  • --time
  • --test-only
  • --time-min
  • --uid
  • --unbuffered (option available only in srun)
  • --verbose
  • --wait
  • --wait-all-nodes
  • --wckey
  • --workdir

The task distribution specification applies separately within each job component. Consider for example a heterogeneous job with each component being allocated 4 CPUs on 2 nodes. In our example, job component zero is allocated 2 CPUs on node "nid00001" and 2 CPUs on node "nid00002". Job component one is allocated 2 CPUs on node "nid00003" and 2 CPUs on node "nid00004". A task distribution of "cyclic" will distribute the first 4 tasks in a cyclic fashion on nodes "nid00001" and "nid00002", then distribute the next 4 tasks in a cyclic fashion on nodes "nid00003" and "nid00004" as shown below.

Node nid00001Node nid00002Node nid00003Node nid00004
Rank 0Rank 1Rank 4Rank 5
Rank 2Rank 3Rank 6Rank 7

Some options should be specified only in the first hetjob component. For example, specifying a batch job output file in the second hetjob component's options will result in the first hetjob component (where the batch script executes) using the default output file name.

Environment variables used to specify default options for the job submit command will be applied to every component of the heterogeneous job (e.g. SBATCH_ACCOUNT).

Batch job options can be included in the submitted script for multiple heterogeneous job components. Each component should be separated by a line containing the line "#SBATCH hetjob" as shown below.

$ cat new.bash
#!/bin/bash
#SBATCH --cpus-per-task=4 --mem-per-cpu=16g --ntasks=1
#SBATCH hetjob
#SBATCH --cpus-per-task=2 --mem-per-cpu=1g  --ntasks=8

srun run.app

$ sbatch new.bash

Is equivalent to the following:

$ cat my.bash
#!/bin/bash
srun run.app

$ sbatch --cpus-per-task=4 --mem-per-cpu=16g --ntasks=1 : \
         --cpus-per-task=2 --mem-per-cpu=1g  --ntasks=8 my.bash

The batch script will be executed in the first node in the first component of the heterogeneous job. For the above example, that will be the job component with 1 task, 4 CPUs and 64 GB of memory (16 GB for each of the 4 CPUs).

If a heterogeneous job is submitted to run in multiple clusters not part of a federation (e.g. "sbatch --cluster=alpha,beta ...") then the entire job will be sent to the cluster expected to be able to start all components at the earliest time.

A resource limit test is performed when a heterogeneous job is submitted in order to immediately reject jobs that will not be able to start with current limits. The individual components of the heterogeneous job are validated, like all regular jobs. The heterogeneous job as a whole is also tested, but in a more limited fashion with respect to quality of service (QOS) limits. Each component of a heterogeneous job counts as a "job" with respect to resource limits.

Burst Buffers

A burst buffer can either be persistent or linked to a specific job ID (at least the Cray implementation). Since a heterogeneous job consists of multiple job IDs, a job-specific burst buffer will be associated with only one heterogeneous job component. Only a persistent burst buffer can be accessed by all components of a heterogeneous job. A sample batch script demonstrating this for a Cray system is appended.

#!/bin/bash
#SBATCH --nodes=1 --constraint=haswell
#BB create_persistent name=alpha capacity=10 access=striped type=scratch
#DW persistentdw name=alpha
#SBATCH hetjob
#SBATCH --nodes=16 --constraint=knl
#DW persistentdw name=alpha
...

NOTE: Cray's DataWarp interface directly reads the job script, but has no knowledge of "Slurm's "hetjob" directive, so Slurm internally rebuilds the script for each job component so that only that job components burst buffer directives are included in that script. The batch script first component of the job will be modified in order to replace the "#DW" directives of other job components with "#EXCLUDED DW" to prevent their interpretation by Cray infrastructure. Since the batch script will only be executed by the first job component, the subsequent job components will not include commands from the original script. These scripts are build and managed by Slurm for internal purposes (and visiable from various Slurm commands) from a user script as shown above. An example is shown below:

Rebuilt script for first job component

#!/bin/bash
#SBATCH --nodes=1 --constraint=haswell
#BB create_persistent name=alpha capacity=10 access=striped type=scratch
#DW persistentdw name=alpha
#SBATCH hetjob
#SBATCH --nodes=16 --constraint=knl
#EXCLUDED DW persistentdw name=alpha
...


Rebuilt script for second job component

#!/bin/bash
#SBATCH --nodes=16 --constraint=knl
#DW persistentdw name=alpha
exit 0

Managing Jobs

Information maintained in Slurm for a heterogeneous job includes:

  • job_id: Each component of a heterogeneous job will have its own unique job_id.
  • het_job_id: This identification number applies to all components of the heterogeneous job. All components of the same job will have the same het_job_id value and it will be equal to the job_id of the first component. We refer to this as the "heterogeneous job leader".
  • het_job_id_set: Regular expression identifying all job_id values associated with the job.
  • het_job_offset: A unique sequence number applied to each component of the heterogeneous job. The first component will have a het_job_offset value of 0, the next a value of 1, etc.
job_id het_job_id het_job_offset het_job_id_set
1231230123-127
1241231123-127
1251232123-127
1261233123-127
1271234123-127

Table 1: Example job IDs

The squeue and sview commands report the components of a heterogeneous job using the format "<het_job_id>+<het_job_offset>". For example "123+4" would represent heterogeneous job id 123 and its fifth component (note: the first component has a het_job_offset value of 0).

A request for a specific job ID that identifies a ID of the first component of a heterogeneous job (i.e. the "heterogeneous job leader") will return information about all components of that job. For example:

$ squeue --job=93
JOBID PARTITION  NAME  USER ST  TIME  NODES NODELIST
 93+0     debug  bash  adam  R 18:18      1 nid00001
 93+1     debug  bash  adam  R 18:18      1 nid00011
 93+2     debug  bash  adam  R 18:18      1 nid00021

A request to cancel or otherwise signal a heterogeneous job leader will be applied to all components of that heterogeneous job. A request to cancel a specific component of the heterogeneous job using the "#+#" notation will apply only to that specific component. For example:

$ squeue --job=93
JOBID PARTITION  NAME  USER ST  TIME  NODES NODELIST
 93+0     debug  bash  adam  R 19:18      1 nid00001
 93+1     debug  bash  adam  R 19:18      1 nid00011
 93+2     debug  bash  adam  R 19:18      1 nid00021
$ scancel 93+1
$ squeue --job=93
JOBID PARTITION  NAME  USER ST  TIME  NODES NODELIST
 93+0     debug  bash  adam  R 19:38      1 nid00001
 93+2     debug  bash  adam  R 19:38      1 nid00021
$ scancel 93
$ squeue --job=93
JOBID PARTITION  NAME  USER ST  TIME  NODES NODELIST

While a heterogeneous job is in pending state, only the entire job can be cancelled rather than its individual components. A request to cancel an individual component of a heterogeneous job not in pending state will return an error. After the job has begun execution, the individual component can be cancelled.

Email notification for job state changes (the --mail-type option) is only supported for a heterogeneous job leader. Requests for email notifications for other components of a heterogeneous job will be silently ignored.

Requests to modify an individual component of a job using the scontrol command must specify the job ID with the "#+#" notation. A request to modify a job by specifying the het_job_id will modify all components of a heterogeneous job. For example:

# Change the account of component 2 of heterogeneous job 123:
$ scontrol update jobid=123+2 account=abc

# Change the time limit of all components of heterogeneous job 123:
$ scontrol update jobid=123 timelimit=60

Requests to perform the following operations a job can only be requested for a heterogeneous job leader and will be applied to all components of that heterogeneous job. Requests to operate on individual components of the heterogeneous will return an error.

  • requeue
  • resume
  • suspend

The sbcast command supports heterogeneous job allocations. By default, sbcast will copy files to all nodes in the job allocation. The -j/--jobid option can be used to copy files to individual components as shown below.

$ sbcast --jobid=123   data /tmp/data
$ sbcast --jobid=123.0 app0 /tmp/app0
$ sbcast --jobid=123.1 app1 /tmp/app1

The srun commands --bcast option will transfer files to the nodes associated with the application to be launched as specified by the --het-group option.

Slurm has a configuration option to control behavior of some commands with respect to heterogeneous jobs. By default a request to cancel, hold or release a job ID that is not the het_job_id, but that of a job component will only operate that one component of the heterogeneous job. If SchedulerParameters configuration parameter includes the option "whole_hetjob" then the operation would apply to all components of the job if any job component is specified to be operated upon. In the below example, the scancel command will either cancel all components of job 93 if SchedulingParameters=whole_hetjob is configured, otherwise only job 93+1 will be cancelled. If a specific heterogeneous job component is specified (e.g. "scancel 93+1"), then only that one component will be effected.

$ squeue --job=93
JOBID PARTITION  NAME  USER ST  TIME  NODES NODELIST
 93+0     debug  bash  adam  R 19:18      1 nid00001
 93+1     debug  bash  adam  R 19:18      1 nid00011
 93+2     debug  bash  adam  R 19:18      1 nid00021
$ scancel 94 (where job ID 94 is equivalent to 93+1)
# Cancel 93+0, 93+1 and 93+2 if SchedulerParameters includes "whole_hetjob"
# Cancel only 93+1 if SchedulerParameters does not include "whole_hetjob"

Accounting

Slurm's accounting database records the het_job_id and het_job_offset fields. The sacct command reports job's using the format "<het_job_id>+<het_job_offset>" and can accept a job ID specification for filtering using the same format. If a het_job_id value is specified as a job filter, then information about all components of that job will be reported as shown below by default. The --whole-hetjob=[yes|no] option can be used to force to report the information about all the components of that job or just about the specific component requested, no matter if the job filter includes the het_job_id (leader) or not.

$ sacct -j 67767
  JobID JobName Partition Account AllocCPUS     State ExitCode 
------- ------- --------- ------- --------- --------- -------- 
67767+0     foo     debug    test         2 COMPLETED      0:0 
67767+1     foo     debug    test         4 COMPLETED      0:0 

$  sacct -j 67767+1
  JobID JobName Partition Account AllocCPUS     State ExitCode 
------- ------- --------- ------- --------- --------- -------- 
67767+1     foo     debug    test         4 COMPLETED      0:0 

$  sacct -j 67767 --whole-hetjob=no
  JobID JobName Partition Account AllocCPUS     State ExitCode
------- ------- --------- ------- --------- --------- --------
67767+0     foo     debug    test         4 COMPLETED      0:0

$ sacct -j 67767+1 --whole-hetjob=yes
  JobID JobName Partition Account AllocCPUS     State ExitCode
------- ------- --------- ------- --------- --------- --------
67767+0     foo     debug    test         2 COMPLETED      0:0
67767+1     foo     debug    test         4 COMPLETED      0:0

Launching Applications (Job Steps)

The srun command is used to launch applications. By default, the application is launched only on the first component of a heterogeneous job, but options are available to support different behaviors.

srun's "--het-group" option defines which hetjob component(s) are to have applications launched for them. The --het-group option takes an expression defining which component(s) are to launch an application for an individual execution of the srun command. The expression can contain one or more component index values in a comma separated list. Ranges of index values can be specified in a hyphen separated list. By default, an application is launched only on component number zero. Some examples follow:

  • --het-group=2
  • --het-group=0,4
  • --het-group=1,3-5

IMPORTANT: The ability to execute a single application across more than one job allocation does not work with all MPI implementations or Slurm MPI plugins. Slurm's ability to execute such an application can be disabled on the entire cluster by adding "disable_hetjob_steps" to Slurm's SchedulerParameters configuration parameter.

IMPORTANT: While the srun command can be used to launch heterogeneous job steps, mpirun would require substantial modification to support heterogeneous applications. We are aware of no such mpirun development efforts at this time.

By default, the applications launched by a single execution of the srun command (even for different components of the heterogeneous job) are combined into one MPI_COMM_WORLD with non-overlapping task IDs.

As with the salloc and sbatch commands, the ":" character is used to separate multiple components of a heterogeneous job. This convention means that the stand-alone ":" character can not be used as an argument to an application launched by srun. This includes the ability to execute different applications and arguments for each job component. If some heterogeneous job component lacks an application specification, the next application specification provided will be used for earlier components lacking one as shown below.

$ srun --label -n2 : -n1 hostname
0: nid00012
1: nid00012
2: nid00013

If multiple srun commands are executed concurrently, this may result in resource contention (e.g. memory limits preventing some job steps components from being allocated resources because of two srun commands executing at the same time). If the srun --het-group option is used to create multiple job steps (for the different components of a heterogeneous job), those job steps will be created sequentially. When multiple srun commmands execute at the same time, this may result in some step allocations taking place, while others are delayed. Only after all job step allocations have been granted will the application being launched.

All components of a job step will have the same step ID value. If job steps are launched on subsets of the job components there may be gaps in the step ID values for individual job components.

$ salloc -n1 : -n2 beta bash
salloc: Pending job allocation 1721
salloc: Granted job allocation 1721
$ srun --het-group=0,1 true   # Launches steps 1721.0 and 1722.0
$ srun --het-group=0   true   # Launches step  1721.1, no 1722.1
$ srun --het-group=0,1 true   # Launches steps 1721.2 and 1722.2

The maximum het-group specified in a job step allocation (either explicitly specified or implied by the ":" separator) must not exceed the number of components in the heterogeneous job allocation. For example

$ salloc -n1 -C alpha : -n2 -C beta bash
salloc: Pending job allocation 1728
salloc: Granted job allocation 1728
$ srun --het-group=0,1 hostname
nid00001
nid00008
nid00008
$ srun hostname : date : id
error: Attempt to run a job step with het-group value of 2,
       but the job allocation has maximum value of 1

Environment Variables

Slurm environment variables will be set independently for each component of the job by appending "_HET_GROUP_" and a sequence number to the usual name. In addition, the "SLURM_JOB_ID" environment variable will contain the job ID of the heterogeneous job leader and "SLURM_HET_SIZE" will contain the number of components in the job. Note that if using srun with a single specific het group (for instance --het-group=1) "SLURM_JOB_ID" will contain the job ID of the heterogeneous job leader. The job ID for a specific heterogeneous component is set in "SLURM_JOB_ID_HET_GROUP_<component_id>". For example:

$ salloc -N1 : -N2 bash
salloc: Pending job allocation 11741
salloc: job 11741 queued and waiting for resources
salloc: job 11741 has been allocated resources
$ env | grep SLURM
SLURM_JOB_ID=11741
SLURM_HET_SIZE=2
SLURM_JOB_ID_HET_GROUP_0=11741
SLURM_JOB_ID_HET_GROUP_1=11742
SLURM_JOB_NODES_HET_GROUP_0=1
SLURM_JOB_NODES_HET_GROUP_1=2
SLURM_JOB_NODELIST_HET_GROUP_0=nid00001
SLURM_JOB_NODELIST_HET_GROUP_1=nid[00011-00012]
...
$ srun --het-group=1 printenv SLURM_JOB_ID
11741
11741
$ srun --het-group=0 printenv SLURM_JOB_ID
11741
$ srun --het-group=1 printenv SLURM_JOB_ID_HET_GROUP_1
11742
11742
$ srun --het-group=0 printenv SLURM_JOB_ID_HET_GROUP_0
11741

The various MPI implementations rely heavily upon Slurm environment variables for proper operation. A single MPI application executing in a single MPI_COMM_WORLD requires a uniform set of environment variables that reflect a single job allocation. The example below shows how Slurm sets environment variables for MPI.

$ salloc -N1 : -N2 bash
salloc: Pending job allocation 11741
salloc: job 11751 queued and waiting for resources
salloc: job 11751 has been allocated resources
$ env | grep SLURM
SLURM_JOB_ID=11751
SLURM_HET_SIZE=2
SLURM_JOB_ID_HET_GROUP_0=11751
SLURM_JOB_ID_HET_GROUP_1=11752
SLURM_JOB_NODELIST_HET_GROUP_0=nid00001
SLURM_JOB_NODELIST_HET_GROUP_1=nid[00011-00012]
...
$ srun --het-group=0,1 env | grep SLURM
SLURM_JOB_ID=11751
SLURM_JOB_NODELIST=nid[00001,00011-00012]
...

Examples

Create a heterogeneous resource allocation containing one node with 256GB of memory and a feature of "haswell" plus 2176 cores on 32 nodes with a feature of "knl". Then launch a program called "server" on the "haswell" node and "client" on the "knl" nodes. Each application will be in its own MPI_COMM_WORLD.

salloc -N1 --mem=256GB -C haswell : \
       -n2176 -N32 --ntasks-per-core=1 -C knl bash
srun server &
srun --het-group=1 client &
wait

This variation of the above example launches programs "server" and "client" in a single MPI_COMM_WORLD.

salloc -N1 --mem=256GB -C haswell : \
       -n2176 -N32 --ntasks-per-core=1 -C knl bash
srun server : client

The SLURM_PROCID environment variable will be set to reflect a global task rank. Each spawned process will have a unique SLURM_PROCID.

Similarly, the SLURM_NPROCS and SLURM_NTASKS environment variables will be set to reflect a global task count (both environment variables will have the same value). SLURM_NTASKS will be set to the total count of tasks in all components. Note that the task rank and count values are needed by MPI and typically determined by examining Slurm environment variables.

Limitations

The backfill scheduler has limitations in how it tracks usage of CPUs and memory in the future. This typically requires the backfill scheduler be able to allocate each component of a heterogeneous job on a different node in order to begin its resource allocation, even if multiple components of the job do actually get allocated resources on the same node.

In a federation of clusters, a heterogeneous job will execute entirely on the cluster from which the job is submitted. The heterogeneous job will not be eligible to migrate between clusters or to have different components of the job execute on different clusters in the federation.

Caution must be taken when submitting heterogeneous jobs that request multiple overlapping partitions. When the partitions share the same resources it's possible to starve your own job by having the first job component request enough nodes that the scheduler isn't able to fill the subsequent request(s). Consider an example where you have partition p1 that contains 10 nodes and partition p2 that exists on 5 of the same nodes. If you submit a heterogeneous job that requests 5 nodes in p1 and 5 nodes in p2, the scheduler may try to allocate some of the nodes from the p2 partition for the first job component, preventing the scheduler from being able to fulfill the second request, resulting in a job that is never able to start.

Job arrays of heterogeneous jobs are not supported.

The srun command's --no-allocate option is not supported for heterogeneous jobs.

Only one job step per heterogeneous job component can be launched by a single srun command (e.g. "srun --het-group=0 alpha : --het-group=0 beta" is not supported).

The sattach command can only be used to attach to a single component of a heterogeneous job at a time.

Heterogeneous jobs are only scheduled by the backfill scheduler plugin. The more frequently executed scheduling logic only starts jobs on a first-in first-out (FIFO) basis and lacks logic for concurrently scheduling all components of a heterogeneous job.

Heterogeneous jobs are not supported on GANG scheduling operations.

Heterogeneous jobs are not supported on Cray ALPS systems.

Heterogeneous jobs are not supported on IBM PE systems.

Slurm's PERL APIs currently do not support heterogeneous jobs.

The srun --multi-prog option can not be used to span more than one heterogeneous job component.

The srun --open-mode option is by default set to "append".

Ancient versions of OpenMPI and their derivatives (i.e. Cray MPI) are dependent upon communication ports being assigned to them by Slurm. Such MPI jobs will experience step launch failure if any component of a heterogeneous job step is unable to acquire the allocated ports. Non-heterogeneous job steps will retry step launch using a new set of communication ports (no change in Slurm behavior).

Heterogeneous Steps

Slurm version 20.11 introduces the ability to request heterogeneous job steps from within a non-homogeneous job allocation. This allows you the flexibility to have different layouts for job steps without requiring the use of heterogeneous jobs, where having separate jobs for the components may be undesirable.

Some limitations for heterogeneous steps are that the steps must be able to run on unique nodes. You also cannot request heterogeneous steps from within a heterogeneous job.

An example scenario would be if you have a task that needs to use 1 GPU per processor while another task needs all the available GPUs on a node with only one processor. This can be accomplished like this:

$ salloc -N2 --exclusive --gpus=10
salloc: Granted job allocation 61034
$ srun -N1 -n4 --gpus=4 printenv SLURMD_NODENAME : -N1 -n1 --gpus=6 printenv SLURMD_NODENAME
node02
node01
node01
node01
node01

System Administrator Information

The job submit plugin is invoked independently for each component of a heterogeneous job.

The spank_init_post_opt() function is invoked once for each component of a heterogeneous job. This permits site defined options on a per job component basis.

Scheduling of heterogeneous jobs is performed only by the sched/backfill plugin and all heterogeneous job components are either all scheduled at the same time or deferred. The pending reason of heterogeneous jobs isn't set until backfill evaluation. In order to ensure the timely initiation of both heterogeneous and non-heterogeneous jobs, the backfill scheduler alternates between two different modes on each iteration. In the first mode, if a heterogeneous job component can not be initiated immediately, its expected start time is recorded and all subsequent components of that job will be considered for starting no earlier than the latest component's expected start time. In the second mode, all heterogeneous job components will be considered for starting no earlier than the latest component's expected start time. After completion of the second mode, all heterogeneous job expected start time data is cleared and the first mode will be used in the next backfill scheduler iteration. Regular (non-heterogeneous jobs) are scheduled independently on each iteration of the backfill scheduler.

For example, consider a heterogeneous job with three components. When considered as independent jobs, the components could be initiated at times now (component 0), now plus 2 hour (component 1), and now plus 1 hours (component 2). When the backfill scheduler runs in the first mode:

  1. Component 0 will be noted to possible to start now, but not initiated due to the additional components to be initiated
  2. Component 1 will be noted to be possible to start in 2 hours
  3. Component 2 will not be considered for scheduling until 2 hours in the future, which leave some additional resources available for scheduling to other jobs

When the backfill scheduler executes next, it will use the second mode and (assuming no other state changes) all three job components will be considered available for scheduling no earlier than 2 hours in the future, which may allow other jobs to be allocated resources before heterogeneous job component 0 could be initiated.

The heterogeneous job start time data will be cleared before the first mode is used in the next iteration in order to consider system status changes which might permit the heterogeneous to be initiated at an earlier time than previously determined.

A resource limit test is performed when a heterogeneous job is submitted in order to immediately reject jobs that will not be able to start with current limits. The individual components of the heterogeneous job are validated, like all regular jobs. The heterogeneous job as a whole is also tested, but in a more limited fashion with respect to quality of service (QOS) limits. This is due to the complexity of each job component having up to three sets of limits (association, job QOS and partition QOS). Note that successful submission of any job (heterogeneous or otherwise) does not ensure the job will be able to start without exceeding some limit. For example a job's CPU limit test does not consider that CPUs might not be allocated individually, but resource allocations might be performed by whole core, socket or node. Each component of a heterogeneous job counts as a "job" with respect to resource limits.

For example, a user might have a limit of 2 concurrent running jobs and submit a heterogeneous job with 3 components. Such a situation will have an adverse effect upon scheduling other jobs, especially other heterogeneous jobs.

Last modified 29 September 2021

slurm-slurm-21-08-5-1/doc/html/high_throughput.shtml000066400000000000000000000270151416043614100223240ustar00rootroot00000000000000

High Throughput Computing Administration Guide

This document contains Slurm administrator information specifically for high throughput computing, namely the execution of many short jobs. Getting optimal performance for high throughput computing does require some tuning and this document should help you off to a good start. A working knowledge of Slurm should be considered a prerequisite for this material.

Performance Results

Slurm has also been validated to execute 500 simple batch jobs per second on a sustained basis with short bursts of activity at a much higher level. Actual performance depends upon the jobs to be executed plus the hardware and configuration used.

System configuration

Several system configuration parameters may require modification to support a large number of open files and TCP connections with large bursts of messages. Changes can be made using the /etc/rc.d/rc.local or /etc/sysctl.conf script to preserve changes after reboot. In either case, you can write values directly into these files (e.g. "echo 32832 > /proc/sys/fs/file-max").

  • /proc/sys/fs/file-max: The maximum number of concurrently open files. We recommend a limit of at least 32,832.
  • /proc/sys/net/ipv4/tcp_max_syn_backlog: The maximum number of SYN requests to keep in memory that we have yet to get the third packet in a 3-way handshake from. The default value is 1024 for systems with more than 128Mb of memory, and 128 for low memory machines. If server suffers of overload, try to increase this number.
  • /proc/sys/net/ipv4/tcp_syncookies: Used to send out syncookies to hosts when the kernels syn backlog queue for a specific socket is overflowed. The default value is 0, which disables this functionality. Set the value to 1.
  • /proc/sys/net/ipv4/tcp_synack_retries: How many times to retransmit the SYN,ACK reply to an SYN request. In other words, this tells the system how many times to try to establish a passive TCP connection that was started by another host. This variable takes an integer value, but should under no circumstances be larger than 255. Each retransmission will take approximately 30 to 40 seconds. The default value of 5, which results in a timeout of passive TCP connections of approximately 180 seconds and is generally satisfactory.
  • /proc/sys/net/core/somaxconn: Limit of socket listen() backlog, known in userspace as SOMAXCONN. Defaults to 128. The value should be raised substantially to support bursts of request. For example, to support a burst of 1024 requests, set somaxconn to 1024.
  • /proc/sys/net/ipv4/ip_local_port_range: Identify the ephermeral ports available, which are used for many Slurm communications. The value may be raised to support a high volume of communications. For example, write the value "32768 65535" into the ip_local_port_range file in order to make that range of ports available.

The transmit queue length (txqueuelen) may also need to be modified using the ifconfig command. A value of 4096 has been found to work well for one site with a very large cluster (e.g. "ifconfig txqueuelen 4096").

Munge configuration

By default the Munge daemon runs with two threads, but a higher thread count can improve its throughput. We suggest starting the Munge daemon with ten threads for high throughput support (e.g. "munged --num-threads 10").

User limits

The ulimit values in effect for the slurmctld daemon should be set quite high for memory size, open file count and stack size.

Slurm Configuration

Several Slurm configuration parameters should be adjusted to reflect the needs of high throughput computing. The changes described below will not be possible in all environments, but these are the configuration options that you may want to consider for higher throughput.

  • AccountingStorageType: Disabling storing of accounting by using the accounting_storage/none plugin. Turning accounting off provides minimal improvement in performance. If using the SlurmDBD increased speedup can be achieved by setting the CommitDelay option in the slurmdbd.conf
  • JobAcctGatherType: Disabling the collection of job accounting information will improve job throughput. Disable collection of accounting by using the jobacct_gather/none plugin.
  • JobCompType: Disabling recording of job completion information will improve job throughput. Disable recording of job completion information by using the jobcomp/none plugin.
  • MaxJobCount: Controls how many jobs may be in the slurmctld daemon records at any point in time (pending, running, suspended or completed[temporarily]). The default value is 10,000.
  • MessageTimeout: Controls how long to wait for a response to messages. The default value is 10 seconds. While the slurmctld daemon is highly threaded, its responsiveness is load dependent. This value might need to be increased somewhat.
  • MinJobAge: Controls how soon the record of a completed job can be purged from the slurmctld memory and thus not visible using the squeue command. The record of jobs run will be preserved in accounting records and logs. The default value is 300 seconds. The value should be reduced to a few seconds if possible. Use of accounting records for older jobs can increase the job throughput rate compared with retaining old jobs in the memory of the slurmctld daemon.
  • PriorityType: The priority/builtin is considerably faster than other options, but schedules jobs only on a First In First Out (FIFO) basis.
  • SchedulerParameters: Many scheduling parameters are available.
    • Setting option batch_sched_delay will control how long the scheduling of batch jobs can be delayed. This effects only batch jobs. For example, if many jobs are submitted each second, the overhead of trying to schedule each one will adversely impact the rate at which jobs can be submitted. The default value is 3 seconds.
    • Setting option defer will avoid attempting to schedule each job individually at job submit time, but defer it until a later time when scheduling multiple jobs simultaneously may be possible. This option may improve system responsiveness when large numbers of jobs (many hundreds) are submitted at the same time, but it will delay the initiation time of individual jobs.
    • sched_min_interval is yet another configuration parameter to control how frequently the scheduling logic runs. It can still be triggered on each job submit, job termination, or other state change which could permit a new job to be started. However that triggering does not cause the scheduling logic to be started immediately, but only within the configured sched_interval. For example, if sched_min_interval=2000000 (microseconds) and 100 jobs are submitted within a 2 second time window, then the scheduling logic will be executed one time rather than 100 times if sched_min_interval was set to 0 (no delay).
    • Besides controlling how frequently the scheduling logic is executed, the default_queue_depth configuration parameter controls how many jobs are considered to be started in each scheduler iteration. The default value of default_queue_depth is 100 (jobs), which should be fine in most cases.
    • The sched/backfill plugin has relatively high overhead if used with large numbers of job. Configuring bf_max_job_test to a modest size (say 100 jobs or less) and bf_interval to 30 seconds or more will limit the overhead of backfill scheduling (NOTE: the default values are fine for both of these parameters). Other backfill options available for tuning backfill scheduling include bf_max_job_user, bf_resolution and bf_window. See the slurm.conf man page for details.
    • A set of scheduling parameters currently used for running hundreds of jobs per second on a sustained basis on one cluster follows. Note that every environment is different and this set of parameters will not work well in every case, but it may serve as a good starting point.
      • batch_sched_delay=20
      • bf_continue
      • bf_interval=300
      • bf_min_age_reserve=10800
      • bf_resolution=600
      • bf_yield_interval=1000000
      • partition_job_depth=500
      • sched_max_job_start=200
      • sched_min_interval=2000000
  • SchedulerType: If most jobs are short lived then use of the sched/builtin plugin is recommended. This manages a queue of jobs on a First-In-First-Out (FIFO) basis and eliminates logic used to sort the queue by priority.
  • SlurmctldPort: It is desirable to configure the slurmctld daemon to accept incoming messages on more than one port in order to avoid having incoming messages discarded by the operating system due to exceeding the SOMAXCONN limit described above. Using between two and ten ports is suggested when large numbers of simultaneous requests are to be supported.
  • PrologSlurmctld/EpilogSlurmctld: Neither of these is recommended for a high throughput environment. When they are enabled a separate slurmctld thread has to be created for every job start (or task for a job array). Current architecture requires acquisition of a job write lock in every thread, which is a costly operation that severely limits scheduler throughput.
  • SlurmctldDebug: More detailed logging will decrease system throughput. Set to error or info for regular operations with high throughput workload.
  • SlurmdDebug: More detailed logging will decrease system throughput. Set to error or info for regular operations with high throughput workload.
  • SlurmdLogFile: Writing to local storage is recommended.
  • TaskPlugin: Avoid using task/cgroup with the combination of ConstrainRAMSpace it is slower than other alternatives. On the same note task/affinity does not appear to add any measurable overhead. Using task/affinity for affinity is advised in any case.
  • Other: Configure logging, accounting and other overhead to a minimum appropriate for your environment.

SlurmDBD Configuration

Turning accounting off provides a minimal improvement in performance. If using SlurmDBD increased speedup can be achieved by setting the CommitDelay option in the slurmdbd.conf

You might also consider setting the 'Purge*' options in your slurmdbd.conf to clear out old Data. A Typical configuration would look like this...

  • PurgeEventAfter=12months
  • PurgeJobAfter=12months
  • PurgeResvAfter=2months
  • PurgeStepAfter=2months
  • PurgeSuspendAfter=1month
  • PurgeTXNAfter=12months
  • PurgeUsageAfter=12months

Last modified 14 July 2021

slurm-slurm-21-08-5-1/doc/html/ibm_pe_fig1.png000066400000000000000000001123061416043614100207100ustar00rootroot00000000000000‰PNG  IHDRÀÐ_w´€IDATxÚìý?h”Qü?zž"EŠ)R¤H‘"E ‹\°°°~),,RøƒÀ®……EX,,,×ÂB¸²XX¸B Ùµpïz¹²¸l /XÈEîõ‚pýñsç|ó9;'Ož™L4™™Ì¼^pЙÌÌógþ<çýœóœ“P›í”ÝNÙS”))ùó>ç«Óg»Sþ(Ê”•m_}˜>;>&-ƒÊä—ñyßñÕ€é ÀûvS`_XF`€`@€A`€`@€€`€é˜í”åN™›€m™m™à±ùq 0 Oõ ¶;åZu{/¶e}€çNËg@X¾àx»e½`€'.ïÀ0 ×–#æí}’[Ngúà¹øÿZËkmvÊVãv.‹ò¨StÊj<·¼ÞµXî“Ôí®<ëñ´SwÊÕ–eÍÆk<Žu¿•º×)¯ÅsÿÄ¿;'àËò0^çf,_à ’çïNùÑ)o;åSlû§Ô(ª€—ãö^Ëëå×8hÜ~W½îŸª%ˆ>‰åççüŒûnwÊ«NùÕ)_âï¿ÓÑkyWâ9ùñ¢äÿް½Û)ßã¾ïÕ:µà{ÕãÞÆz¼€x²|ŒYð|§ ªg€ÿD Ì-¿WÒáHÌ%ˆ~‰×Ë–"ˆçûßÄã²µ¸ïuõºï# ¯7Â|ý¾ ÒúJÜ~Uþ…*P À€¡·.÷Ï€€€ e½S~Ÿ~?§Ã®Ñ00p¡Ýé|ÿkü{µå900pá,tÊ·!øIçÀÀÀ…r¹S¢rÿ_á7‡ây`¸èreþWTì?¤Ãéþ÷*ß8á¹000Öò´GOÓÑnÎe«qß볌 Œ­åtØÚ›+ó?{TèïÇã`€àBÚì”ïQ‘ÿÒ)kÿðZ000–öRw¾ßW©÷àVã€çÒáÅŠrš2'ÀôšÀû'ðÞ½îyàf~tÊ[E°äQË·`˜N¹‹ó—¨¸ç®Ï›gøÚÃÀo½…œ2¤îœãk À0¦rEýgêNq´|¯/##“§3z’ºSåéŽfÏ)` ÀÀÀH,¥îG¿Î¹².##±‘ºStÊås^žŒ ÝÝÔâèu§, a™ÿ­Œ Kžóôeê^ï›§8šÂr;åÿ#3…øÿl7Àð]JÝ)Žò|¹›CZnîZýµ Ýÿ7˜) ÀÿK§|ꔇéð²ƒY»Î×vêNqô1ýGƒ,÷ÿ´3}ø¿OÝ“?âûðªSnwÊŠ·ÎNîÞü¸ª|çJù°Z î§£S+¹˜i À;ÕÿÛÊ—øŽ^K‡—(!_wû>*ÙyÀ«[CZn®Ä¿ª–{;î7 4Ó€ówâ O.%OEvÓÛ§ƒß¢R¯¿½<¤åæ.Ÿb¹yŠ¥êoð¿ÙÒtÚýùt8øÙú)ž³ûvñ ·gf öé0G^ J®€S¹“ºS½IÙâ(¥£ó Jǯo€ÿÍA”b9ÞßõS¾ÎrêŽ>¨»eÿ«ëònÊpö8õoý]óóƒÉÝ,_Tê| î°ZÙnW¡ûUj¿–Qþ7[Qšûs8ï×'g¸-oÏ8P_”œ[w?÷Àÿc:lNp©ªXç)Ž® i¹9`?m„î^à³5¬œOfün„oøïpv%uO•Rný‹÷¦ÊÔj¨­ëñyÉ׃¾KÝ©]n Ø&9ÏD°,ó-çë°ŸÇ Šl3Ö±röâþ+ûóܱ/âÿÏ£d¹Kr9áñ±±Ý¹ñAµ_ãö\K¾S=.vÚJ»m®Zöóx—éð„K™Ú§þì­Åz]¿å.¾oâ¾qûm¼Þ4à¬!=Fþ›ttÀºaöÞ€ a&R©H?KÛFe-‚U Xƒ\»8 øI˜üïÍ2ß# æK±7ž÷5o•ç=Ûõ5À×#|–ýYž7Á¸^‡gñ¸×ü3Öíaä²7[¶ém#Ø}àö.¶ñYõY˜­Þ?±>ß#ཉu=ˆ¼Û2mx&N\ü‰“"å¾û©Ûü> o¾nk‹JšS CÝâü> >2ð4àü^¼hÜw=Âbi!ÿ¡°XMÝ®ëõúoÄý×[p½?׫ûîõ]Oâþ+UþÑxï–bý_5žû%^·ì5WNÆ\kàoÕrJ«æ4w.ÖbŸ5]MÝ)“ò÷lÛÏÓìj::ÅÑ•!.»îº¹ŸN×Msð÷(ùzÙ^ÓÙìÅ~XŽÛyj£_(ó¿¥ÿqÜž=EþŸ¦n7ãµK~Úò¸ƒF8_‰Ç^n v—Z‚~Û´?Z–#÷7ŸŽh7ÌÞ06rXª§8ZÒrsåûUê¶8ïþÅkLCÞ©ÞŸ_±Ïr—âz*ªµt´«ñë(›éh—Ø_6ÂéIøçû à½¸^Æí–@]‚Ý|Ëþo À»ð_»™º½-òþº’` äú[0Q®§£S­qÙ·R·;ï«ôï× NzÎ×Ä–ܦoñþ%ø¾‰ \Ü‹}þ±e[zàÍê¾2sósr3îß>E.ë¸pNø§|j©;ZwþÜl%˜3¤J‹Ïó4¼Apò²ŸVË>«9I§¡øs„à›4s‹ùÃÔ{Š£|=jô•j¿ïž€Ë S/«UBøçØyòèÓßã¹³§Àùó÷¡O°û—\^#·t_€Oe!u§À*ƒ™ €ÿ°Ñ/Q±Ï-dkc¾Îy`«7éßœú—e—é•Îz –iÀ¹åõcNÊ{ø¤å$B¹¦ûVãäÃtt”è^x>‚nYNm#>ïõ:|HÝVáAð§8ùqx#‚z™JK>½ÛÕ>ü2¦¿k9˜ß‹ïÄA|¦¦ã½ 8£ðû-‚\¾æòATÂr ÙÓuÎ-€¥‹c^÷a¶Ž­¥îü£y.ŸñëOË5À%¯GéUÙŸÏèlËIˆå–Ç/¥ã×}æÀœ[}WZ^çr,­å9Ëéø(ÎÍeìôX…÷—Öå¹·Û¶ÿRíµ¬9§Ø«-wÆè·,¿ÿe ¸|²'Ÿpyëy œ½2æ•Få=wý4†ë{;u¯¹}—†7ÅQ¶•º]rߟӲ§)s1\ô\‚æ£Ômí“Æc€¬Ûéx‡l;îìãp¶r«ÃË–ûËõsãb®ª,ÿ‰Êì0§9Ù«–½ŽË€€ÏϵÔ±ý{Ü¥×±.³-ËÝü?úøœ¿îòõr߯d}VR· cn½1äà]N £û¤Œ|¾«àYZYgG´oKÿ¦Ùø½ñ]8G¹K`5÷MT¾ÆaúÜBS<ʃ]â²sÅ´Ì-œ×a×D ÀÀñ›º—Säïù8 UæÅ¾ëãp~Ê`,eÚ˜QÀ’[¡ïW듯Uæ4&9(~¯‚÷°æ€€‡g-uG Ï£E߃ý½Á<¯×¬ÀùÉ#âæîÆy~ÖÜÕ8w^Ázäà]Oq4ìQ[o¦nËÐë!ox¸ò÷ûIêžl{•FwòïzõÛ»ê£0jçïJTîòˆÇyÔåÛ©Ûðù9/;_cW®¹û’†;ÅQ¶—º­Î¹">#® À½ÍÅþɽrWÕ;ñ^k Í|µGÈZ©^³¶ß…üúÛñú›éèu¡[éèTaõß7â¹÷â;&_¼\>sÏÒÑÑèçÏðõKÀþ–º]êë2 = †.Oò2Bpn þÎ::|¾JÃíú7ÙQ2-ÿåØ7OÓáI›Ê6ÒÑÖûf.A«×þÞiÛ_ñÙ8ˆs/…O}×¼øm–ç©ÛjX>ã÷à €‹ÜR[NÖ}ïÑ¿*ãô+ÏZn=y]…Ï{#Q¥Ëu®ÐnŽÙþ€OÀŸ›ñYz~x9ÂoÖe¶üïûxÜI¸t¥/-Ê+Uˆ¾¨ƒ ÀÝÏÆ»ê·k£Äp¬¥î`S¹µycÈËÏáï[,?œqœgS>9¿où[iu]üÇü n¯5·rŠÜDínÜ¿._èœ"ðÞOݲÞÇçŽ2ÅQ4äå߬*­¹z~Œ÷“Ü?ßëñþæ¿mýcÎæ{åÒºß2à‹€‹«©{2oƒ÷0¦òÀROS·ëê“4Ünƒ3±ÌaÏë)Ÿ_n K×ûÛÜonß·°\É'ÑžW¿-ÏÓøžX`HåCT ’›™y3Âå Àç€Ûh+-À7þ1çëõ À§‘?{eÀ³üy¸è£~ð6"H”JáÚ—Ÿ§Tª§¹(•Røäü¬åo¥—ÁÒ x¹ñ¼ûö8n_ê±lXn“¯/'ûÊà~Ș÷Òh¯·ÍÝaK‹LszøâàüÙºZÝŸÿŸ[øß4ÂhNË´[·ªûò hßl%^ÿ}õ¹É= Þ Àð rà-ƒ¨ý‰Ï̲ÃÀäÊA÷URöF¾K4·Î^°}(Ÿ€?Çç+Ö^Æÿ¿4ÂF3/Wa÷}ü=?ïI:yà_f¾ Àðrï—¯©;ÕÚ–CÀäYKÝ.Ç9h {~ݹÔ&—»t? À'à|båz„ß‚óIù–ý¸Ûòü‡±ýù³r-ž·—ŽwÑϽË×Ϥã-À»eì¤ö“>kqÿ²<8[ˆÏg9÷4~£˜¹òZw9vE?_÷ù1u§$Ù¼àûR>9Ÿ—먛ae± 2ÓFþ{¹Ë}™þ-Ÿ ¼ìppq5§Ê•Ùaw9Î×~KÝ®±«p2A].ûÿAêb”[‰_Äý°|Jy@µr‚.÷N¹ãÐpñäV×÷©;ÅÐͬÃÍ4ÚÁ¶àÉ À3ñY*½ â3VFöFð¿Ë'¥îÉÂ7©;b9c.·‚•V׆ݭ/‡”ÇUeòQšœ)GàÞæbÿ cJ­¼ŸîFؾ=åaE>;ùòŒ2[þ÷ºÃ ÀxË¡ nu]òòóòÞ¤nwÂI«8 ÀÀ“m1u{ä’OæÍú˜Œ—ÜúVjš[ƆÝꚯï-#Mçè+¸Ÿ`àéG/d}JÃéÙÀ.UÁ3Ïk9ŠQ–ó”5õHÓ“Ú%UFžk~ËX »>n£µ]Ï<’éÊÖ!>Tº]?K“=Ÿ¦Œ<]òïY=š~žÛzÁÇ`¸r÷æzÔÒýϹ¼åzßi…WFžNy@¬2@V¾ÄcÓ.Ž˜{ÁܲKÎ.½HÝnw÷Óð»Ý5¯9žÖ®ç€aœÀ'ÿ6ïW¿‹y*:düƒÜµ®LÑ[®`r+o¹îí÷”W†``šn¤ÃKÊ¥)ëv Àém¥îG9bŠ£ÀK7¿|­áÕ)O``Ú,§£ƒ>HÈH®4=LÝnu£š[÷Z::ÇðÒÂvÔgœ§€€é÷Û½—ºã$ä‘òWì€Þ#–V„Û#Zz”ÓçCà3²Ç½²-#s’ÜSæ u/]Ù¶KÚ+Mez¡üÃl:lq.­Ï÷†´ÜºÅû"àwñE™äòNþkyì„çÕïÚó4}£æô”[zK‹kn^Á:äe~HÝV‹kCZîzlûã €ešŠüo¿åR’ƒd`Êå®Åu‹kn ÅÀ)¹µ¹´>çA¯. i¹¹E$šú<‚ð¸W¶ó'OÒa×PE™†ò$™Úç_­T'óɾ{ÉYÀ”VŠê)޶F´9pþŠõx3äÊîóÀó$üx¤nOŸÜ½|Ùn¦ÅõttŠ£ÕUÈêko§á¶JlÇr7â¶ Lºü{÷5~ëòÜÁ7ì`’•V€z`”QLq”[\_§n—¼›C^þrTþW÷ ÀÀ4Ƚl^Vǧ#:œ«<ÈÔ›*tÞÑzäÖæÏ©;Úô°eÉ'ÞÅ:Ì ÀÀ”º•º=òØ —í`RäŠÍ×*t®h=6« Wžwwiëp5u»ÿT¥ Âõ=n_ñ±&ÜjêΞOŒÞµK€‹îV::ðÉâˆÖãnµ/ÒèºÜå _Ûh³¯«}´ŸFs]4À°åž0R·Ktî)´d·Í\¹R©ÉœQL}‘+WõTK{cº¿Ö“.ÐÀôÊ=têž0×íà¢ÈS•nm¹Ëñ¨FúÌ­Íï«õç • L»<@Vé “Kž‡yÖnÆÙµtx}k®¼äž.h=òuÇ¥5á`„ë1¨+±ž[>BÀ”ÛMÝùÙóTykv 0nr÷æû©{æ>Os1ªël·«ÊÓÛtتÀűá÷OüžïÚ%À¸¨»­r$Ïæ<ÃOÒh®;àßÍÆïxùMÏÇ™E»¥ÜÕø u§8ÚÑzÌ5BøMo ÀDÈã7|¯Ž3›v 0 9d–®Æy°©QM]‘§ úœF?Ï0ç#_Þ¤£3  Š\騧8zœF×Õ8·”A·òÈÓËÞ€‰UÏéžó/Ù%ÀyZNG§8å´=wªŠÐ‹4ºA·ž|éÍ—ê8tË.ÎCnm-×aåÊǨ¦¦h¶@ïyk¦J>áù4yÀˆÿÀ™É!³´¶¾ê”ù­Gô}êžù7o.Àôº‘º—Á|M£ˆ˜9èÖ£+ßáºänoßb]òÈÓkÞ€©·Ü)ïªãTžÏxÀ©­¥îG¹ëó(Ϭo§îˆÓo“¹ èÊ÷^êöTúÐ)+v 0¨*pæŠÄ¨¦8Ê•šû©{×ÓäÌ>í®¦î‰ÛQÔ\3éèÀ"ùÿ£šk1rò*u»µé€“äKwžWDZçitãVc,·ò~ˆ Cnýå™óÜuísêv¿^÷öp ùÒ™Ÿ©;nÄU»(6RwŠ£Q0•×¥Œêù)p§•åÄnîI”g4p L¹zà<âó(»ŠíVë’çuœóöðrà}P[Þ%'V`*å [_c»7â Ê~ê^³µçíà ­§Ã¹‚ó1&÷2ºa—ÀôÈ]œ¿TÍ®KžÒè}êŽÚ¹åíàä¿/S÷dk>ñª§L¸z`i´]Á.§îù¯i´×0nUÇÁ/q,&Lîfü8=ó=;Âõ©ƒx¾&kÑ[À¬¦Ã“Àå2 »ÉY01òG¥›qžâèæˆƒøýtt®a•Fq>–´¹âõY©Ö'O¹´á-`Jlű¯\†äg| -××~J£â([OÝ‘1?ÁúÀ°å²Ê@”ãÐ+ .¼| }X\Ÿ¥ÑNq”åkžÊõǯÆ`}`”Çé{ÕqñCrRþJØêmŸëkóA¾¾îé~r¦²<ÃAê^¦tÓ.€ÓHË|ºyª£«cÆó}Û[G4ªÌÿŸ·[ ¿Û©Û•êmýGk©{V;‡òËÞ"è)Ÿ$.ãväãçU»ŽËgŽŸ¥î™ã|í層׃o½ƒ0Ár7ËeL.€J=¥ÐÏž£¶W…ñ}n8•|Ü|º½ºÞE0€©v=u[Yó”B«#^ŸÜý2Ïà[p‘­§î¸yîàv Ó(Ÿ¾Ÿº­¬/Òè§ZNÝ–è|Þð6À?›ãü8MkC³Ð)oR·•õάÓz§|OãÓ “æV::@–%˜xù`WOq´>&ärÒëä¬4œ—|‚ùcêž¿›Œ³À„ªƒf cÔ£*çî“Ôí’õÀA†rü}Xó´‡Kv “"·¨îWºÇc4‛×çW:œ·žÍtجŒ½qÝ.à¢[NÝ®N?Ç$h^J‡×•nØ®A€ÑÈ'¤_¥îIòÜ3Ë¥H\HùÌî8 }‰à9,¹…ùeXkõ´KïÓè»a)ÝN‡=²Ê`”kv EŸ{©{67ÑaŸÍ½•º×•îÖõ:å.Ù³Þ*9ô–éó˜!»v ã.·¸¾NGGwÅ:ü¨Âîÿ5uç—i—€ãòÉéÇÕ1<×)ôÖ`,åkiëkk7F´O«g]r(Þô6ÀØ»Ö)ßãøý=nÀظ™º×î|H£›Îàrðû_;åÿäm€ #·ü¾©Žå’Ë—±| ª[\ó補âè}\Î /{ËàBÉ—.ýŽcyžYâ’]À(ä0ù!u§8ÚñúÜì~KɃk˜^.–<@Öç8–çg·í†)_K[®Íù’F?]Á|µ>½Jé¹µzÅÛÎ\:Úë¬mºC8sy:¡ÒéU„ÏQ{Ô#ôþŠdžÿ×uCpñm¥îl_ÓèÝ`Âå [OqtoLÖëRÈ˺åA3r—lÝ`òäÁ6ßVÇþ‡i´c0arç2ÅQîjœ_~Ð)ëŠ2áå› p¡ð7Ç2e ÊÎ?ïØLàBໂ)°#ƒ 0€,#0À0À€ 0€ 0 # ƒ 0ÀÀ ƒ 00À ƒ € 0À  ƒ 0ÀÀÀ0Àïa§lÚ 0ðÉõŠ­ °žsQ]ó– À O‡¥x®Ú0ðy{AöYy÷¼e0ÀÓáf§üì”»B@€`àIö¼S^Ø 0°, À ÿ…NyÔ)ŸãÇÿC§ÜK‡×™w#|æ®Ç;åSì‹Í8h4¯EYŒûw—òœw±¬üZ»®gnõý‘[{)ËÍ˸ë™—ó2µw›Î]ªŸTÛþ®Ï{¼S­w~üÃØw0ðxï“úXÿ>ê3}ðݸo±ñZkU=£¾}9–‘_#Ÿ¨Ÿ­ê=Uý!ÿ{-ž{#ê\ÕkÔæ¢®Qê2Oã1° ð?˜ÖŸ‚÷",þ‰ëíÿÖ)_;å{”[ÕÏzpýý'ïïxíÇUк;Àº^ ”•å~а|¿SîÄAïwuÐÉVã1¿â ²Å?q»íý{Ïû2¡!X€'Á|Ô_¾G˜Ü‹°ù'k¯¼ßã8¸Þ¨–Ûo£^puRïy÷¿ˆåýŒúÈ£¨ƒäå<‹û¾Çú–úY©»ìG}æSl‹,ƒü6b»š­ª/â‡y¾±ýùß™(³€›XÍÇr>°®{<®,70êVé¹8(}MÝ3¾â Ôl½~¯q=n_o9PÖ½IüÑ€àIp#öǵÆýo#LΜQÎu™Õ*¼Öõž–Àö£ñÚ÷u{-õΙ*¼ À0À©´ª¾ê”•¶ÿJžAðû–×.gMO’ŸûpÀÛuÂ÷ª^÷´åq‹éh øó¸½ØòØ7i2å€àI°U¤¥>û×ü¼å5óýÍ÷+=ê)ׯû!zÓ†,ƒüïÞ¤îYÊüC}?¿^¶lÿÂ?ඨgñ·~â1'Íÿ[–{¯åo›©ÛÚ]þ«Çëä–â/ñÿüïï886Ë· Š0€< f#L–zÎǨ›¬qÞë€ßöxžðº¿Zž›Í À0Àÿ.·^^mü^$Þ¦î@Xû=BêYàýð8Ìxào ¶åàr;u»Díô €_ªÿÿŒõìU&í:`@ž¤¼O¸ÿ¬ê9¯ÓÙu>mÞ;áu›c±4_W€A>Ã0¼…¼½»€/qÞuôÀÿ åo7ão¹;Ô•Ô»¥x&å •Ïÿ˜²Ï» OjÎ'ýË —×O€·‡€sO´-¯¹$ À ÿ›ÛöšCï—aöûe÷Œð·4ØtIåÀò)¿.7èÜ•y.€?zÙ À 00Lº<€ß3»`@F†IV¦t»åM:œ;<_ ƒ 0À0)¶:åf¿½Žïƒë€€A`¸ðJÈ]mÜ¿§Gzo!ƒ 0À0 ®Åg>Ý¥*H¼‹û7í"`€A&Eúw|öËH¹õ÷–]ƒ 0À Ã$†‡|-ð^:œxÁ.A`€€A``€A`€A@`€€A```àbàÍX†¢ ZžvÊœ Àð\‡•Ó” à¦<çäËx}E¤|?Ç€*À½^ÿ»c°rŠò2ê¹0ÀÇðžÝÌ)Cª À°°îÕŒKWX€``@F€`€€`XF````ø?\Jç7-À´š‹ßWXxÄx±Sv;åcÒb p^óOüÎîÆï®Œ,ƒŒ<¤<Û)ÛòºS~ÇãþÀç€Kù¿¿Ûñ{,# À #ŸCÞˆïÁÏFeL^®ËÏø]Þ€€øßðê”òµO¬.ï;å­¢(Šrfåý€¿¿_ã÷ú? ÀÀ€<ÝæÒd¶L#ÿOV¼EQ”ñ(ÿ/øB[J“7 ¤ ðTà|°|ظïÊ_¼ÎV¼Ö•SîÛÏg¸-3éhw³IÀùõW;å~¬ø?wʺ¢(Šrfå?ðÛ{¿Ó+Ièõ°eûæÿ²Î’_çù)¿ïÝúnÏåX€‡¬ùãt'îûÛºÓr÷±Gg¸-¥[Ú´àZÞïOSï뀗ýTœyàlû½ý¿ÇW{<^þ·ú^±Ð)ßþ²Žöç”õ…8¾Îža8ü=Çfà© À'`Î+ÏÇÿæ‡Ãi ÀE>8ßè”WéèHÐ0Àùàßñ»{£OH€Ïgÿ#?‹÷÷,ë–ãpl€Aë<á2\¯4°‹=~D{Ý¿”ºóæ¿/T÷¿¨~”û¬Ã¥>¸<îz:ìöÕ&¿Æ¯j;–ëq½z­fp.Û”»_«îË]ßÇÿGyÎ8Ìœbæ¹)?ÀçÀ>ÄïìÂ)Û4à||ΗFm4ê³=ŽÑs'Ü?ûx¹ºÿjìÏGqÿLã¹—bÖ[^·À+Qç¸ÒòÅ÷N¹ÕX§™F}§yœ©¶i>ê+«±?Å:\: À ù‡õ[:ÚÅê[ÜŸÝû.µü`7ÃÒlϧÕA`¿®þ¤ãgGs×èéøÈ‹º{éø5©O{¼ooÁn¿:(”ò=íFVΚެó%ï‚¶3Â÷k\0ã˜'=/ı½yLÞ@¸·Ÿ4žWê1÷?‰:Ë\:ÚCm'õ¾Ôg5NL4»¥_oàü˜—éø5Û«u¸[i,{»ªgýi {åý¾Ó¨Ã}mY¦ À•ü£ÿ3ÂæZêøp?èsÕóêy—{„Ákqßµ–œ_çuê¶ä®Åý7â¾WÕ:ä3¡¿«[~è~Çl5Ö¡L±ÕØ®¯õ=ˆíü’ºgRoÆï %åÜõ[ÌÇøÿ¢ €¶¬g©+¼o©+¼nÔ÷RãoTu˜|ÜŸ:Ñר#ܨêLŸ£~²RÕ}Êò®Æý÷â¾7u¸u“f°û»Ëxߨ_-Wá;¿ænÔ[Öªm)½ú`@®\m ·Ùfü–®3ß?ÚwãG÷kãǧ ”4Û€›˜âs¼N³;ò³¸¾ÏÝZêvQ*.Å}«-Án¥Çû»ÜÀ{„Ãi¿xTÞG½ –ëS·v¯q¼ŸÛ#¤Î5ê7{ÔOÊþ¬ëh·«`Y»uŸÛUÝçg:> óûX‡Ú»Xÿf°k›A£^Ÿ:϶Ô-] À=”àÒmy3µ°Qκ–¿å ˜»öp(·¯ ÀÀc€ŸÆ6æÐ˜{е]ßZ‚m¹¦öFUøSåÒ"»xŠ\€O·_P·€¸!"ñ9u»ìüŒ[Ïy[º6oFhþ—[©ÛÚZ:Û§À—Ó`£,öº¹Œ7-ú Ç»W^€€Ç*ÏEý¤ž… _k{·J¿VÁðiÔqÊ%¥ÇØ»FH$¿pôº¹Œ­Ô½ù¤úÎr£¾³Ü' À€< Üu8ŸýXXJž`ü0Bp ½+©{¦õ^”æO€Kwåûg€K8߀`x¢p‘ëÛrÅv×½ÏGe&Ö¹„Þ7QÇYˆçÜý‹üí ðÓtüš`XxÌ|iêTZ|ë–Ô| ù!øk#4å®Ðï[~ÈO Às©;VS^¯|vvíøZK€`øbàÙ8Ư·„áÒ‹­L3´QÕÝênÏwãön:>.È ¸!?n9èäóÜzš¥™Ô¥kРøqj¿îæ¬ð;x$¾Å:Ì5ê 9|þlÒ2óCÛÀWß#4§pÝCízj j§Q$¯¦ö)&Ï2_€ø¸|à(##æQ—óhÐâàð£„J—¡æþ¸QÝ¿tB¾÷}NÝÖåÕjyã1e¸ÿ['šËÈ»{ç€Ë¼9o ÀÀCUNÄŒãõÝšm'òŸ§ö©¾§öK¯Úz¨ýŽ ý¶ “åu_ÆòŸÄã>¦£3`œ€s]çkŸ`÷/¸n°x.ðq wʧNyÜ)K'à‡r·å5¯Çãªûæb}è”/ñ÷¥ø÷fÆý½NyÔ)?;å[#7¤âÔ¶?êÏl¼þïNyÞ)÷ãÀð­ñšË-ËÈ·ßÄsßÄß¾Äý`@žšü'ê¹Nð4ž ÿ÷ßê€K½d½Çþ®ëp·ã¾OQ_yËûœŽ^óÛ¼¸,ã}ìãýÑ¢¾3/ À WÎ?Ö‹Õýëñƒ¿ø^ÜÞ®3vœËVuß\,û§,ÀS€Ûêï£N°ð8ßþu›º—Ùvµì“p½³Õýâþ° ðxàÝ–¿½‰Êì?à|¶ösËã® €¿´<÷Yüí¢vƒ€€O€Ûê[ñ·›ÿ€ïôx\öqÀÜ쎽÷߀`€Ç+·Í½û qù›<ÿÖò¸™ðÛ>ïéE y0ðép[}b%½4êopyÞ|ŸzÇIx¹Çº]Ôz¢ ðÄà•>AöRŸüî„à¼x›, €÷ûì·'g€çÎ0/ À0Àã€7[þVº/ô À„ÓŸ=‚ò’, Ÿ"¿h¹ÿj:Ú͸YG¸Û#_n„ÓGéè‰ÿÚkXx²ð£Æýùìç÷t8ºbê€?Äcj¹[óçÆA Œ Øle¾' ÀÀ§À?ÒñÚ‡ñ·µu„R×iNw´Û§ëqûAãqù„ý/Xx²p¨7#Àæú—éø`Í©'q_ž&`!î³ê QyÞ½Ü œ³º˜½X¦, €ÿDe)ê,7£>ñªO¡´ô~Žœ¯ñÝŽ0Ý §¯R÷zâ\_ÙJÝé`à À/«àú'þ«åÀSÿHåë{?UÏÉ%· ßm9\IÝ–á2'^™kï, €?µÔ=^§£WµÕ4žó3uG®ëp¹u¹ô\+ Óá¥\¿`àÉ Àùß|6u;m# ®§ÃÖÜZ>ûºÏ߈ۋñØÙ–×XŠƒÁLêNƒTöÝlË2òíµ–×Yí³ X€'3¿cÿµ¨{œ¦Ž°ÏɽѪzFÛñr>î/õ¡·}W–QïÛ¶eÎöY†,ƒ<â|^rëòût|ÎÞ2ßÞõ)üL ÀÀ€ÏK®|IÇçòÍ!8·¿žÂϤ °üÊ yäÆÜJ¼žº×ç‰åg§ð3) WέÂùºà|™Övê^ü!µ"- À À­fbÿüLG¯1~žº]`@€G€³|yÖÇtôzá|Íñæ”~&`€'.ÓL|s™›ò}! ¯…Ø_‹S¾`€`````€€€`€A@F€AF€`€€`XF``@€€¡àÝtt¾8E9©äyÏkd@n³ÇÇaå4eWÆ™ ø€A@€€``@@€€€A``€A`€A@`€€A```Î;¿‹ÿ+Ê$—Ÿ0À…À?Ë”)(ï`8?â ¦(ÓT–|õ.”%Ç.e Ë#_}8{s²»Z(Ê4” _{€ iÃ1Li”ÿ®Sþ/ºmÛQO€ÿè"üÌn˜w;åm§lÚÿ¹uôg”Y»`2˜µã¸›©{­ì¶Ý0^GÐÓÜõ¾ À/í€Éð6‚Þº]ñVÓÑÑ’%FÀèa:>enÐðD™é”ï-X7hx¢lµ„ß\~wÊ‚Ýp±½‹wÕ®H¯zà\nÚ=ÛA¼å)ßKé°¥·W~㣠O‚»}¯nÐðÄØK‡ƒ]åk¢ÿ‡Ø'ÿkÜ~ûiËÇàìå‰ouÊëNyálSŠõØ'oG°ìíÜS~ËàT9?픯qû–<±8Dö3Þ€©p/Øê¾¹NùÜ)?âÿgåG,kÞniÞ‰ðûG¦Iním뛯AÝ3\Vä‰Ñà¹Ô‹9¿çŸ``Z\JÇ[Ï“<Ú¼Ü)ß:åv:ìúþV¦Å_éðzßOqûs„$øü]‹}òjËšRÀÀÔØIÝî°ùúÜÇò p¾ÿ¾<´÷`Ë€€©QÀÊ"­V÷çkEótH¿ÓÙŽØ, À# _OZþ¶Û=£e-Åë}µÛ`€a»ák¯åoë}þö7–“iw`€)­²Ïú„ãX˜9ýJÇçû}¯^€`€I°–ÁÊóÃÞ‰@ö&BÙ½3\ŽÜn/mWs K©Ûâ›ÃØ—N¹y¯›ƒôYÿs¼öÿ·ßE»&,?÷€t3u§>j+9p/ À# Àœ‘…ÔmUn+/ì"`R¼é€7í`RôêýµSfì`Rôê-ðzûc×®¸øÚºA/Û-ÿa?öÇŽ]pñm7Âïk»D˜Dsò« À7ì`R½Œ ÷½Sfí`R•nÐì `’•nЗìŠ#žEÞ¶+&Ç]»à˜·€×í €É1cÀÀôØL‡×{*J.Ÿ#?˜àm\ðµ€é³”ŽÎ‡«(ÓP |Sh9ÁÏt8ú¯¢LryŸ÷}_}˜Þ|`W0v`€``@€A`€`@€A`€XøÂ[ˆí)æãöLÜž‹Û³c¼ 7:e)þ?ë;ß²MÍrÒ{œËâ ›oy½õN¹,ðxÙm)öâör#ü¬i}.uÊ­S†³ƒ* ¯ÇúîµlS[ùÒ)»-¯[þþõ„忬[\ï”ï.ð˜àÝØ®¥àÜÚúûA+¯ãXÇ4@Þÿ—ò¸S¾ÅßîõÀ¹\í±üÜ:þ«%gï&(0 À Odî~Ö‡¸_÷O±îŸS·»öI¸mæ#ÿh À_âßG=–¿ýSË>܈ûÖ`@ϼg®%çëZïGÙè”Öâ¹7;åA§Ü픕Æãr‹êV<îNÔÍø^Ö»x­~×ß–Öâ;ûO€³Òy±€ßƺôêýºSÞÄãÚN"äýBàñ À½®~‘º­¢ßãÿÏÓÑÖ×|ßÓØ/¿#8þ‰ÿ_k,3?æU:z­móúÜõ>ë]ÂòÊ?à™X—/ûKÞMíÝ b»nö Àã1ýZ`à© ÀùZ×*4>Šûï6Bc.ùÚÚzPª?¶,ósü}#uGR4h½Ž žN€Äö”’Ctî¾ü3oÑ.x)µwƒ¾ûd®O¾÷_€øâàç•–ÓƒFhü–޶ goË(ËÜê±_ Z?#Ÿ&÷*¯Òñi‘J.ëÿµe›^Æÿ{àÕÔÿb€Ç0·]óû,½v¶ý–±ßXÆiðlŸÇõ À»ñ÷RòuÇ÷#Lk¬O½-7ÓÑnйU8·joŸ€g&$8 À OU¾ÔòÜûÇö I½ðÌ_àå¿ Àë'¼G=p¹Þ·ü}7Bóì ¸ßI€Ç4¯÷yîâ_àÓÛÚÒàå– Ú¼]wƒÎ#C?«þÖ+Ï¥nk€/HÞmyî—tüàaàìWjoYý›¼Ù²Üf.Ý Û¶z{Âö<€øâàÜú¹T=înjú_p¹¶wÓ÷éðºÝÓà©;Út);ñ:Í€Ü À¥tÞyôé™p Ë;0 _œœ»çë^óÈÇ« :s†8Å>-soõYﲞ«§À½JnM¾Ýx¶kw˼ÅO÷÷›øOãÄ À#r½×ãö|Ü^«nçnÀ/:åy:y¦%”^`ÍÛµ•ŽORwÔå^ïAÉwZîßKG[sË65˽tØ*¼Ð#`7[n¯Äý—ZbÛöäyŽ_OÀgDx"ðEö,Bæ8ºšú_w,0Ë-±¿Ç4dæ–ò·²Ÿ`€à1»³uºœ¯+^€˜³’¯CÎ×òŽÓ@S×SûµÐ0 ƒ À 0À€ 0 ƒ €¤Ãixe’ËK`E™¦òÄW¦ÓͤeP™ž’çZ^ôµ€S™é”åNY´+`p{r𯑟ÿ|̶+¯Ï»-ûr§¬ŒÁ>Ø÷æÊ½/K±N»û·ÿaû–ÎyWâ=ý[×Ïx}òûù­SþDÙô362W;eá‚®{þî<ôÓd«S~ŸAΕð·c¶moÏ`»þƵاëc°öâ½Y£÷e9Öi¯ºo?îûÛí[>ÇõÝè”_²ó—ÏvŸÃ÷ñËÛ³Sæý”ÄÍ!|þÎÓŸøîL¼ÙNyº-HðÙÙ£Ð9ޏ×{5®¸¼Ÿ;cô9̯÷.1.ß/`Œ-D:W~ž¦ÃÖ¤aàÜeõF„ŠÜ…p¦ÇãrËÖõx\.—ú¼æÕxÌÆ)‚ÇrªuZëóœµxLî²Ûìæ¼ZXÈÝs¯ÄãÛèå÷_iYþZµVz¬ÓZìÇëQfûà«qßÜ ûg±Ú'›Ç_Ní]«¯ô¸=öÏlü¹ºÿcµž«-Ÿ•­X‡+}Hýþ¦ûùbõúÍm\®ÞÏ-ûñ¤ÏgÙ¶o=¶m9>G;i°nê‹ñ:ßâu›ût1¶½m]Vªe­ð]XŠÇÞHG»÷–×ÞJ§ku^ìósÕ¾¼ÞòÙ¬·1ίµ¼ÞlµœÕ–ïfÙ¾KÕræ[ÞÓ²œ~ß͵Ôí¹p£e»æ«uÙˆu;Is7âù×ú<¿þ-]ð·tõ„|ÒgàBYŽp¸~Š xV8WΧÃò±¥Âz7v=ýÓ(¯•Á¼=ŸyÓ)Ø® rEõgã5ö[*ñ¯[Ög¿ªtî7þ–—?þ©±~¦ã­Gó±oUË|ß²Ìg€ð6Êóê1{=ð£¸ïÑ ûf·eÿ‹ð\oëBcýÿÄóæê|ÿ½t¼ ôŸû=ï£'-Ÿ•7UhÙ«^«¹®ø<ÞnyÞõë×¥þì´}>_UŸ‡~ÛÖö=x—újµÓã5—«^>W¿ã=ÈåEËóÞ4–U¶õvc½~F¸{ÐòYXàûÞö¾o|nvb¿7߇­Æ÷¼¼×Ÿ}Aí[ãþ»ÕóËçµ|¿÷XÎzêÝâPýνmù®·Z~OªïN¿ßæ²Þ[žßÜßZö헖кղ÷Z~çæZ~ÃÊo®nöÀÄf~˜º-Ï QA.áókUÉڌǽ¬âJ„‹|ÿͪ‚ý!ž¿·W#H Òµ{¯ªߊ@°V…Îê±ï¢²y+ø\õüÇñ˜¼MwR·Uh)Â߸¿YÉnV´oTˉ`ß\æýjßÔïáÏ·¢½Ü€ ¿«ñ¸çÕ{R^ú·¯WÛÙ\ÿæÀL»qßJK^®ö÷rŒîWáf!¶·Qiß«BÚN¬ëZ|&þ¤þ­ª+Õ~lÛÆ™¸ÿNõþ-7¶ýEêÀµ¡2ß¿ÝØ¶¯m«ß‡æ÷àCŸuž‹×ù¯[^s¹ ½Ïb_ÜŽç¼®ö÷\ìÇ[ñØUXß«‚áVê¶þ—ïÇçÔm¼W}ù~=©¶óvu'ÅgýwlOhìrÀúZúzŸÄþ^©Þëïñ¹_Œç4NÄìWŸ•ÍÆûó»:7h^¬ÞÇ«Õçàzu‚a¥ÚžÏ±À¿ã»w)¿ú¼Õ'Ëçw©úÝüûb±ú\þŠå—“pת€¾ßr’ |Vfâ·öwüöÀ§ÀóUE·©´l•››Q±mV×ái#oéIQ!üuŠ|¯qÿzåÜoy±] mY¯ó-‚HªÂÝ·2uôYT^K jU”–ÞKÕ{Ø6p€wÓà-£Û —ªŠóÔmYüÕXÿ§ÚóýªûsøÒ¨äï5>ƒuëêlTÐß÷Øßïcíõxÿ7{Ü_Ûêtêm¬ßÏúq·ÓñVÌtÚ¶­þ.ÄþyÓ²N»i°Qß·²O?÷XŸý>Ÿý­Æí[ǽïq2áÇ ßù™>þy¾ßÅþXêñ~{Â6îT'kjë½ß8yÖ<òô”¸ÞgËÕ}ã;ÜìÂ]N„= IÇ»2TŸ£ÙØÿŸZw­±œÇéx”ò[6–'&úíKx€\ZFv[þ6›º]íÚ”kK ò“Ftí/·«×5²ÍV_×»Þ(A¢-?Êül*žG9¨Ã÷ªZ*®«}öåF€œë±}¥ ìûßÏåõ%àn¥öë…_¥n‹p©¤?ŒPS–5¯uÿ¸­Õ¼ßûwµG¨ÙëóÜ¥·qA°ã$ÉÃðõê3Üü,Ýð$E¯ü¤ñ¸Òz}­å5.¥£½öz¥òÞÌž°©Gà»wBHî׺ø&þ^oã~“UwOøn—ÜÖ•÷S¬ÿ%/Tß³õ–ò+õ¼¬_­?GWúœ+''>VÛÖö;8רŸ%?lYï»~à– q£O¥¾®nÇkÖ×®4*mû©÷(¬ûg€Û®‹k–>¸´Êl¦îu²;UàY÷'uçŒ}žzŒ|µ±~½FQ®¯aý–N7"ôµtôZË_Têç߬BÓjµ{©{ êV#¤€·Ò`#/÷…wy€œb]?6¶ñu:Úõ½WÞéóùì€wø,42o¯¼×cÿ\êsÒiÿ„}Ùë³uR¾6À{¸|ÂöÖßïòØ=ðÎøgŸßÀ_g€/ ðÞüåþ¨?G'}?êÖâ~ïÓ–÷¿_yàp À§À½*m?«×(-W£b–+ÓK-ÄG}ð ó¯ž6_­*ãÍ2×'—.½S÷ºÊüœÒR™ƒðýÔ~Íb[‹U©¤ß0—Á§~Æ>™;Å{»ïG¹®:ÛÒ⾘º-C·«õ_¯Â|ÞŽ¯'„µæú—.Ì7Ï9÷ÛÆ+}>·åØÕçs1µ·<÷ À·û|–Î8· ¾´tÎx=µw©®•Ïϳ/'fúlãip¯Jï«ÏèzêÝÚùë„\ÿ>õzo—Î oTŸ¡6_S·ø úÛöì7>Ó7ú¬»°ø¸\¿û¸åo¥åäiUûÑÔ®¦ön{[-¯ùé ðnêÝz½ë±Ø'g/cr7ÕÏ ñ<þVlUº¶]z§±Ý'à².·û¼µËéèu°EÛuÉ9<¼‰u/Ÿrýg>Añ=,i¼Òg=ïE…~ùð Û¸Ý°¾Çg´×õ—Oú|¿J÷Õ‡=ÐíÔº¯Óà}‚R³ýYàåÔÞ-»|¶?ÅcrÏ„/}¶óÛ ÛxÚܼ¤ œœzÓøi.g¾åw®¹Ïf#T¶]j0¿#g€—ûœ8('ÊoÉ‹t|Tö¶e]O½»¬¯Æ‰Œ•0Á¸ÌI9ÈÀ'ƒŽý9*›«Šá«FeõGêŽÄ[¯ÏëF¥m!^ïc£‚W*þg€s¥òw¬ÿ|£R\F›màæu—%¬m„‚§©;"ëÍF,#õÎ5*¸_#„ÍŸ2—ÀzRWèÒ5»y½öNK ºÛÿ£^WÛµqBX+×(×ï÷ÇxÍÕÆþþZ¦ À½¶ñFãþõ–÷¦ °V¯ï\õ>ì7¾_?«ÇÎÄú÷ûüí XÍí‹}xŽ(7—º£,¯œSN©;BûjËw¦ ôô(µ·ößnœ(8«Ü ÷'·J€|×xô À—«ûö{œ,+'´îŸA.·§ã­ûOË/Ÿçf÷åýƲfSwéåÆç²|Ì Lt^0D–ܯ”Jëå¨çJñ㨠~l© =ª*¡wâqŸã±?ÓÑé@v¢"ø%^c?Ê—3 À%0ýŽJâÃ(åºÚ[ÿ¿öΪ•Þi㈠@ =@ @ D@ @ ˆ @ Q@ðÝüï3ßN‡d7-…˽ïó;gPv“Ì$ÙΓd³€üÙõ>Ó\SþX.½“´bÛ.Ò}5»<¦\l)tþöe:C:âW; Ÿ{Ôƒ%2kÞußÛl}»«ìÜUm¥‹ö²ÏQ¦Ù!àr¢cÊŽ+ÔÑjŸë¨›>y…p`êÐÁO]‡øüÖå/D;´Ýn¥¬o¦Ý~…žÔaÇÔaEÙ~ŽrÈ@Àµj£ÃÀ²»xK ¨Ù¤/Týâ|ï¿;có²êë窟˳ó§&Ÿ[—ÿøA?x ezE·Õà–}=•,%¿@y®Ð—l^³j0kß´Ë]~UB!ä_a3ÜÔ¥>GǼ òL>@|ØÙÒÊu«íuˆ––û¸4vé<à\ŸÞJBÙåÕ±ˆíó|N”¸>sñ%ʾ—FÔn#Ýj ¯ØÌP´<Ëwà>.‘ÝŒÍ1û–ñyÞLc þ“:¸ACÏî#==c6ŠÏÖ|[…]m×»²´•{—-Ÿ ØWK¬¿w6® .Û°K^ÁdÛg >Ò6Ô!jÛfgTõƒÒ_Iì³»®w×ã"{ÇQ†øòÄ}œ9Œù2Ö¶lòD®ÃS÷qU‰…[pâÏ Óžb6Žáóé‚¶¤±ìpŸ—åÙqÙîоü#°wÓܧvPÞ Óž·Ðž¤]m¹âgïÅÆ•ÄûtŸÉ½ôÜ…‘÷/_©~Ôˆä5ŽÏïU»\ä×$!„B!„ü=äíO!„B!„PB!„B!À„B!„BÈÃ?ìŸÛæ»l !„B!„B!„B!„B!„B!„B!„üdü{!ý;`ý»)ýsqþ½°•Ój%Ëÿ¨/×#¶•þpýþi&PïTWU”ɾK¶<@ZÍo´ï3õYþ‚ò”¿¹Þðuó/½G”l7¡¶ú7÷?B!„?Bý×që~ïˆúüëxÂïþçôé½'íÔŸcÛØ¯ãêž#¿Ž³"–Qï?I´4P¦#õ™oó÷¤Õúû¼`?vƒÍ }“Í_Çù7×[¾nýe÷_'¦þúi7¶­þíýB!äpñëxûu,©Ï¦~/¿ŽG×ÿìNÃ{¼ÍçõÔŸ î÷lº pÿ„þIAïO À+(—è‘×ãüD,ÂoPÜж"Qö݃Y«Õ0!„BÈ7RGPtøßþ7ÿÉ<¾Cüd(€ÿ®œ˜˜˜B!äÀ^èÎþ·úÉ`;5ÀÛÃágNýŒ³_~*3¨ãøüg~FÚ/ß<ýuLÚ¸Æ?{ç~/å¾ ?ã·£Òó?~5(úôªøß#Ž#\?‚2<£<»®÷™ÌØ#¶u`ÿud A˜E¾£Hóy\F|çg-ýìýŽs×;“¹ û|Þ·H{ ?GLZ‡ÊfÍ)Ê¢Ëx™“§ä{‚Ï`ÿr$Cz'.ÿ}¬¾Ž÷‘Þ êx×eÏ©·P~»Záéëú)á³MÕv6UÝ=)Q·iÊz{^PŸ v>‡z×õ7™ØåºnÀÆe—=ªpòÕÕµ»¸FVn´M¿>ÁÿB¶ù6w Û|™ý’ýÅ‚òN(Aý¢ú 0‡ÏžQ¿*ñž±‚þÛôy+€ë›ôýå$p¿‘öé}¹ÔG¿Šô{ûNqí»¡ú‹ÝËøüé\Àß©xmÿ 6nç6Ÿšj7Ϫ݄ê~ uøˆt/ßÒ÷GT_zT¾‡-ϰm3ç>(׿ÝcªNцüZ'„BÈ œ#`ýbÜF@ùªøiK]7;HÇ8oø\‚ÿ† *_ æv•Y4yu!¦6è¾!ß’)ï-ŽmèKx‰ÏïÜÇ™(ý ð¦ z­˜´,+;¤Â/o¦–ñÙ0¶pÝ„‡ˆˆ+¤yÀy.0¨QuÙsÙóF½ÃOâYÊ·:yp—Ï!À}ÆÿŸ”ÀÐí`L 鱿”U€¾‡ò+»œ îg`»¦âiÉ}|Xä³%öºh_»(ƒÔëŠi72°²ƒú“ö:’cc 6v6^âœyØûŽz=‚€©Â‡Ò®[øùbl×}"dÛ³²MÚûvN™e@@ö 8RBE|q‡ßwÐotûŒ±©úÚ®}FG#¸‘#åþ¢ÿÖ`OȤßoáö†¼¶Ñ';øl&R±ûc[Ý3¶p/~IÀ“æ¾¹£D«Î§û»¸n¡íI>3f0CÛ¶hÿºïw`ã62ÞÑž_`˶Ôׯ«{Œ´ñá‚Éç6]á<ù¾zp?cÓ?B!„üe,«ì³¤`ÌJð"`Üœ¿¥Œ~Ÿ]ïsÅ£F$F‚ú®0åµ3‡2›º£>« »`^#ÑçW®w&S>ßT‚µ‹<+¦,З͵M%&ýµzFlçˆø6ÔHB<–ç«òýQ P/™²ÔUYÇ ü2ëÖÌç¸~Ç»`X‡MÚw"ßPöp -¾„cÛŸaŸÔsÛ´ç런±a„ßr ?ØGæƒ3¡%зhÃv ë$Òÿ,v ôDÄu—Ížçí0ÿѤ™B]n Ië¶R2õ—ÒïË.[‰ ÈŒqÝØ,«bõgï ‘ûÔa¢¾Fž#¦Ï&ŸusµDûÊV™õ®™>}…~Q5}çØøê9Ðäñ›su~CÝWÌ XØ|ì€âQ`À‹B!¤"÷&àùjl—ÀŽD™YDJð{8·£‚éšËfx¦Ê» ®¬ ¸1ög° H&Ø[vñ¥éÔÎF°ç ©¬oˆÞšz¹3é.ò\ÂÿVŸ&"ö-ö!~=“JPMþz÷æ ·jDÍeŽp²¸–#<¦àk- ìòѱ€€²L¨Á<Cª†ö\Šä{#€CçhÛRž³}´÷PÛpÅû ÜBì.ºø|ÃÀc‘~¿é÷öÖ1¾Ú ä?£|‘"€eàÁÔp=ç^¸cò‘vc}\5ùÌ‘ìàÙrÝãíjy„À²ɧ¹Ç|vß B!„ü‡XWâwX»4§à§Èÿ*.[žxê²ew!ÜŠ`üîªëŸ(Ι 0VÞ£H`Ú²nFð‘ då¹^}ÈÒÌõœ4%˜œTåÝSh6úv°­Dr̆1#ÐÅOåˆ}2+ûÜÇË©ª7?˶a¡EŸÌ„ޏl¦{¶uñÙ¨ë)¸™#RÚyÃ¥ÍÜ66#ƒe´c_Æc ʼòµXL'Ж®Ëmðq¤þCÂ5„/¯8ï6+¦­ C§Ö_LlétS…WжjšÇ‚úô×rª´}òþwi7×Ê÷GF˜ÞÚÈ­©‡<_½GîÏí‚kõ X+ÒG]Âà !„BH%—½®ÈÏBU‡˜vê3À?;ñ¢ÄÒ9Äßæ'°gÊõ>ë) ‘•ÿ«ðË–§EŽùœ4eFsK‰×Y—Íb-*a4™œ6"8f߃Ëf”ûYb?áû¨êíV £qÕ.DLÀâƒu%’ûÀk_,€c6Þ)CjLµå.ÚÞžË6±ËÀzÙ}¬-mô)€Ï]|§é,>ÛtÙ3ì"†ç¸ž‚¾ÏÀD¼øß¬É§¡̺ðõ¾Ë–`Ûg”/rÚÈâp-gm›˜B!ÿ§J”‡œþ øØ.§A³1 Ö3j*˜ÚûKðfb°—æÊèE’<ëào/°áAf§"¢MϧRnis }´S=8rfÚøþò >“Ùl_~éóu8µåŸpáç –1`4 lmá—ËßúÇ Ò¬R‹vPcÌø]”žá{Ž ­òµ³³—½r©¨¯W—¿y—Ã9í€È õGÉ?öì·ljÛ7jP£È#t¿1÷Õ¸†ú»È)w)QÇž·ŸMHytá/L>òÊ«X?µ›žG|ÖUeýŒž ôgÝÏB+R(€ !„Ò7""|³€Æ*8µÂâ«°ˆŽ®>5•Ö ¸æ²w¤Î@øŽ©àjù‹°Ì¼¸ügS°;ò}ÝÈC·*ø•Ùò#üÇ~Ôe Í0_ªóeçåm—½&¦ÈO!ûRv—Ýaï!þ}½z-Ôílœn7c¾•–Måƒ 5è0ж´a">#€µºmž™4åYÈKÍŠË– Ký–!¨»|åYî •æ–8È{Áe¯}*Ú @„Ôì(©Á† øª¡üZ$àÚêÚ:Y©p”#€%Ï5ä×tÙ«¥¾ZËà“î“#ê³–¼ºPõgó­ºìµEóø{Æõ¾Â*e í õQwÙ ;Ó¬Sʸ¶ ?¶íæHµ©“—­úŒvhËo.{G÷ˆ*ûi÷ `B!„ŠÓ¼Ã>kÛù,âíÅ”Evp~U¢+U;\ûdÒ|3×[¨<ß\|–½\q½›&ÉÑ6‚E^!òLå¹Ñi#Ää]¶¶œ×»•Øsèz7ëGë@Wû¶ãÒ–Òo˜ú|Rb¼©òè˜<ž ̯áËRŽm﨧±D_¥àjäsÐç=†˜B!Qdv&﨨 ¨ázß/™BוsÞXš>ïY  #*GL¹BwÒ.!X^D0XM,oÍ…ŸãµåqgÍÊšã9¸ÉWì«E웅؉-+{'LÚbO) Øòfýüÿço=§M¥ÚWIÈSûp ?+9í©‘èÃØçU´Fàóø{4±ÝäÕ_ÈÆ©}z“8ÊÆ7‹ø¼”Sǵˆm|.iôÃ(ò¯>ŸƒÏú}¥Úü<(k9ÒçÅóêššûøNÜF÷©X?‰Ý·êès‘ÿKýIÌ»?N™¶6Ò‡k(Ç,Òõ?}/œ*h7òù îÇã9}¿”Ð'c÷ÊaÜc*üj'„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„Bù“ø×G”èB!„B!ÿ*þ½£¿ŽwWî÷{!¥ƒ#ŸOûõgç›l ùпӳÆ&M¾ÿ~Ö…„óü€Úê?܇ï»óêïúy+áÚ#œK!„BrXFÐtßW!†ß~“À?:øöùœ¨¿×á×›5ùb^ ¸ŠØûC¢ìoÀÖ¯À„B!CÄÏÎ<ý:ÝïåÏÂðð_|·(€É7ñž(€ÿ”(û[ð;0!„BÈ×Qu¿ghÖ"äÃ7 `_ž{¾Lc9å^Tç…_ŸûcÓý^V˜÷|³XBš~&u2§O³Ék"|—U9ñ·3Ám¿ÿ:6÷¸:g å_Ø©óPð¢ë]Âî˾¬ü5‘P‡ee¯/ÏÖ¯cÖœ3…2ËÿJ‘tòüªÏ[Tç…Ê8ù\üXøue5yÍïÆßýÚg©«²Ìâz]fŸÆÒÜpùÌàœU¤[7vÊßÕHÝÅúÅ&Ž™œþk/Ò|;»Èéâ¿ œÛ ÔÝìóù,úGÓ°a uY.À_7Œcõ§ûƒøÇ¶‹:êj+Ç·#ê·¬òù5&€K°{ é”)€ !„BÇ ?|òØs¯ø¼ƒüýï»QðŒÿù™ë.ÎÝ ¤è~Ïp˳Í9ú‹JSÊq¢‚[ N—lñå¿ÃñŠ4%m-êeÆvS•ñöx‘t`>ï©óm›s;Ê_/ê3±í¸ ~$ðÞC¾ï¸¶†Á‚s|ö¢||‡_˜ Ô•ø%#fÄGOªŒGFØÄfõìÌwK‰ñǹÊë)P×;f0ä"Á¾òHÁ¶ÊûÿCb§ÔË©ë]QQõù¾ =k;—•¸ Õ]Ëó+|þ¬êåÊØÙH{92ý@Ë9÷}^[ ôSÕ¦t}L' Ì´UÝ»‚_¥®J.{&tE ³®ñAyúóö?!€_Pæ9øµŠ2>©ÝÎf}ëʆ·‰ø6ÎÂ7Þ¦Ø:«ü±‚óT¶¦IÀmÔår`ÐéB}ö˜Ó^fLÛt ôˆe30ñ\pßY ôõYØq>DìÓ[Uõ×PþßB¹«jPá}´„se¯¢î­ÒeÖwÂe ”#~ Õå5Ê7«Úð©*!„BIäMQ>0~pÛgŽGèJ9öŒ vJHˆÐÓ鿸´e•¯dõ¬d ðè€XfK5ëFTKðm— ·#v>Bü÷#€ýß—&º±-OßE>­Ø0BRêDûµ‚¼EØËLÛ\ =mõð–9oÕø_Á ÈJŸöå àó¹ `„vD>ƒUøÇŠ9§ÀS.¼šB÷©ñœö2h/ƒ àl ÕãœËf_cì›òjÿÎQD|zc>_‰œ/8ªîž÷£5”m4QO¹ðìrÙe³á„B!$y°]×;3ñ•Øsí²å†-^®| qÐ "k*ý«ÄòÊìÉ=‚ïÐ2Ì~ðeà¼q—-£ ßV4T üš"€/”Ýv鯷’Àû0"äöu°j‚u±£ƒ€}Ú}|Žöuz¾Öô+€ís˜2“Yɱ;ž­lÛ‰^¥`Ó=PƒÒÎÖsüѯÞPå¶yo™A˜KÓ^&súï x>ǾÚÂeNzsjpË×çR¤>?+€W">=ˆÜÖ Ò ð¥ø5V—¡gŒO(€ !„BgÃå?ßW$€ „¶ou~ú9ºG~%•î{ÁÑPäqby}yüÌÒ³Jç "¨2 >Ê•G9‚5$>#€k±ÏƯ;ƒ6ð6êàÈøU?3ùŒÏį÷9ƒ%VLö+€­0l'„~ìË+óLd%ïX† ‹µ³åðNBÞ-Ó^^í¥4¼ìŠŸ¾+Hs ƒaR>YÆ=9D<“Øb÷îHþ*Ày;½ïPB!„3êâ;§¾~Ãrƒkckp3±?¤àJrEXfìC+9ö)€ !„Bò™qáçÉt ¸6@º²¤3ö*ÙÈf]y-÷qé±».[Ê,›…žMöim €½ø÷³~s¼Ÿ”à”@wÜ7À¡`ÛÎî}µ®ã³™€m^,Ü €§sij_¶.Ëf«ðëb@X= ÝVÆrÄ“<ïùà³x‰xG‰P[&YRÛÌéS°ob,3Ë käu6òª£˜XÚ`ÛvgMÝ-FÚ®´ë–Km/ƒ `é/‡‘öS”îRdPn×ø=$€ßsÊ÷•Øá~z­Ü‚Ë6пžää;ãâKȯ(€ !„Bò)#0{q½ÜÔ]¶cm]ÁË‘ÞE‚ÂG÷q¦Âç~ÆïUòþ§lŒS ËÊóçæ¼f@ ¦è²éÐë}–°¿\„nI §Sßz-àS=KõUXdá㯆‹o´Tð;Õ6¦Œå9nyoê ÎÕ~­¹l·h1*¯F*¡-eÎÝÇ f\¶y[‘–×{Ù×0m¨ú*åØwãò_§•' Fàó×»âbÌe¯%?¢œÓæ¼®±s.ÐÎ+JµT?—<ÆL]< ¯†j/בörfÚ^Ê3öGA««€}e51žõï‰H±X®›5‚ûõ›°lö¶dl–¥M¼˜6ßÔ¥ °iŸÊ 0!„BH‚Xíâ8Áñ‚ l!ˆuÓÕÏÊLªØ[œû¬ Zf   ߪº°;S§¶—[5ȵ”ã\xQz×iÿÊ Ñfª ɵR–=ÓWÚé“—øýø›°˜¸46kÿ_«>³Éw õ!íè\ ®PB!„$àÒ}Œm’ö95m»}¤;‰t/‘î%Rìõ; è¤þÜÐrçY®’æ¶ûø\æ‘Ë÷¯eF¥óAºØ³…ÀvÓî»È{RÙã—|ÚW·Ì£œ¶ì+ñ¾kü kÈS_?glÛuáç„Cõ=ù~_»ð’÷&Ò‘¼÷~°çC8U#ç¨<§ n´ůc9ƒ>Ç*¯5÷ñ¹àTû,ÓyûYǃT!zÚlK‘“*Ê)}AÞ]ª»QÔ½ä}äÂÏ’¦´—QØq’ÓFʲ…óvM¹u_:pé;”àÞ ×žÔv}cRÙuŠú3õ«¿Xë§#}{ÌÜ?ÖÐæÚðÉtä^|‚:¯åÔåÒ9sÙ»Î!„B!„üämrF!„B!„PB!„B!À„B!„BÈÃ??ì7[ªÐ„B!„B!„B!„B!„B!„B!„BÈyíg®? þ}¥þ þ=¾%ºùKØt½ï[ýiïÕïö•w¨ÎÿÅþ®üCm¥ˆUôá層¢÷)‚í ±÷p;¶ÇWw¤?Nð=K!„6Üïf?#š:¿Ž7üÔÇ+ÒöÇ­ãf>_A¾Žàï?Mù×qhÚUeký…~ö¢éÂýÞ”ê_i+yŒ¡ÿNSÝ-#ýæÓ´}á_ÚU{ô×q=dý¤º#ýá{ùK!„3á:  ¬}°yŽ<öèòÿŒnÚUÁòÄ_èg€ÿ|ùë8ûƺûü/íªý“D'ðŸÇ¯°zøuìÓ„BH?Cw§ÄéW `Oy<Ðíÿiü7ó_Àbëô_.¢~J_ &ßdáÍñ½á„BH?Rüì~Ïì|µö£Ó]÷{‰–Æ/ã;uÙRé'÷û™Cû¼ð"ĺ,§¾ÿu¬òñçݸÞe׋æœÝHYðùþžÂßs*ÍU¶%÷{ ¢äåŸо~–jexW×ïšëS°¯c¿ùÿëâïz ße¯¦®í"ì•ÕÞ>¿~òûaé‹¿®?ùýjß]ľ|¸Íð†BùÈ,¾HåËü«ð&ò85_þ/ä¶Dà üR ¸öç¬(´ªÒÛRÆ* @6 ¢Àe†¯©‚áGä®ÄÅ;Ê!y= ìÍDûй‡k×U€ºÝ‡®¹ìí]¤µƒ ëɧ۸¶ ?¯«kÇ•Ðç¬@h¼©rL Üd¶˜‹O[&àÔ¾\SÁÞJÀÎ.D„“þórŽ/ê¼'¤uÿÍ¡ì4¯¸lUDKµÉë ŸW]|æ«èSÒ–^Qÿ(síë~\WÂíÎ "I»?@Þ›h_OF€‰OÏq^ ~ë&à2Êr`>·u×PbCÄ n£-#~»8oeïDpÓÅgÜ¥ýéAÝ÷7W×å?¼¬l¸…?[JÌO®½D~[&FŽO—•À¹Fù¶qxs½ËÊ×÷±+ã‹y´Cic- âØ{b]‰&-ôÆñÙšé÷:O©ÇusoyÁqsu7Þ' NuTûoãš®‹Ý?/Œ0}wÙóù+꾿¨¿a?HùÛ.{d åû!Ͼs#~cö-G¾7îâB!½ÔœØàü³¸ëÂ;AËèø“ëÑ:GÐ3nÒÚ0›ŒëQñ ÄÁž Æß\ï¼ zYØ Ž~f°ŠòؼêJÜ8,¯pà >„˜ ]±»k‚ÿ"|ˆ¿ç"yH½¨àRÛ5†óŽñ÷#‚9;Kql„@HZ5¡DE¨~_•@oãÜ “ï>ŸJÀ/Fð—Ñ.ÜÇçBÏL» ²~ð»ûø m;¬K»WÂv͈-fÞTýH_8‹Ôw‘ ©<l}ZEÕâ]ú¨é›×ø¼ò \FîLwÙÌZ‘¾2׊öM߸ äñÖ‡¾0Ÿ‹xÛ2÷«À}ìvV"mOVÙèz_Rut,A¼ÁŸ¥@ý¼©6xd-Bý@‹ßzâwÇ»û8;šzÿ<Ëù~Ø5}â*ÇÆA¿ì½£ù~qÙJ™aÛ§ÙÇõ)¾'„Bþ3œ!è¨Y¿G޹šù„@ûÿÉG™IÜuñÙ„õQ9ïzg2ú pö"Ak(0ŸB %ö'ØcÄÔ‘\+‚-U?1¢¹AЬÖ\Ž]R»Ü³¤¯©>pËÅŸ´õ!B±9o6AÇDáVàš9Ón†!€oùˆ]v{ˤÝF šé¾ ÔcÈw x-bSLŸFÊÓQíå-r^åOàÙÈÀ€D(Àkö¬ëO|2Èã¼¼i'"´W#çé2Ìç´½c´ƒ’ºÜ Ýß›ú¹1‚+ôz«…Ƚs*°iÌ¥½>iP¼šð·p,#siääÑèöX;‘>ø¨ã's? ¥¹dîMO.{NYf|å9Qô9Ì)ÿ¨yG‘Á)‹Ì†¿¸üg¢íwG; ‹îŸWʇEß96J øý°iy+R>kßNNúRÎE†;„BÈo\¶„VtµÝ`»ÜÆžžDPÔ5âtZ±­È¡‹2Äà¡Ë6ÑÙaB€³?`€³<@€ÓìÓ>‹„·*˜T$åþ{Ї à‘‚ûgmÀï‡fÎ÷ƒµÑ®JYKü~XKø~è×¾Z}š¼åÞ„BI·!€e£»œøÞ}Ü@G0?¸ð¦Kd¹l†#´ÔW6gš2Añ¤9ï<1À‘ õ$ úº»ûfr¨-é–Ù´~ðiDd޹ló#z¦\M®T@Ü Ôñ 2k X|qkR¿_%€eÚÛ@ûjaÕ ´á^&¿ñx'"¶+7Oø{"Ò¾dž"{†qP,}á)0hr¬Ú¹µWV‰ìD„À—mòË0pÃ}Ü}XúÐë°ÌÚ†fOŒÈ”4"èÊË—-—×>ιwž™{e‘nª{Æ£K[ À)÷O¹O=|?4Ô½-dã©ù~8ˆÜ//¿Fs¾ž\¶ÀCľÙDûb³Ú».þ8!„B ‚syööê“X‚rY Ý0_ô÷V£îŸpž™A>E°6QâϹ ÓG$åÝž6‘_ÞË8ƒkŸ§ÒÝC>Ó*@ZȱoEÙ— l*[F]6Cöì²×¥ à1ä÷„²5ðS^Ë1xwpÝ´Ë^Á2«„€¼ûvç\*! gáßÏìh„è…ñ太Ë}cç°°E°Ežo–W#•M`{{ªJT>C˜5Ñ^_\¶+ú°pMµu”gÆ…_ù"íS6Ž›-o ¸”øŒžW}N|¼mD‰µ·¬ü¸‚Ï×\öê-š¶TZÒ†.]öLêg°Så½@yì«–êCÀú>v ;&ÔàG; ”.]ï,¹¤iW,«Ï§#B÷@Ý;eKÀN –'|w„ð|âý3õûáD Yõ÷Ãâ¿vs¾>kß«±O¸6ß„BéCK ÕI¸¾“pÞŽ Øtôàzw¾w½Ï×ÊÃ¯æ¼ ÷qéÛ®9¯‹|íèù¶ Ž%Øiöà” Øt^/îã2ÌûBTTP*ÇÒ—þ±Dìß­IïÖ}œ¯ x{3ùêÙÀU×»éÕò”™$ýê¦]uÞZD‡ò|AàWú,/íË™:™Uì‹ñ× êd˜XDxÛ”óÅ}|ž¼ä²wо+AuœØŸ¯\ï2ÙÏ `‡6ôdÚÍ¡‹¿ÖÇ¡Mékž! ÚÑÔ2ýñÊeKì‡!€DoG•eC +7$º½!=ƒ^Vƒú~àT_Ÿ äõ¸–÷Ø.úri@ì\6»º<€–¾Õùß;ï‡é>¿ö÷´•ûî´Oîã*B!„ü@ÆPŒˆÂ)"µ„ó&\xs%¡Š´>³TLòšrá×Óôc_ˆ\7>$?7^ѲDñÍd 8´vW Òª¹´¥%Íñ_~%´™¦ËŸÍ«üWvÙl]éÊZC9' |UuÙL}?ÈìÔäú¸Úç5“ í¢‚ó†½ü³œÓÎÛî òœLðÕˆÞ;_Sïü~øþï‡ûd ‚ËŸ !„Bé?|@7üyöÞnJWwáç ùø™ê3ºB!„þ™ƒ¸kÐÿ¿É›_2ë——ú™6¿œZÞ͆}Ÿ©·öëÍ¿3tço÷ïhë‚ß©yÝ}ÌXtÃ{¶n3„ófÐæI%ô§ú?Ò& !„òC(ã‹ú_Öö4 ô»£.›cÍý~mHyÎÓýÿìgÈÞL›š@y—ÿ²¯ö~'_$€/ÜÏùÊv¯ßË»›Fü¾MÀòîàeGRÙ Ô!0!„B>Í$¾¨×¾1 œAžWtÿF7þ’€pP{ø½4 }y"k yìG®OÀ~è&ÊáNDò´>œØU†/|Àzû¦/7Ô ‡øQ|jó®àó=ä¹Ès‡C™üy;ê³ê°ÝûrvÄð4ìÛGÔM:!ût½­Ãž½H½ÍÂÎ<ÑZC޾ζ#uañe¹WâKêe¿7à»MS¦Ôã!òš3yéþ0ªü¸é‹ð_¬½M¨~8£êSÊ[RýnÛ}\Ƭmó¾<ƒÍø{¶¼#Ýå@ßÀ9›.¾LZÚÌÚL%á~7<ß‘þ2® å½…{D?ÌÂ'(SÌÿº¿GúܨjÏÚF)§ô%Óô}t×¶õëóÒ&g#u¸`ÎT÷ÑD‘¬m”¾´ëGs.¶î×(Üûc¸„~»ƒs—ßI„Bùb|ð†bAËŠûÜÆDEá(‚ƒ[ãs/ޝ¯8tð3áü†À^ž_~2A̘˞Eö?Ôïc qÙõÎØ4ñ÷Ëže~D¹u^÷*¯åGmßsŽ}yÞæ.òxDZ]×;£•"€·Õµw.[’¾ë’Ïú½­‚¶Qõye{Åßû*°Õåí mñi+’çƒÉ¿nì¼RAò£Ê÷0ÁŸ (Ë«òÁê¦mÚå‰jc7¸æEëSû‚æ7•¾>o2§Þ¬žRå½UéÜÐå—„¥|~¦Òy‡È­!Mñ©n—F¼#ˆ<+?iA²«Úý Î}G;Z¦é}–T=ËçoF(j±q¢òxÄß»¦|Ú×ºŽ®Õµ[¡ÙŹwª/>ÜïÖ‘ç»:wÄôk©×eKÑàFEµ“G\ÿ†ßõ=n'¡¿7”ÿ¥._TŸGŸÕõGûÌ)Îk«¶µh7­H[mGêP¯Ú3ßÒ/Šö•¥-¼ª2¾šA;ß§ÎUÝ©zZÔ¯öïü`}TGɽíVÙ7ÆP„Bù>n”ÓU=›€ _üè>îíÅÒ¢ˆ+êšMœHàWSBqÔ?ã êX‰–$3ê¼´–ÀoZÇ•ð¼ ÑU%ú±/„<_zm&ææyxIªUHŸš:)«à^ µ-#.Pþ¦ ôdÖ±f‚Ï£œ`¸Œvcóœ‡ý7x¥ÄV] ˆäù³†àùA ‘ª xÛñ°©ê­®ê¼žcß8Ê}ézgü¤NúÀ×ðM5PE/„f“EHž¡œ²baŸ/ªs«°A¯Ñýa1P¦]3Ø¥]õö¦ü×RÂ`T b½â¼¶jK3ÿYß§.žU~¨ªvx¨ÄÒfÊ-ÌóhºK ›ª ×Ô½k_µ¹bî3埒òÏLŸ8V‡«jp­¬êæíd"AËý«dî£m30lÏQw\ LÉ=¸¢ò¹´ÉK\«ôîw÷ „B¯ä—TгˆÏ^Ü`;píí¿ð7Ì5X&L@}â²kgÄภh¶éI€¾0 >3çI´HãX•!fߤ±/Ä8„thiäc@æ `nv†¿ì²™- ÖÍyo¨ u#P®m3P‘"€W½°kÄKÛ…—âçœ6AN‰ÛYeOË2[vëÃ'ÓîÀç(o¨?è:’¶9i3ƒà³È½¬„{ÅKŽ(*ãÞ}ø_K 8ÈŒ{ÅœS1ý]Úï9oÞ…WU´Œ/LûЃM¯¸g CËàªõ‹ ´$à»ÀÿnUVÔ€cìûHÚÚ¡°+Gê+ßfä~D!„/b4@Ë3 `½ tK²§`L‚—k÷qçèe—Í¢9—íäúŠàu%|lG‚æ îW·"‚À1…´IDATk&Çcö½GÙ5ˆŠUS¯á”'€íŒ±Ff{j*øœH,Wç.Àÿ÷&@NÀL†Ú£”›F•"õ–·R|RÂm38q¨³UãË}¶Þš¸îÈõÎÒ¥à=5xtŒ~PI¬›˜~̹¦„ }ƒ87‘þ°U dÊ®÷ñý\oHPGêªÈ£3Ü…Býòõ¤Ûf¨ÍÜ (€Ÿ\ïc .Pß±¥±Ó ÷çRdÐN ðw´£XûmFòYŽàJÄ?CÀu—=:ª¯nDܺ„>ÚÆõÚ·±×³=©ÁÌ»H?*™¼V]ï3àúØÉéK„BùFÆÜà»XÆžÞW"¸²òŽuþ"–7õÿ+—͹øî¡6êW/G÷É„à·èÝÈy,¹Þ™u™ýéö!€G êTûíÀ¥íÀêÛÉEÀ–Ûð±‹ïV­×ûHDÇeK^‹úCHÈ4ø?»ÞU [‚5¯K¿'Z,Æü;ˆ¶ËnC÷•féõ#ølo¸ðJ”X>1\Ôþ>#€ uÕù„–2ÎøV·½¼]ã;*¯VBÙvB!_­ugPµ> ÝXp]R´~Ç]ñ2à5 `~d¾ì²å²¡\%¯m¸•À›9jÕˆ·ëI²ä?žãë<\4#tª|±ãCý¬ä#Dìü\‰ð)8¶œÐ#Ï}n AçÍV]¹Ëw[ u²Ožõ½Æïz6ï©OlóZW}©hõ@?øK;ðyµÏþP$ ¼O÷\¶)ÔòÀo.íuly«®À/îã’ca¯`JÒ[Ü×K.{ÇûiA/©öÛú¤-ÙN~MÀƒ ÅT,eŒ=ƒíÛ®Ì4ßçÔ}Wå%eÍ:B!„üQfr Y²µ2Dì ¸ec›q%¤^]xùšŸ‘:vÙ’Öm~ÞV0Ùh+¶9К èb³Å;‰ÿlN°t… 7žÅžDÄhÅõ¿Z6¶*'Ü9åÃPýËN׳9Âþd,uZ¾,‚|nxÝ…Ÿ¹“g~ÛJèÇÒ(lYPƒ1Ö>˜©n쪆<\ƒ ÕÅ­Ë–n~Vä ´ÀMød,2uôðŒü݈°ÝSur?œ´™—ð%úo-R¯¯.¾Ãw5§®v•í÷èÓ¥@×»aKOÚº~Ø@êûà»+~XvÑ.üqäÂûô+€¥ß‡–d`øÄØmíì³ÂâÇýÈ÷°ÿî÷õW„B=>@™4Áé3þ§w]vi¯ì)z ’<_|­™½€Ô»ˆJ&›ÖØWVHÀXq½» ìzRïf ð›pÙ+8Šþ’ËžyÖA¾Ý<&Õ¾²yÖ\+K†ûÀk*+©´ìγe÷ñ•-:ð•g9ín¼ÂòÍ…—›^äàª:è•W=(Að\G>÷Fœî‚pñ߆ioçAdí; ø ìÂ;ç `+¦.F\ö*˜<ŽB<ÔGE„Ü1©úÃêX6Ë*êiã‹°2¨³(Ç©››F°èÃCm¦H‡6›S"6”÷^Aš§èg3F ½¸ìÙâÔþ>,¬wª×»HÏqyçzW’œúÞVà¾×R¾Ñö¸øŒx¿Xà-›Ç+c·Þº¬ì¹ä%ßQMÓçà“¢Íì!„2$¦0Éέ2+ñbDf#1ÐKÀ%—=˸®‚ BPŽN@`B ÈÌÜ…ú{ÍØõ¬ìj»ì=–Ó&‘å˜w.Ûìg×¥ÏxMÁ_ò\îµJ¯Ö§}!&\ö®ËSˆ yï§¼F©œ(€Î.{-•)MäÛ5v]¹l™å• |ðwWå«gsec,yÍN3tÏ([%Oy·éDNÀÚ– içâƒ'üÔAxÕÔç…j/V „ì“w‡žàÝ‹å}³)X*ˆ_¤Ÿv]ñÌѦ*×EA=V¶©|]ïlªÖb¢cÚÑû¸d~XxÞ}|.tÔõîP5LOðϽjÓ“¦î÷ªÍÝ«.{®Þ\Nî3ÈûNÕSÑ&guSÖ u ”Åúû°°¬0¹P÷·Vd@Ožƒ—¥à7¦Ý̸ÞgÆÅž uÕùؽ%>#€«ê»@ú½|Ÿ¬GtÕýá?Ìà„~÷¥úî]e(B!„|/u)§V·ÜÇeyUœ³žÞzÂyãîã+täL(˾ ¿¢Ž þçíºðnÅ5œwŒcÝ…—Šý'È{ZÙ;¡‚§–‹ïŠ\‡ßNת /3N±/æ¯]¤è²÷¶N¡\ ˜®› =ô¼Ý ò?ÁÏ™‚¶q¯˜ ³‚üÄÇ[¸¦‚ëæÍàÅ6ò›V>mæøòÕ@ÞŠ äÕ“3åŸúŸ#.Û™5To‡ªÞf"¶Ø×Tõ¶‡ëT½Í œõH½…ì‡=Q¾I°³ªA¢X-!oé[;.›™ÚTz^Xøp^µûÃ@;j"½jàºVÂ=ƶ5‡Á—׻ܶ‰úØu½3¹Ó¨7)ßrDLI›9ÆÏF îò²v‘ÿ¨É{OÝúyN¾”új¹ð¦h³¦¿7#÷÷f M‡êyÂÜwD«{î~ÎàÌü|ß•#}OÚÍŽ©9Õžu„hEÎ õ·ÚСºGŒGÒ–WžI¿”ûâ|  k¦M8B!„B! y;ïB!„B!À„B!„B0!„B!„òÃð<5]üµM„B!„B!„B!„B!„B!„B!„BGÞ«xá~¿Ïð³ï&”w.¶_ǽûýÞÃÅ!•×?sæ7^±ïY -yfÍà¯ÅÖá<þû!å«9½é>ìù{tšµH_6cŸÈGÞN!„Bˆ;q¿wðô"õü×ñòëxû„Xõê“Jóò×qõëèâ3/„KŸ,siµÔg¿Ž‡Òâ¦?¶[ø»ùʶ‹>0L–í[G&gFL6}ñ+h~"Ÿ6®%„B!ÿqVî©ÏülUBx]=/! ÌçÏ>¿ÕO–»Š€¸a‚Ü0ðÀ´Í?!€íy¼ÿ!êóÀ„B!¤/üŒéû8#»„ qt€4½ø½Žü¯†ÿ_|-EÁ~-<[ñTwƒ/Ym¸ðìv=çB çŒ$æ3Ì¥­å›Gü1lûbåð×W>)€Ë8/eÉ{-ApUqN}@<’(êjªÌÃÀ©y÷#€+ø¬œèÛa½:'¯mi\ÊiG„B!äfÔ}ÍÌ_êü˜`N¹ìãpw"zŸ¯" ÿûº¯×ús‡óïa«?žÝïåÒV<-¢,rž˜M°·ƒô$È~Q³&Mï›]#KøìEçý·n;(¿œ×q—ª{Ÿ^ʹŽó§ð÷þžA~>½KU¦m“×}Àô/&ÌýµOêÚ7”s´O\Åy¯*­Øï@ymFüw£Î±õ1‚¿ß§m—+Êïï°1´2bmñ]ÕÑf‚¶}b7'ïgø,oCúœÔs>ìÛ˾ò¯ÿy¸Mã7i3E‚t*àC_Þ-ÓN1@Àóê\ï—37üç³ !„BÈe^…>Ⱦ@€yå>._î‡]з¸Æë-œ;©>[TÁlÃ8ÿÙ˜ûø<à2Ë3~½†óÚÊÎK×» ûHćÈy×ÏŠ€xBZ—°wiÞ"ÍyZØÆg»8gâ_êF8Åg'H[ °Uì‡fý¬(\V‚á éŠ?ñ¿C䵿íWÂl˜ö…çÓ÷‘ß<Ê$uš*€Ë(§/ïÊ¡mÒÂ^ür ë6³¦„¿è%¤·‰vðæ²Æe|voÚå–³sHï40 5ôîMYÞ°íÓø|×J?ŸU~>ÎI¯®|s…ßG•–r®¢=ˆèÜRiÌà¼ø­‰A”U!Í€NT{“>Ê·­Dy im!ß;7¼YhB!„òƒYVÁ£ÏËlÛÆ€éÊŒŸžió³gÈS›cøÿ¦32;¥gr.]¶ÉU(¶Â¯Œ|íï2Òïñ´cì¡P´˜Ö#ÆøÒÎlíà$7îãFEU°U%6ý5_ß!ÿÚ€Ø.ÏŒä5¦D’Ø÷8 }5c_Y.øŸèT,ƒ'ëQ÷¬ÚU Û6£íuh˯¨'ÍZ ÝÚ%Ðu\Û ã2+y…6\7e¹qƒ-®!ýÛ@ÞǦÞòÚ{h ô“ñGHz%ÇΫEÂæûÀÓj@Èö‰kãÇv¤þ¥]¬ðë€B!äßG6Àz3AoÅe³eO¤_C'®wùëƒë}}˃QO.›‘ª <;}àfŽQÁºˆ§qsÎŒëõËvÉñ„û¸¹˜0nþ'3~–s*’Ç~¤Œ"Òÿoa@lí“嵡²ŒbaØöåQ ˆÖ‹>ð%Q9Ç·(Ÿ µ™P¹Êª.òðràa ÿ[Bú±YÙÕðBŽà›Ì©Ó*ç­Ê_P#¾•6’*€wrÚ©øxUùá-PÿeœwƯB!„ Orñõ!æ7å²Y&/zejÁiEɲ,óÉîÓ}`±o® \±] Cy¤^Æ;N•0è¸ÞgA¸±‚/Tέð|ÄyÏF¦ØwÒ‡}1JÈkv=›ð¬‹Ïb/A´T¿HOæÎà–”‹ðTD¨4\¶)UYÙWоKe_± rtM¥n‚µh¯²ƒwÉÅ7Nó¿ßã<|¡¥Âç6Ó1ö‹¯¶Ë®Æ3ªMwýó²üèŸ7¼\ÚŠ +S°S}Ü®.Aí>pÑ&XzÙËÎìoº´î!„BÈ?Ââ—½Êæ0 €$Èí$¤©7׺@ÀÚ‚HéFD~¦t*”w`‰Ó3Uîy#Æäu3ú•6K_(€µMú•/Û.{]ŒÇ]ÈϹÞ× A,ŸÍà\ ìõF_2#,¯èYÁï©Øúr¶< &Œ}÷C²Ï2­Ò÷׌£Ìª& àŠ(ØÁçú5Hóÿé6#ÂvE ¹7·1 Μ«ré6sãz_¿ä\6Ë®_ƒ$âW¿hÒôOy]R7QËd‡ªÏ‰èk«¼eÀë4¡¿ ÿ”¯<ï>¾IÚÌc`0¥¨?»ÞWƒéþmÇ^Qîu¤ÕB¾m—ÿþcB!„òŠà%@»JuP(3·W‰iN»lçÝw%ˆÛ.üš• ‚â{“ïò=”¹ãz—š6]öú¤s#È]ï&Lz è.ÒIÈ#Di„˜w½$½A\ÚÙÙ]%j¤vèwï>ÎjÙóäýÆ3(« 0,˜¿]A^·s‡i_ˆU×»ƒø#ê<Ê>©Ãõ€m²Ü]·É%J5Ë6£_Ù4Èÿ_‘vþ86>zþ5—½rLÒØw—O™¼nP¾XÝÙkÂÚö‰gÂ!¸ªêrSÝBýä$pϘÅ`„ÞüêÜ}\&Ÿ"€K¸Wé6Òqw¹–r¬¨sßPO~B!„ü7ñÁ{à w6¤„4? ДrüIßVËXJði­ ­òü.yտѾXF†Tâ—j¹#mFì.¢<#‰>© Ñ:ï‘?Ô'j}¶OÀëŸèýÖ?!„B!„òíÈsðËt!„B!„?Së—ŽËRûqº„B!„BÈ¿ˆßtÍ?×ë÷ؤ;!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„RÈÿ,KwK×&×IEND®B`‚slurm-slurm-21-08-5-1/doc/html/ibm_pe_fig2.png000066400000000000000000001341631416043614100207160ustar00rootroot00000000000000‰PNG  IHDRÀÐ_w´€IDATxÚìÝ?ha7ø§H‘"E ‹)g‘Â"………EÀÂÂ"E8,,RXXÈáE ‹rÈáA8,,äœr'œ…E 9„Î{ñ…g‘9RÈŽÞ>o~Ïí“qf³1ÿ6›Ït'³3³ÏÌÎÎwæ™gRàĬöÊE¹De»W¦|õàòÙˆ”KXæ|õàòàUÁ%°%€,#0À€ 0 ƒ À 0À€ 0 ƒ ÀÀ0À ðe‘ëa³Wf.à²_m¼^ï•7C¼o!>óm€/µ î÷ÊncØf¾Ã,^¢m@X¾à¸¬GXàÿß|„¾ÙS À½r£W®´üm*þÖœþt¯ÜnÞM7­ÞŒ¿Ýª†MwŒ_–óY¼^Š×OÓ\ˆáÏë±9ß:Š Þlšý^àñ1aóW„É…ŽñŽ€¿´L³àæ}»ùŠð·C¦û"^Ïv|¦4dÎW¸ó•Þ·-ÓY€x¼ä ·“ú÷¿þŒ€¹p‚ømGÞêc›‡L÷}K°´»æ[¦û¬å½ 0 Ÿ|67E~¸tVuó„ðƈàõ–÷^€x|LGðmÞÿz?>ÿ«Cð½ÆûÎ(¯Çë«-ïÏW›Ÿ €sðÏ÷ÿ~l™Ž&Ѐ®© xœmF},ª X@€€``€Óó8ßsU!Œ³µ|kªBhš‰#E¹,eÎ×^€.§Ïqp¤(—¥lûÚ À0Àå´GŸã@IQƹ”Œ,\â<§*¸`X€```@X€AF€`€9[Ïc?V0€ŒÌ8Ûˆu¼¢*`X€AF€`€€```@X€AF€`€€``þò:Öñ=U!À'g&²W{ån¯Ì6þ>Wt.÷ÊÃxÏL Ÿi™f>_½¾¯'zåV¯<ŽyΨ~O}Àgá~¯ìFÝíÄ¿{r‹µþ´ ^oÓ~ÓÌ®&šyøFcý¼­bKÉó¾c5À|ê@>MÓ@?Äÿ³|EöK„à™FÎùAÚ¿J|ãpö¾W®Å°¥˜ÿw«BFàSðiZHý+»µët›xµ1ÞQðn´‹w1î„Õ!#ð ð&êcYUÀÿb²W~F½}LûÍžg[Æ[ë8?jþÒ2Þ†õ&#A¯Øð±åæÈ¹ ô^ª¾¦ý+ÀÍÍ>Mp°ˆ,Û§ ÀAÆ>Mp°0öi0€ƒE€±O€,‚Œ}š à``ìÓ`‹ cŸ&8X˜6¿cO© @FÆ:€`ްŽ`„#¬c@áëX€A8Â:€`ްŽ`„#¬c@áëX€A8º|¦cýî¨ @F€ÇÙ\¬ß-U!ÀÀ°,ÀªX€w@º¨(G(ó0ð‰Y‹:YS§€7{åkü«(‡•ϧ^àÑ ªo{åw¬½ò¨W&à‘ À·’+É€‹|+Æ¿" À Ül¨ŠÀ°|¦87ý2æÛ£Œ,Àÿ€ssʇ½ò!õ¯’ÿ¯%X>o™æRH—+®7ãu~„Kn¾ù-¦™ï[\hyÿ^yÝ+ßÓ~3Ïüÿù–<ÓýÓ\ï•é–éå¿=ÿ_Iýæˆâoy>ozåZG°|ã”z¸Ó2^®³û±ly¼¯ñY§``@Ýü!†}ˆà˜àN »ß¨ƒ­ŽsyäP¸6‡ß½´oîlËòäéæÇ‡¼ˆyÿ®Bp ÀyZŸcù>ǰÏe™á7« ø'íNÌ#/ïϘÇê½×cX.¯¢.J'DÏóyÃ?Åô^ÅçûvF!XF€à#àr¿ìó–€UBñ¿à/0ø0||ËT„Òfh¼ã½nàõÆ|ßÅðújñý°ϱ›^ñͽ`ÿŠ^|mïÓyߨ³{¡øvG] ÀÀ0€<øJ·¶Ç"ýL{‰=jn>äj#8ÞMÝ ¹á¼ÀÍe|˜þ¾š›6¿m ò¯Zæ±^è…øÿ‹–ñ®Åß^ÆëiÿjoÛ•Þæ·``@½\‡¼ü·|õò}„¸?Ç À‹-¡­>è.ï[¢nþ ñYòÕÚ|Eù~Ë< xÿÝ¡½ø]ÕE>1°¯›åWLgZF€àÑ Àù*æ‡*ðä¦òÔ‡‚Ï"Ï Q7Ãà-Ó›lëÐ[þ¿Ô± u]ìÆëå´Á$# Àðp9èËW~›W-óÕÌoÕë¡ëÕ?àÇñúVË4ó{o1çÏò½cž[Þ_æ3‚ïŸþMSñ·÷ñ:Ïãç9o0° 1Lí÷×–{b·˘CñDcÜoÿ€o¤öN£&"`~?bþœº;óúÔòþ<~nÚ<™ö¯Øî¦¿{•®çó$^¿Œ×7ãMF}}€q«©½#7Xëü²î²|EôGK~‘úEåÀx5ÂìÞ?àò¹óûTA´\Q~p„<ÿ¿Ý1Ï´§¢´}îÒ)ÖËXŽÄ—#$ÿLýfÍó1,7ƒ.W¯óã—J¯Ô«0ž:€G/ç+¿å în»üo~îë§ÓÕ¸_«pTžõ»zŒœ§ù¡1ͽ˜:B¾Ë=Ù1Ï<_yÒÁôýÆð«Ê À®¿ q ß5Ï-ï݉. À00€|¤ƒéé–¿}KûM€oÄxOZÆ[2?ïX§[´Î`Žãm¬ßeU!ÀGÀ{>×Þ1ðÔ}µjqȼ& Àø~ýIãßó¼ ŸJî K¹ÙòÏÀ_ª€WÞ÷¸e¼Û°Œ,Àg€¯5†çΪ~÷ʇŽp:5à€s§ x¹iu¾Šü®e¼§°Œ,Àg€ß§ý«šáônG8M·" c¼­–yÔUºï€``@>ÓœÃè×¾åûu5^[.ÏþÓÙŒé|n¼+i¿C­?ñoþ{¾*üI€€`ø¬ðͼß{åcú»Óªù÷f5,_1~Ÿÿ[¼?w?ýÝsód Õ+/¢¾ÊAë­Žy\‰×K-Ëý<µ÷- À° ÀðÜ)Îcµœ‹µ˜÷Â%Û``@Óœ¯*o÷Êl5,wºõ+í7Ÿž€``@‡œŸ¼%?")7—Þ‹P|ãn0ÇQî¿©*`øhnÆÁãÔ„¾Çq€šïÎ÷O_ÒíQf”÷g0€Ʊ ÀÀØŸ À```À£ŒŒ<îD¼W00ögãl1êdSUÀÀØŸ À``ìÏ`ŒG ÀÒ~,ŠrXy+# Àõ€±T ÀŒ³8(]Q ÀÀ€, •kñú¦*``ôÔ À è©8 ›qPº¨*@ÐS/À€ wÏÛV”ÎY%p"nÇwꃪ€Ø¿;½²&ÃØY‰ïÔ†ª€.»k½²‚0À0cg¢WöÊï(0À0céIü}LýNr`€`ÆÎRê?jhn„ðn,ˤU° ÀiŽBþ€``@þ÷c?—ËzÔËN5,—[ª @€A¾èžTû˜®²¨š.¬Ùø=k–YUÀ _Æ€4(üþTEÚïŽõª™;02ønê7=¬¯Î¬Tå†Uÿl-Î ®Q°9 ?U=ÖÕX‡ÒÁ&í¹åíïgµ¯ù¨J.´+±¤ƒ'roÇ>&ßJ3­š€Qò±%?P-c«\[mù[î¥wÏ«|Êž¥ƒ½Îs±Mtì3žŽéïInÚý2í7õV”ËPž'}Âcæ~#üî @cm1~ÐÚqõ*¶9Õ$Ÿ¢kÕ¾F“ûñÞ׌ãöÿ$þE·²h—Œ“Ü„­n½¡J.¥|'7cÌÍÏóLïTðq(ëñZ£ÏtRåí•ÿé’}æqì*®üø£¶NônÇöÿdLOl½Kû-eœËwWå»ôVcý??çå¨ïU”q+Ëc¶ßX°ß('€niÖ²ƒË`Ó±!0®J3èïªâRzë??ë¼ïó)AaKëòöÊÿq‰>ïΘ†¦É8iµÛ8@ÎVÛ‹}ʸ€€Æ@i½ª*.µ*üŽÂý˜%ƒÐt1äçÿ–GýHýVùi3Ö%À£êجÐ.ßó»?lÒètF$#_<¹ãÄ|¿`n {^Š}Œu 0ÀÈšU—*ü¾OýNÏFé@UFhºNÌëøA{6‚Ë&#4a]‚ —Ê‹tð±<Š2îåÝ~¿–Rÿ^½®Çœgsh¡ ë`¸T¶"å–³ò~ˆe™€AhºD€álðœªà8ëÀ·?dƒÊä%ªš°.A>õBÖ%° 0|ê„&ë’aå5–s.–uÚ*€AO}€Ðd]Z—ÿºo߸@ëWà€AO}€Ðd]Z—° À 𩃞Ǿl6^/ÇëñúF¼^¶Ê‡ªG¡ ëR€`€AàS#j£±[iD,Æë«|¨zš°.G×Õ^Y°´ÿŸ?$ç“[«-Óºã]‰×Kñz¦WÞôʇ^¹Ó߈ó8ïcÞÏRÿYöbü½ò¤W&óš‰ñ?Æû—``øÔÇÉà©øÿ¤|$WÆä·@h€ÇÕõ^ùÝ+Û±ßË!u§Wöz忀¼áê°}g©ïÕïËjšÃënüû­¶Ëñ±:®|ÕíÛñÞ·Qöªq>`øÔÇ)à|UâF ›j™Ölê_ ™OÃõ¦Zž÷|½åo±,y^Ó1ÞL˼æâo×ï¿ï1ÿzÚµ¹ÔïeµŒ;'s:¾wÖåðûºÝj¿QöS{*O*‹}Édü[ö¡;ýá‡jü+Õ>ï[,g=Þn#¤ßŒaŸ 0Œ`à›iüp’Ixè&ÐϪ}ÞŸ8øzÒ²O|åOU6[ÂeÒ?ãýhl+s1<Ïg;þ¿´ÌëUcoãïïß7æ¿\M³.é`óÃòÞ-ó™j©G˜ÓpùÊåÒû/ëò 7±ÿ¸Ý>רËãàfk™²}Ùþ8†?è˜n9É×uOò+OF'OÅAÀÇ8àÕEòD>»~÷Âðe À¥Y^¾‚q­ ˜ûļ¾¿GÀŒ¿çaŸ«ñòÙß1þíÔ¿‚û=†_màß±-å̧y}í•;iÿ r¹¢²ÿ¿¥47,W™âõ§XιïS ¿ßXÏeùçcÛ~ÃßÀœÃwµ”_ñ\´.‡r+¾Ë¹N~F ÍÃ&ZöíÇ À7;ð£Æð²¯½5`ºå½[æ_à€A¾<îÅÁpý#P:˜(VcX³ä/–Z~ðnVã,2ÿç1^}ü.ÿ=’‡¾É¨»|el7ý}UmÔ(wâ€è†Ü€?·¬ï­8lîç;Äo5æÙl²|µqÂd® ´ûßÙjØBÇøKéà•™| ºÝ²œ×Rÿjw½žs¿ÒQoW`Î)×ågü6-X—-ÄqÀÏÆ¾éð\G^éÀ‹¦{;u÷Á°"ð À _³-?V-;½Í ¥IæTËI¹*ÔåjG¨[Šåš½„8‡šWñù»êû"àºä+‘OYŸ—-·]XoÞ¼OüÒ2^ –ëñúWŒ;×R¾G8­ðëŽýïׯ°2þ»!@kóŒ›ÛkiîÜt'¼ª#ŸŸ‰Žm©«”{Ç-wcÛ¶¬¡”ªÃ”‡ü®Õ·äý×+†s‹’ßQ¦à¯ç€oÆÿ·ÌÿÀ'ƒ|9ä&‡Ÿ;~,ÚpÓL5þZËѯô÷U¥Zþ±Üëu›Êã€Û΢*Û©ÿ؉¶òñuyză͵,å@õÓËž—-·:˜¼ä¸í âIão[';¦ß™a¶™:Юuì7;ðÆ 7#X—gþTÿ6ðÚ€P¿6¦øë!ß½7‡|§›åk¬³aËÞÛ‰Ò}Eø“|ÀÛ–“cÙ«Æ>°¹ø‘¶t)¾ŸAžŒpþ©ãxHà€A>E³éð{$ËYøé!¦w%ýjiiÞx÷¸>ÿÔòCT~u¼÷Gêw†Ó<È^Žá c€§¢~¾^²Ê|ò¢ú\¶¼< ,ݬö‰¯;öÍü9 ¾êvšø^ub&çóÕíÜôýjG~Ú2ÿc€/RÙ;b¸þvÄðþæˆ'æŽrBîqþÊòa'ìJY·ã÷XèƒJç|õíKWc›ØnìÛ7Á¹~ßTœÞ;ƒœbÿSÖãD㽟 ð z?¶¹™_}•/Ÿ=möæšïËe¼/;¡¥Ôï¦\qm{è{›2ÉcàÉÔV_ó‡h%Bî§ü^ÇAöD,ßË1ÀÍ:YOý+ç]åÃ!açV:ZÃRVÓѯ¯§£5)܋志6›¿l¸­ ^¹1]í¿µŒWîc{X·Õ±ìÓ Àßâ»:Óñoà÷-ó/Ð,i~wÈwïn:Z3â…t´fʉaONä“IÒß'Ÿàƒfªãßձͯ4ø9Àóé`/ô¥™ùÚà‰j_»Ë»[sOøŠÇNöiü8Æ%oGè{uô+ÊÕÆ>±t(“¿«R¿ÙæãF€ü'K^Ç<׫÷^=å\ö9ù ʽXÎÍøŽÿNO´•«E¥µÊ臽tðv ˜Ó¶Ûì4Ürë€ÿá ¸yõ+ÿèîTžïã@pªeëU°- m÷Ò•^Ÿ XžA€ëû²òÕÉ|µz7ÊrGNéïfÐe¯€Ët–/q®•&ÒÏGø³íñ!§U£zPëa¦ú®mVõ±¯oFp܉@ø¶~ëPZZäïÙ—ô÷}ûÙtl¥úNË4gªéµ¼Xo +㯶l‡›©ßê£ÜÃWšîÿˆ×y÷"ökÕzÞˆi–€Ÿ÷ ·:êQƺà €vüí[êß¿7è^¾: Ö½,7;$ù™¿JXÞ¿tÄÜf6æ[7Élàf3èr ž ÀwÒá[¹LxÔÍ«ß'nŽáv¿q‰Ö¡Ðd]‚ \ÚÜl¿1ß®þÿ6uwN´4D^>œ­Æßtàf3蟩õzP^JíM¬`õ! ÀBÖ%À pΟ­Ù Cééøc¼Îÿî¥öG$•&йÙp¹2ºÚ2^nŽx5 ¾§i9ý[è.ÓÁ^iWZ¦Ÿ¯t—¦ŽùoóCà2»Ÿ, ÀBÖ%À _¬ü°1ü~cø£ÔÞaT¾¿o;ÊD„Ü|_['XÏÒáWMËÙ£v‚Õ&ß'X`m@~’úðùZ €KÓéq|°À§>ó(_óÿÃZ§MX— ƒ&™R%œ¦k©æµYþïÆë_½òªWîôʤªŽi½q¬±¢J8mùlëë–°››Jç+¿ÏÒþ•àúïù,í›^¹—œ­Žn"Ž7ê㋪€³ò õ{èÞhù{¾Zü¤W¾6~¬vãë~Úï=à0wR{ ´YUÀYÉ÷âäg5/2^þqzÔ+›éïÇZ}ê•ǽrUuÞtàUUÀYº’Žvo?_ýÍÏ»Ýmüˆå«ÅO{eAµaªå˜¡”oª€‹ôƒ¶œöï)nö0¯,—¥'T\Z÷Óà§P8qÀ…“Cn~¨}î9úgÒ£4ŒŠ¹sþýÝ<$¯[E\tƒz”~›ô( §)ß²”;¹,M÷â÷÷Ê/Çì!á7—í¤µcd>í÷(ý¥ñƒ—ŒKÒz€“‘¯ö~‹ßÙÜ7Gnµ¯?Ÿñ²ä“ÝsUyÇÃ`ÆRéQúcjïQ:÷©Giøw«ñ»ºÒ¾ÃÏqÙ6:– ÆÞ•ølëQ:Ÿ¹Ö£4]¾ýèKËð|:ß‚4#ÀùÊM¤òóˆsÒ;0œ;ÕÊg­“&R0Ètüv>×3ñûymD–O€†Ò£ôËÔÝ£tËz”€ƒnÄïåÃø½¬o7ÊW…Ïû6#‘{”ÎÍ¡õ(=­šà?]í-=+çßÍ»1l-Âpvž'`8‚Ò£ôçÔÞ£ôƒ¤GiàÝ–ßÃÒ9Ö}.žüÃþ0u÷(ƒ²¥¸ŒømËßæâo¯`¸ØrÒ¹)t[ÒßÓ~êëª €17¿}oZþ6Û€`|ä{›JÒ¿R{Ò¹“-=J0Ž~Äï]ówîfü>€`<•¥_¤ö¥7’¥/âwn­–¯þæþ3Úî €`LåÇCtõ(›OëQ€‹.Ÿü}›ú>Ê¡s+í÷—qÿœ—M€s’;ÈÔ£tî`KÒ\T¥oŒÍ´ßñÕsX†Ù»¥|JýޏêáZbÀÿ@?Hí=JNz”€‘›^7;§l–oª ÎOn]ΚÿnüHç¦Ó¹ õ ÕCysH^UE0JÒùž¥¶¥sçZz”€nw Àn7€Tz”^Oí=J¿Nz”€¶ßÏ_á÷£ê€‹ázÚoý½ñcžïu*=J_QMðŸN·`½AÀTz”þ”ô( M×[Âo>a<¥jàbÔ£ô—Êóª €K¦Ùbêµ*€ñ’Ïlç¦ÐoSwÒ7U—À“ÆïàmUã«ô(ý*µ÷(ý2éQ€ñ5[ýîmû½€Ë#ÿè/¦ö¥wR¿Gi÷F0N6ã·n]UÀåµö›CKí=Jç^2õ( ÀE·¿o ªÈrÒ«©»GéGIÒÇ•[âÜ@¦œ]ÉDþGõp.厯=£.ÝûipÒ×TÀ‘=JíÏ¥U”q.7|õ¸(JÒoR{ÒÏ’¥†µûϯ½²¡(c^¶c{_ôÕà"Ê=Jç¦L]=Jçáz”8<¯© .M€q‘Cn¾ò›{ÔÜj„á|¥8÷(½œô( #À˜)=JMí=Jç{Šõ( À00Œ•Ü£ôãÔÞ£tþ1Ô£4 ƒ cg&õ{”Þmâ|µXÒ€ 0ŒÃz”~žô( À À˜É=JßNí=Jo§~Ò“ª €A€qRz”þ‘Ú{”¾›ô( À À˜YˆƒÃ¶¥ß'=J0À0†rÒ¹×è¶¥?ÅßæT ƒ ã$_õÍW?¤î¥T ƒ ã¤ô(ïÖ£4 ¦ø¼Mî€ñþ9Î+Š ´¨”¥·aøW ¿ô( ÀðpÞs€€¡å+¿ù pWÒùʱ¥XÜ`.œ|Op¾7¸­Gé|/±¥øxûØÇñyôÊì!8¿’þ> 9ÃK?Sñ:w„x3¦§W&ze9†åV=w«yOÇ{§cß¾Óh¶þ)ÓXkL·Èïùžö[­¤¿o§¹¿+k1ÿÉ–:Y‰ÿ—eœºû¨¨—÷^,‹ Û\ê÷(½×Ä¥G髪 €‡ò<õo5ÙŠýênþÚpùüsi-6êe.^¿¬ö×yÚWb^ù‘xåÄfù{nõs½Z–½jÿ^îl„Û?1^¹mæ[„ðÔømøŸ¡„òw1l§W~Æÿó¿ó-ŸñYêwÒ¸ÿÞøÜ7«¿mÅgüË%'¦ô(ý>µ÷(`ô( Àí®ÇçxÑ—?"ÐMžPÞ‹ ™ÿ¾ÛŠ¿½Mý«¾Ïªü4æ?ãäá·c¼W1ÍëÕ¼ïVŸ¥nÍú2Æ[­>óõ*¬N6>ãïj>yü71|¹ ÔÛQ®U¿MŸª@,'n*€ºz”^Oz”àÚr|އá7âo'€¿µÌ»\)®†]íÿv ¯?F@ŸiŒw¯Š›x:‚ó‡–åY‰y¬4>ãã–ßšß1í¶÷31/8uù íVÜ£ô¤Giàrà™Ô?a¸a¯í’ãàŽÜŒËUáAÓ}˜úM˜7"¬Ou·:€.UÓ_i”ÕÔo®]Æù–é¾p›â÷$×ÖÅ8ùÊonZ×Ö£tnΦGià2àìzúû6’o±_<©¼Ö€7;ðÆ!ÓÍÅrÖ"¾køf^IßÜu¯pùŒ“NL§~“è6`à¼å{´ºz”ÎÍêò=Å3ª ¸$¸È'ó•Ôú6’[‡à«ç€‹¼ ùÊu¹çöÇ€|/ƹ„u<Ûò·wU}Ôa¸-8 ÀÀÈÈ6âǽ­G鮿€€<8ÜÜiT³ùîíÆçë ÀÍ@tÿŒðjêß\{Ÿ^™ÎÓß®þ>ÝòÞ|rôyõ™Êg\jŒ—;Âú¿ÙÃCÆ€€‘Tz”ÎgöÛz”Î=’êQ§\š?m /¡î~G.ï{V Ë-g~œQþûéùFà,*šlâú—ò½Û÷~j„¼µjÿ?Õ²îTŸ{'Æ«¯?Iz.ˆ¶¦€ªƒ™Ò£ô„ªø«ƒßמ%ì|Jݽ@ç ÷³zßÇØW¾<£|=æ·!÷uê?VéAõ¾òX¥ßÕ4¯Vã~Œ÷–Ο·¬ãòˆ£<Þçö¦±|Kªëñ~Ç|`à –¥&=JãupÞwå+¾ï"è¼9ÑxÍÏš[Í<™ß{¯ª›Å*(¯u§Ü„y¥£n›Í‰çZ¦3õc,wnÊ}£ñ¾|2óI„ßÕF€áy3BëíŽu|'¦ñ1‚ïrG=.Ä2lÆïÂ||¾G0p‘éQÇN°h_ÇBŸ „|†?_øÒù)\éQzV5Œ,ã¤ô(ý1µ÷(›ßéQ``+ùÞ¸|ïW[Òß’¥AfÔ-Ä~Üsá`àòýÀ¹C—ÜÉÊN# çNµÖã BÒ ƒ ŒÒ£ôËÔÝ£tËz”``¬ä¥ssè¶¥ó£Hô( 0ÀÀØ)=JNí=JççrêQ`€€±’ƒîÃÔÝ£tÊz”``¬ä¥sSè¶¥¿§ý&Ô×UÓ±Üî•7q÷.ê`€€s”;Ç*=JÿJí=JçN¶ô(=¼Õªþr½~‹×oT 0ÀÀh(=J¿Hí=Jo$=J&75ÏMÌ¿Tõ4A8×ãmU„ 00zn¤î¥K³ÞiÕtÀ­¨£ÇÃ…`€€—;ÈÒ£ôá¢^^4†ß‹áU0ÀÀÅ1·­GéÏIÒo¢^E Îáw;íw0æŠ90ÀÀ5ú=Jÿn„áÜt:7¡¾qÉêdª:¸+e«Wæl.À ã¡ô(;ËjëQ:7 ÷¥¯DðÏ'ÇÁÝJà|xÞf‚ 00^JÒ멽Gé×i<{”^Oí½=ÏôÊN¯|²ipHþšöO")Ê8—mg×Ó~sèï0¼›ú=J_ƒÏù5ìÚ¼Ïì1R´yÔøn(Êe(7|õ€qWz”þ”Ú{”Î=%_Ô¥¿¥ý+ÜmÞÄ眲 Ð"·š¸›ö›Ì+gWþç^ù½òߨ‹3/w|í€Ëf˜¥/Ò}³¥ ôRcxiýÅ*‡‘²ßÙUÀYÊWFsSèÜT¸«Gé›#þr3îíXþ¼¼ù^àû±ü{`ùA€3Vz”~•Ú{”~™F·Gé|U;ß×¼›^Í~aô|Lí×À¹È!w1µ÷(›—¥§Fp¹ç’N¯`”y#m!í7/þ–Ú{”ÎM¯¨&@`œä¥WSwÒùÑ2³ª €'9èÞOí=JçÞ—/ZÒÀé+Ï&·oàÂ*=Jçgï¶õ(ý,é” Hi+ö sª€q;¡º“º{”ÎÃGµGi@€’Cn¾ò»^ø–’¯ç¥—Óèõ( Àp,¥G鯩½Gé|O±¥áìä{q7)÷Op~å '½¸TrÒS{Ò¹§X=JÃé[l|ÿÚÊú ίL.­™ÔïQz·qð¯ç¥¯©&83¹%F¾g?÷Ú|’Wk`¨èQÎ_y¼ÙIŸx€ CîQúvjïQz;õ{”žTUpbîÅwìé Ow:¦»£Šàp¥G驽Gé»Iç:pùdÒv”“>±4ß×-Õ G“{”^Kí=J¿Oz”†ñ(¾GNaÚ0œ€«qÀÞÖ£ô§øÛœj‚CåÖùvƒÓ¸­@€–¯úæ«¿RwÒ ª þr3¾'/Niú×búßT5œ¼Ò£t¾?¸­GéçIÒP¬Çwã´¾‹1ýMU §«îQz;µ÷(};éQšË+_™=Íš`8'ù*W¾ÜÕ£t¾r¬Gi.‹©Øþß À0Þò=ÁùÞà¶¥ó½Äz”fÜ]mþù)ÎãvÌãƒê€Ñ0—ú=Jï5qéQúªjb p¾2»|ŠóX‰ïцê€ÑSz”ÎÏnëQ:?‡XÒ ÀXÉ÷HÞMÝ=Jçtõ( 0Œ•ÜSô­ÔÞ£ô¯¤Gihs?¾#¯T\\ùÊï³ÔÞ£ô›¤GiÈÖâ{±¦*`<\KÝ=JLûWÁfT—À•»¹ØÍÍ¡Ûz”~›.wÒk©ÿ(WϦü/½òÿÄ6©>ζlÅö¾h·ÀePz”þœÚ{”~.WÒ%¯Ù4ÎLn ó«ó±)pYå û0u÷(ƒò¸÷(-Ÿ½ÜDN5Àp^rÒ¹)t[ÒßÓ~sÕë0À0NrçX¥Gé_©½GéÜŒuz’€€€ÿ¤ô(ý"µ÷(½‘.vÒ00ÐêFêîQ:7ŸÎͨ§`€`œä².zÒ00p$³xÛz”þœF·Giøg¹ téQúw# ç¦Ó¹ õ `'¥GéÜYV[Ò¹s­óìQZFN\éQz=µ÷(ý:}ÒðÉËÏ”ž;ÂøyÜå–÷×'EfcX³\é˜æT5ÎÔ!óŸmL+ÏweÀ´`àÈ®§ýæÐßax7õ{”>í"Ÿ¼¨Óaä°ù¹QÿåýuˆÞjl#uùšöO¬ÔVª¿?=$¬—{Ö7ËðVNCéQúSjïQúa:ZÒ7Òpͪàó À{e;¼JÛ€E°Íå~¬³—iÿ>ó|ÒäZGþ1`þ«ñ6ÛcÞöîÀÀi¦GéùC¦ñ9Êa¡Y>¿œ;KÛ‰œ†À[ÓYŠñ_µà¯ñïBÇ{?Uãl4þö2ÂóÄ­FX¾2˜›Bçæ¨]=Jßl Ðõ½Å·/Y^Ž:¹õ³' æã-DP,!òe”rÕs"ê>Ë-õœÍD€ÝˆyÍ!¯Æ Ž+Ç ÀÓ1þ‡–ü$u7ƒ.ÛÉãŽ|=†/ ÀÀY+=J¿Jí=Jçð–ïý/Òßͨ×Rû•¼q À9(æ+›Ûq’à}Ú¿Òú;lÒ[>û˨£ÕI†‡ñ¾Ý¾¥>™p#¦»óۊן‡ Àß#¥cà;1þjK^‰ekký(>ï|GN±]½€€ó4ñm=J7›M—’¯^¹$¸Ûúg"æÓÏž‡—¦â³bóðÕ¸ 1ì}UÿezתaëU}R®¾>;BÞ‰e®ËF„ôé`ïáu~”Ú›AIû=Ï À¥åÁ¸4ƒ€` äp“›¹þo©»·àr¥øú%À9´5ÿs7>ëýÆg_iŒ÷>†_o™n¹ {+ÆyÔrbâç¸,ËÝ#à®uZ®ðOuà¶ëfÐWcØCðÓŽº€€swï\Ó£1ÀmÍvKÐ{Õøì‹tj@~2 ¾"?ĺðÏtðÀ9Äæ&ÙoR÷=À%Ü7›Açåÿ}P.Ó¹%£æÝ¸”œþ«1 Àman¢ôÖZ‚f@Ó€ÜõÞìÙxíðր镫Ö7:p Ü¥ô×êDÀ0xEFI¾ô÷ðŸÔoZ;nø]ËðÒì÷Å àÕFàæýµòþ['€›Í¹›Á5ßû¯üç&Í×!pP.Ï —ž `³¬V¢,Ç~. ©ßtvª%8[.Í{k÷ã³Þ;¼˜újú>D^NÝWVÿ%h»¶+·¹£¬ò謟ÕðA¸Ü¼ Ý8÷ý¢ Ásúòß&O çéæfÄ;pX®ì€Kè\?BnÞœç›ï~ã¯>o[.'vó€Ë£ &`@Íü#‚^þ÷S„¸ü\à›-Ÿý_p6ÓÌM‹?GýÁx˜çÿˆ÷ €5eÿË“àÒ ºÙt{PÞIž À#€sÐÉMŸF°Ë½^O7Æ[ˆ€Øìíùfjoš¼œþ¾6O3ß'›¯Â>Oû÷w½¿i5élÇü§ó^i)÷R{óä«ñ÷«áK©ß¼˜Šqo6†/ƶ±$ðhàQ—ÃóÎ×}~œÓ·1ÛÞ`€às’;ÑÊͨGíÛ™´ßlüž ÀðI(i=±åÊÍÆßáö.€\N7Òþ1åìÊÞ+ÿ»z8—"üœ¡Òôüªª`\MôÊÏÀOTãêNêß‹úUu0®Þ§ƒ2i Àؙ핽FÖ €±³–þ~$fМ¹k½ò¦W¶zå[¯¼ì•¹švÝùU³h À™¹Õ+¿£¼è•g½ò#^_?éß鿚Apf&ª°{­>Õ+ßÓþÕà‰cÎãý€üÉ*à,\ ú²åoâo‹Ç˜~[çWÍ2k5pÚîF]iùÛbüíñ1¦¿vHøÍå‘ÕÀi»!tu@8^;ÆôgÒ~gZ¹ÌW¡w1æ½’Žw…àÄåÕfìÀþUÞ©nôÊ•ãÓ1½UŒ¢«±#üs ðL„‹iC>¥må8Øö ÀIË­’~Å~=wZ•¯ú.œð~¾ünl©n`Ôä]n“ÏÐ}8ç<ï¦ ö°ã妛SÇøëÏ?ìg›<Á} ÀEWïËýÁ+00îò} ùÌßlê÷ÞwÖ8ï|ŸGÿSí0WZ–ó2þªÆËÏ­»ÓïM”g©vónDz,ǼnÄëñúVL£t矟™÷´zßFúûšzþߪ•|VõcµÌyšïÒÁG´Œ|þ9¦Ußz;¼b¿Ÿu¢QWÏc¹Õi›1ßò¾ÝXÞ:äiç&S÷«õ–›U=jÔg1Ã5¶ƒÇQ¯¿«ºyóñNL¯yê‹j}Ö^§þóK¾×+?ÓÁç^°­”“/õœ›‘]o À«±®Êç|;DÐêÚ>o·lŸkÏ÷}ÀöùµÚ^šÛgÛú>Êöy'æ]oŸO;¶ÏÝØ>Ëvó¢zÛw ÅzØl|¶¶z/˳Sû­e»¸è·7eë'p (B} x^øy¼~œË©/Êbã þOü{;Æ+ó[n,ï8Ø}ÓdjÍ{,ãõv,Ã(_cøýïnãu]Ÿ¥9QŠ`ð;–çQLÿI Û®ê¿0f"DäñnVÓ_Šé‰e¸A ÔKQÂÿó–:½3`Ý\‰ð=¦_–·Ì³>°Ë—ÃÒû˜îZj¿gµ-@•zþ?È+U{uÄínºQïÅvLo½6ÛÆËj{Ü«B佪N¿ØV&"îE}ߊme;êf¦úœ{1|5¦ÿ6†¿9äs Ú>?WÛg9!r¯ñ¾{-'"êg@^¯¶Ï‡1ýµöó¶Ï»ÕI€åÆö¹ÑòÖ²}Þ>¤NþÄònÇünÄ´ÿļRã³mG-Æ>¦tS_åW½ÿvµ<{C,ÀEò#~÷ê1ó©ßð¤\Ký“‰#ë¼ðF¸*êŸSÿŠÐŽ`4ïÿ™úWÚBñQF}…¬ïâõdüX4ïí|ã•Pð>¢ãÝi|ž:`”pñ«.&âs¶]y^oÌ÷{ËΕ¨Óûêc¹£îžÄãt€Û¥pÔ¼Û8 S>ãÖ?n{ÛÕë…*,~mœDø“úW÷Êöؼz\BêLǶr·£ÊôŸ4ðµÆxß" Äö9ß8 2ÓþؘÞjŒW®(ìX¶;mÛçv:xåw"†µmŸ%_â;ˆÜ¶ÌïbøÕê³í¶Œw·ñÙîTa<5N”lÇg÷bŸ÷9ŽYž¥þIÅ«'8Ÿò{µ©Êøï\Ÿ¦ƒMGkÏîµ§ƒëÍ8ðæ~¿®€ñ¬eÜ_ùË·nÊü5îËôî€ÿ÷*°•€ñ2†ï¦¿}SN´õиÐXîwÕAþõ#¬¿rÆöGüHv=ΪàkÇ Àï;¶¡ÝØö5–i5õ¯êþ©Âû«>Qm;¾×;¶•×éÖAp¾šþŸ–°W¿ÿ_¶Ï¶{q›ÛÚ«ø^Í4B÷÷jûÜKÝgü·Ž¸}ÞðݹÞXî©åüú×óŸ–`_Ù‡©ßû軎iü¬¾§/;¶åúÄÒ|¥•Ënìç_¥“kú,—.¿2ÿn„®úÞËüÿéàÕÏ7Õß¶¥Ü|· PÃ^Aì :–{³å ~µŸ´„†6ïª4—Þ#ÜÖEYÖ_-uPê¯nz½Õ¨Ó—:íò¬±,›.¯´àÉcà'QŽêj¼ïq5÷U0[ªÂÏëÆzÝð}XìØVšWœ¶Í'þeû\bû,ŸûQã$ÉãF}u=òâCÇöYÊò1¶ÏkÇØ>›M›Ûسtxo¦õ6Vþ¿ÕRvÒh<† ࢀK€ËAý f4Û-#_-+÷ Öax­ŸÆ°¶²p‚x˜€‘å+j_«à˜ãì1ðvërð=Û²¬ïÔÁRK®wÔé y¾¹)êÇ*oWËÓÞÎ3—õ‘ƒ[¹úþ(êáwl[×'KÆ9gß«ís=¼"|Xþر}ÞˆíéWã¤ÈYmŸÍ{º›'@ž¦¿¯8·mc»ímm@™KÅíØ·~PÀ¸ൖ€Ñ VÍ@Ðö¸”Å8Àþ]¼×ÍQ›áj¶qp{Vøqê7‘üÙØÑÖÄ´ÜçÛKsÎ÷:é:¨ŸŒe˜¬ê´yâf˜AÍ‹'ãDB}é•Ôo‚¾zHx{Ø€ožQ.•ûpK³Ö÷Qßå±_S'€Ë=Âm=-ç“÷F ¯V'¤~6¶§©ÔÝ ½Y/]ÛçÛ–ƒ'-ÓšjÙ>ûÎ ÀmM›ËýëùÄÍtËòÕ~¦~Sðû½Ùƾ€£_m¨ `Üp¹Oõ[j–ê«F*!±- |©†owìHsPûš^y=ËÏ뎀Q˜¯Tát;ÊtGãå÷©å3|:$—màNG€}rHx+k4›¯ŸQ.Ûßçtðêl¹?x«å„Ä¿à•t°‰qQž¥øtðlê?v«­Ùòa`½°}¾mL³t ·ÕrR Ü§ÿðßùAx·%˜~hì>ÇxÍýY99ò¢œ×;ö-»©û^x``LðÖBI¹_w;2ótŸ§þ£„¾5K(~Á°~tJ}Pú®1ÞÔo¦¹ÞPg€ëåÚIß»þ~ËãjØì€€‘º¥ƒM¡Wª:,)zþß«ù¿¨êêN£N_¨ÙjÙÊcqr¨ýïÞf#0üŽ`¸ëwûxñˆ?¢ÛéïÇB•^’Û]õ¯¸>ù²ÃT')®Œ@ÎÊ}ù¿þaûœbû¬›BßOý^ª›Ûgýlì—¾ó/†À¥£¶ò¨¥7éï«Ï×c¾?c¹S¿c´ŸÕ2OTû‘—-û–5? 0 2¢õ}}âÀ3ÕæÕË©¾[›Cß³t°)îDéÆxkñÎ:/,¯W¡®t,õ¾QÏsÛå‘-u3Õå»õôÞ¦¿'´u^×ÿóF]µ¹Q¬(%_™»9dx»ÓX÷ùJܵ3 À¯:Öa Æ3'€KÜhl»›é`¯Á瀻®pÖÛç§–íivˆí³,ßÛÆ6;ìö¹ÛØ>Ÿ ±}þ‰å-½\—“m;¶å/‡,KÙ=o|_~uL€Ã•¢¯TpÙLÇÁóÜÁ¹Œ;1äxÉ•XæÉš^¹rêñ†©ÓAëî_›εu/öYä©cÖÕ8oŸ“'ðO'¦‡Ü ûÙ.ê¾`Ô”“ÈZÑÀ?ñ|yIU‰Ï#J×çš‹×:™8¼†Üf&;Öãt¼žQðŸ´5ƒÞq\Œ’Ü»î¯ÆŽêË1‚ðf|ÿÇÇt>÷€lÄüÏÃJÌû$øV”®ÏUž»7gÓ>´7‡Üfæ:ÖãbrVj-Ç•/T 0*îÆŽéCÚ¿"6øw¯l§»b¹Y…‚º<é•7ñ·Ÿéì¯k^m9x8y[\r›)uy;êzA€N¯øš*FÅ׺͇’ßÖÃcà./Ž1møïÜ$Ÿü6ÓU—0ÀÅt5ý}¢^9¹ò_Wá÷?ª‘(7}íaßÇÔÞ,e!vZÿò¬ÍÃðíøû«–á/"t¼ðEÍ÷[>‰ñ6"¬s_IW¾Ÿ³Ì÷ö€˵j¾ë©ýÒ¼,bœ—’Úð•^y\Mo5 w/i3/År5pùq߈º¾Ó˜ÎtŒ»uð2Æ}œÚ¯Îç&MwcZy¼§1æv³Ÿ­¬£»y-TëùIuòe±Z†‡1¿f½®Tã¼jY÷s1Ÿ¹ø¼eY´l#†®Í¼PM¿€oUËÖ5¿¼®®Çråg!ÎVŸí~µ¼mŸ­Ì{ºÚnîÇvÓu2é~Œ ÀßÇ?å•]_{ì4¯/7Âu:uÓèÍÔïB½%¬þŽ/ñ§´ß¥þ^¯|"<¶àõŽù¾i°‡1Ÿ_1^™o÷^#Ô~Oýû¨?Çÿ?5pŽÛñ96ãï{ñÙë˜iØ{€?Åôòôİ·°˜‡½yŒ¿ïƲÕávªú ßbš¿â}ËÕx%è¿«v¸ªy½«Ö×Vê?áQ ÿšú÷ m4–õG5þf,cùœ@Zæó¾ú|ßcýÔõxR÷—õ÷9ÖûŸŽù}ŒuRêæFÔóÏêý›Ul¶ÔíËtð^ýòÝ™m9Á±Û¨G«|HýÑÊÉ–ÿÐ+ÿo¯ü÷êâÜËŸt~­ áB˜‰òôo½Û À³ þ¤þÞÇ©ßAÂDŠËö~u@ÿ+‚Ä\5ÍÅ8ÐwļR…ÝÉj¾%¯Võ±a£¾"w­ÞœÇrcùöÁéE «?Çõöæ„ðVŠ&ªà´ÒÀ¹ÜmœdØm„¯Wé料ÓØv[⯘Nžÿ|5¯üùnUËô®¿ÿÉ*DN7>cÝ*`2Âm ’u ÝkŒ»ÜªO2弄W÷勵[9lUv¦Z¾·-Ë;™úW'®7æôí˜ÆµÔoQñ¤ã$Ö¢]@籊}ä鹕t~5*``*õ¯ZÞ;æÊf£ü¨‚`3üLíM^WóÁ€åz•¿ïµ?Çô›MU'b™¶«Ð¾š>z¨øR…ÑɃ,ßb#ô4;…¸‘þ¾’÷¯x¹£>7ø}ËÍg%oÇòÔatq@@Ylù¡½Ó¨ï ÍîÖ àÃÖÍ\êîÁx©ú[Yö_êýMG@L‡²að|:ø|éÝä:pÛMóŠêIàÅû°ùͧ~«‹ÒĹþl‹‡ÔU™FþÛóxý$é @Z•Ž¥~ŸÐÁQð•4ø ðûô÷àÙ\®fPÜ€JØÎWQï¤þÐ¥t°c£º té9ûiËô–üÐNFè}˔~:Ü~>ÇôëPúh@X\Jý+ÀÃ\M<­ü=êæQ:x¥|¥#·]‘-WI¯ŸB^0¿…ó+Ííówïa:Ø$þ~ã³ ÀeÝþŒÿÿâ³À00\: qð½Nî!å›Gü’•ûm›÷FN§ƒ÷?LÝWXs“äܼzþ¸ô’<ÝJ¶«0ñ²œêàú;¼ªü;¦Ûô"ýÝ VÛ}ªe^ó'€—Zê³î,¬„Òw'ö"ìOÅÿÛ>W^ÎÕ:9|uÀI’çx}@øŸ8…¼~ÈɆ®ù]OÝ÷,7;;,—À|/y61€ 0´úšúW[JÄ¥á®5—`»Q…à©´õ|éúW#Œ.F°û‘þîHkP¾[À©*Ä–ú¸²6ÂïÛ–ʳÆ{³[±|m`-5ê·trW€s}ÌVõYե͎ÅJ½¼n ækUO§¿ït¸´øÖ8Ir§ª×fÞM›’—žÆŸHÿ5ï6>ó“!çWÂýçÆ¶»”úÆ €KgeåñZSvo0Àp0˜öÐìæcc†ùòlþ׬\!݉÷ÿNí͉o¦þ½¸_S¿Ó®|µö°+ØmÏ.•+·;éïžvçRÿ™³å9­;ñÿ*gª`ü¾  _«0YÿÐÎ¥þ3‡KaåùÆË‡|Žapy¦ïçês=j ¥õ³”K}~J¯Œç0U˳ú=hç÷­¶Ú“ ÀuÿËñ-æ_Öß³F ýTm#?ª“§€ßVóÛª†M 1¿×Õv°ëa§:ñ²:d®§õÚî @ºÓƒJóYªÃ4«¼þ­ùåõ>¯â ¿«pf"4ç`t?µ÷xœZÂsÛr-ÄürØyÒ¤óUÈÇ1γøŒuÎ5Æ_Š“ËÈ+éàs•§bÙËçxœ†ë´h¹’›Ÿk¡z}7¦ÿ4ýÝËtJâs­Ç´'œ4y6 ®®¶|ÎòYWZ–¡Œµe¬¤ƒW1ïTuõ¨šÇ½ø[H˶»ëàvG=Þr›™êø|õz½óZ¯–gØù-WŸíAµ=¯¤þ•쮺ªyö/€ 0@‹:‹:_Fù~ìï6m`x\×ã­Ôo6þЦ Ÿ‘‰øšnü.ÍœñrÌžÃ<`X>ÇÏ\î}ž°iÀçx,ñ'î£ø®´»l%ÿ€ÑvÖö¢›ŒÏt™z@Ο9ßs~Gø€G çº]?Åy~O;ÍÞœò<`@€Ï¼5ÙVKF.QÎOfÈO”ÈOÈO¨Ÿ˜Pä§ä'\‰¿—'o4Ç«Ÿ(QžTð, ÷˜Ãü¾¶§ÜŽiäyæþ*ÚZ å>-òS&òÓ&žÇ´&Óþ¥~ºDÛ“r«¨;1—1Ïæç,OXÈ-Ç®Çò•'ŒL À€+¡ã2."ø8E$›w]ˆcõ[–^r_§"ÇÞOÞß7•†'ÕA°´SÚ©Œv0!ÿAîñò†Q§@o»dóÙ0a1ðRò»ú]*wo¸g·þÙGåNÖÉTBkÙ%›Ü«°tOª„%»+vÌý倈{2áû0tÏdÃ%Spn»Ö áâû®üê¿.~tm´J˜mãçeÄŽþƒ÷ Ü=£a?o>Ðû¡Ú±±YW5¶ÏöÜÊùðeäZå—L[5q{GJ´µk;`ÿ#ã.ÇX^ÚÙbׄ÷¡:®|X‡¦Ñðâ’õY:o²ÒBÊÉšzþ õÌ_;&ìž ¯ï\G¼ÄÝî…ÒÙÌh˜ ›ª¾J~î›w@¨¼¼¨úW3¿¥çÑ1îtYVï>]?òÌÖX7yª[¶¬GÞ³Ö†iù'õáÄ”‹„m߯v4Å‹ÕïÔ©4»Ú¼,à7]Ž.T¾Q àtd­ï¾µˆ•ïìEÀ>4ß¡PgÞ¸F€KªCN껟½ Âm !€W]|ýnl˜˜ÿ(2Š#Boý7 `i”M)ñúî’ͱjª¡vƒFؤK6,Ø3÷wˆÙEˆ­u4ÒïÕ‹Wo‚p ?¶UX¯M‹hè>*Ïp_¶æU¢bY5æ¦e£)ó‚‡[ý>|8ò`_[ðgN5f—†À"nÖ`Ç-„q§GS¹;@›p÷û´qWuF„>j“ÊͦKÖ¤Ÿ¢¡¼†´Í«Fø|ŽÀ+òm×%ëƒäcyí’QBIŸž*¶§ì: »JûjÀ^û(Ÿ eÿöøáí)‘)áï*{ÜáÞÜ€éKÀ¯p»ë’5Q‡ª #ÀR¯wŒ8”z0…ðO”àF·”Ÿ2Ê.ååD¹;UåÖ–—Þ —ì:ÚH\:}+ê´¨DýÂÙD¸]—><«Ò!³ ¶Ô»`\8”RWoïEÕqu‡ð‘ÖgäWY5–{¸¿ŠwÂî=ⳫÍË•o3xWêŽ@ `BœŽŒ’–#"Î à÷u°`Õ|Ëڦ͠ۊ=õíÈÀ_+;/×MÇnè¦ý¿ÏÀ“o0oÚŠÀ„ðcðÿ r憟~;ª¶/¬:ƒgæ¥ôxÙK¯¤48oá®yÑo˜àuäøìú§ ®>*N5ÀE¬Dâ¹i¤>º¯Ó…ïÍÇ*î>$ˆÍ•°ý¶”Ðv´y(BÞŽ€ÞC‡pìÃÔ äÓÂXÊñ°›¿2/é“7Û—vÓˆ¡}㮀x{QR_DÄÓA ÜÊoZú¶]ú41]NîLƒ©®Þ– “Î{ÄÁ†3¤–MUn8iPMX^F™ýˆ:jß3+.{•mÓ¦ß%cÀw[…êÃ’rª c癈»ù»†òÒº)»dÄš˜P§siÞ{R·DßÚhûæØÅ÷¸dÞuê]®wG^Î)€¾﮿“z ï‰Û› _¾3O÷hïÜRÊ;\Úƒ+ê^ï¶7õÎ¥&ä?Î"^;xi<¸áÖ Ž*€çn¯ñ¢Ìz)­ªs%¥^tý£òÜŒ¼O#¢ÀŠÇõÔ Õèmæ£ÛFTçÀçJˆ.¸ðš¿AðS$-zÊTLÀìEËSVò`yæÓAÎè uZÌD«yªCCÊÔb$lÝ£'+C àˆØV }û9𮹿éÑñ]FƒCo¬êT/¹ø”º9ÓÙ’·¼ +€'M°dm((i¹‡=&Rë£à݈Mm§Êt¤Lˆ¿2:ô€+ôn-fØ5”—¡G‡À„8ó.9ãö —Ìú¸Cg’®“OhS=¸þs€çïºøåÝ=ÞypÕ%³Kn]Ò¬X’ðºøÖ^"MûvØ¡tG‘w SÒùæúglQB¾¹íß €k)nË‘—­m¬·TC8íºÍhxÇ^€ˆûЋt/h–©Î¡FjsÑdã­§ö\ÿèï0¸“CTÆ>$±¼FOB,è´ºìÑ_ÉË•åä\}PõšG9ÚÁLetí2¥ü[›*€—"õ"mC²AÒ—g»–j?‡¿º¦Õ×Aðfް,/à `ýÎ qé<²¶|7ï¥m×?¢<Ž5ÀyêCìýjý}Ïi¯,¼–"B¶)€ pn¦ñ.ñuËwÄÊÌžÔ窩“¾^íÁ};ð‘wï(ÝPþZ{•]²´I?Û tŽ­Ám¹¯³f–ðî>F§Ý´j“êwl q:Pál¦„y¤ÒY Ø-t_Òµô” `BrPÊÑ0þI,#o… ,k;6TÃ[¦§†®åoÀ2B÷„4lâ·…!ðÒX˜B#òN½üö‡À7)/Õ‹Àú£eÓÖA¥”“óLÝõÏ {¡/ràÍ!p#£¥ àAÒ—§¬ï+áóWv5·– _öRž‹4rbåeTë,¼ËY_ËèH9wÉÚè'—Œä*€ón,–WŒIÇŽ ÑïO `B<>þô#ß0!ߊoXÝ»ðÔD™Úzöpèc¤×ŠÆD©sÉÈoLURD|n&¾QËÚ¶®ûºöQÜmå£"4&s `9âÇ®)œ„ ß”ˆ …Yp_×äÉzð3ÏfãÀÅ”´½Dâ˜Õà—)Ÿ‘:Ò@YÒÇ7Ùºâãü7’_Ó)åsY¥ÿ=%ϳðvJñ½è»¤oPlÓbm2‹r_Ny—ØÑ¿ÅHX“.¥Ò!ï¶Ug„+«®Í¡œ×yêúGO•H–ÑÉ„QHI¿3y;HK×”k“9Jêñ-@„?™´å9·:”—:Ou^½BÄØéÁ[Ʈ݀ hÄkw×.¼ÎqK¥åsÆŽ1»JX:N"@lgq°éËÚé=VÖµˆ¿Ë°‡ÔÙÕSŽ5k¹ð&gWÊ¿ÒrÈ»׿ûnJÆ>yÊË<êä› ï˜,”! å¼[§D°~Ï<ßRÎw°Î›Ê}-£Þ7]²+ëÞ‡“&¿Òò/T&”wïÈ*âÙSeÊÚv•³Ácá.ºdFÀÊæVä½A0!À„ŒÒ_GÀǦ‘›‡Âš&Àíoò¿À¢MþÀòÐdt,yÃúM0!À„üÄðßÎw `BþD(€ !À„PB(€ ¡&„ `B(€ !¿Ödzñ»ö¥iiZbö’ÿs(÷“4!„˜ `B!„B0!À„B!„ `B(€ !„B!À„P’‰_7;ÂóÓø Ä®2Mü­yçm,××þp›7×þ.j¦¬äq¯Ï÷ýμ+ÃÿÚý¬šº aTYþø¼#ƒá7—›£(€ ¡&$#·÷yuÇðQI»ÎÜßqæð߯1ì+Ïöô÷ ²ƒÀ ùoÝÍ{ÉýÝ»v·MYÉS¯÷(ïnü»¢Û§%Œæ?R÷ý¦€›@<¾#ïÈ`¬~^OŽÍÀ„P’‰Ù¹F‡^q_GWUG4ùJwQ6l|ÿÖݼÿö£¸À>^]ÿhéwæÝO`Ùyý_)«ýA¢“øÏàÎý[GRBLÈ·Ðr¿F_Ç$€c k?òûòy½¹d:%ùo à¿ýcò_À~Šôóçµû—‹¨ùÌa `bYF>LÓÀ„Pfæózÿ¼Ö!T¾S§¹ñÓJÏðû¹û5blñÓºüZÄ+¸;Ž|ÀÊõ—pw„tÚÆZ;2î7Œ`h !íýóÓy+ÊýÖçuß?¯©@œò¤/†oÈìãÙØóypn;°Ï– ¯­Â†’.~=`+vŸ/;Æ6mÕ±¢íÚv_Ï>®àù«[J¾Pf%÷\¾5‡E„s¬læí°¡ÒcËWMÙõN•ŸZ Ì›®ªm×,â~Šü]‚Ûì.6ØqáéŒÓ°Ø½qWƒm®PnÀëp7°á’Iãü“rz)ã4ÐOàî yQåHY[nÊP¶õ×J@K~M›0üßs*n'.ÐÀ|WùYÇs·ø[„qo*»HÆÿ§]úÈ—ýîÀN¯*ü„çã ;\"_¤ÜŒhyGN` oãG#2fŽÔ™ <÷SwàgȆÇ&×ÈÄý%"†.U}:VqÙ‰àš‹¸wÌûª†¿¥ ‰]\úàšÊw‰Ûž}‡¨Ôï—gU7¤,]çhP7TÙ}G8üÿݾlz-ÃÍ‚z—H9›ÃßvÔ^êHËÜRïÿ´wçz¤~¨ü±yWPn6s”µ;„/~®ðþ¬àÙÐ÷¡ù߇ZÀoxÿÕ”ßúÖ3y7}Ï9Ò'œ δJo«Ü©Že^¼þÕ‹˜Ã!ªÕ1 `»XFDPl©gdtÆn’ÔÂ}ixm$%øù¬îÝhIÝŸR뙇Ë@ÃuœûÓ¢¨üÒ‡•Ñˆë €¥qzáúG|—­ø=eŽoJÌFìw€ûË)"Њ¨û=×?SAåÍ%#W’®[—Œ²xö\¾>Œ{â]P¢q:E*€e|奠òïʈx¹¿¨Ê×Ò_2oJÌ8¸yuý#NóʵŒ²'í<ØŠ+i°ë2ºÅW°qmD|¨ûSˆCüfžSu&­nÌáÙ¼øÕõø.àþ‰IÛ›y·”§=õν¯áNw<~À6—¦ƒDw ÞÂ”Ž¡w•f©ƒÒáRtÉNÛ:.9ů®§Ê¿bŽ÷çšù>̾]Óðp7ì÷¡6à÷¡†ü¿SœãLŸ­k£œêð/sá²7ìäÅë_º^Yí ùÅbD¨|ç.Ðîëæ9Ò ´Ópe× þÞR©‚iÜ••H‹m²%½Ã!ð½qW 4Z…ϼé Q‚_¡i˜§¦G/KŸ¦ˆžsüV…Ð 5Ȥ±¶¡óÍ”rÕ@KÃ9´ÖtÁäG[u²„ò7ký¡| ±Z§,ejÌØN×–ü›¤_ì¹í’Qcñ£‰·mü¥ àY¸ÙÎ)€_Ü×Ѧ¸•ŽŠë€í%ïZ({à àR @ØÏ)€ÏÏ>)±RO±éá8”–UNÒÒ¼`Deè}µkÊØªòO ¶UþL›÷£ tì™ç6#ék+›oøí˜Œ| ïOŒïCIu†Ä¾³&oÀöûPMÉÃÕÀ÷aésŽ® 6u‚”]ú‘¼xýkWÕž_Í—ÀÇù;F€·ñ¿s_ן9ô¿".ö’écçg%`NŽþø7Ý×)Ñ-rÀ'‘Æ^V#oúÒ(¢¶ŽF¨Œ "€И¡G×—Ý`GÄLâŸÏzzö XF+#i×âDÒ5›#ßb¸iü>FòÉ>3ª~J¯µH9!*S-Ïñ¼Sù(¢'´·•Cϧ”ƒØhË® §ç²7CV§u€,åÀ±üë!²iž¶ò–“—LÏ´y|fìŠûœ‰§w{°ÃÊ·f¤c)ToÒöøPï€77ØQ[‘÷çKŽ÷çÄ߇fÊ»zÐïCm ߇Xú^LŸfÊqC2B!¤™ÙÇR.YŸÛvÑ[<ç’5‹õ@ÃJF?b—S€ÕЗFVÛ4p–"ñÓ õA°m€/ºüSnó¦/ĺKÖ‹zú‘†#—¬Ë+€Ó:7´ÝäÿË9„¯ÎŸ·~ôípœµcµL ÖnkcÀÒXí¦äÑ8G€»Cà¶©ciåiAåã|J~§‰“æ€8TŽm^ÅFYÇ!€å¹VŠŸ£ à´÷ËÒ°„ó’Ç­”¸L§ìä]Vn«Æ^ëñï €ý{êÀÊa°^o?®ïÃB$Ï#`[>—ø>Œ+}¡xr#,B!Ä46Ò®Îþ†Ö2êtëú§p½¹ôiÀ1¼ö£b²iʬjt„zÝe$ñÒÄÇ6p¦s `eÙ „5Š#¤Ï3£l6çú§QËHP1§¾G£8Ķû:¼iTM#ÿî‘¶¦ëŸÎ»4„^OÝ•ˆX§;ïåÌ[ÒF_Æ,€e*{Öf_K)ù˜gØNµ‡îEêBå»< ~P¶”¯Ð4úå1 ॔÷ËÆpÚ{Ìå,÷2B:eDŸl¼%kO¥Cr%¥¼”\xFLK=: 1<ê÷AFMg2Ò(߇‹À;Ñ¥ÔõÚoú>„Ò Ÿ#À„BHß¹ ´¬w²£4²ÎD Arc„Ïûº–vM5f«îëF/VÈn³2°ñ/KËšÃNŠ˜™pÉn²±ô¥ØSaK[>[g `iŒ†ÖߺdçR m~$BMºøhÞnÀ~YXé¡õÔkFˆ}‡ööô£ìîëZ¼)”»­”ò aï©cÀ"´BÓüàÿ:Þ#y”縲4A9¬–ºPŽÔØQ:¡òX†_]ÓÙpŸbÛQpZÏs¬J^,ï±P8‹¨¯«q—÷Ý!â\TõSvn”áPyYqáuøŒôÉ&M=—oÇñÈý<ïϬïÃ*üøˆ|–s~Ös ಲ³Ef`UHßNŽôÙr’µÉ"!„BRðž À Ú°žDÃîÍ%›ÈZÃk—ŒFøÆƒŒpÊÚÇMÕ +*wrŒHÍ4.¶•˜ñ½ãÏ92Z)=ä7ê^Ã%=êYعdºoK…µä’c/< *}µ@úZ)ö”ÆÍ‘ò¿¤ôƒàºKŽ©™T¬ƒ€x;u_Gq›Ê"žLÃmÅ%k“µý`ûi—lˆdm*ÇãèM^5úx£ïÀÚßcVÕ%G#鯾LEŸDzd·î—ŒÄÔ]r4Î8pY•å“?r´Žpdʘœ1œgh‡òr9F¼ DVYÙéé)GD¢¶ òE6nÓ¶”òÔ;bÕ%G^*€EˆHœÄu¤l:¬ËîJK]ÙBÞ•ZÔÕ]²&Tê¨Ò ׇÓÀûLÞú´€¼X ±NÎo‡E¿?'RÞŸ›¼Oû>d¥1ï÷¡6ä÷áì›ÒgËé4›5„BÈp¸ëò!–gd©h­+áÔUÿ?V ‡‚j ÉÈœŸ©§Ø•\²Ëí«KFJý¿vã¤׿–ê]54ò`–œ}zçú§oäH_ˆ¢Q/.9¦äÆ}ÝÙ6Ï9À‹.YO,Ç(Ic^,”U^¾¨g:ª-#‘²Á™¸[w_wZ=PvÞØ´¢Â|U Í®ëŸÞ÷]¸ ¬oªÌÛòå\ÿª ¿«çeÔòzÌXìR®ŸUþØrçóêJåã òë0§Ž%:¬‘ú®:P$¿çRÒ»¤lú¦òðÌØR'%eèÝ}Ý¡y\0åYÖꞎYëwKOÙÊÿß.¸WqY t*m›wŠØp6ð>»ÌñîDë²½1„ÎûþŒ}Þ¾ùûPû¡ïƒ>S9-}YïB!„f]øÜÀÙŒ†0 wÅ Q×À¥w°¬BD´ÑHž‰•3 ÙpƼï*W`ˉ€ý+?9Þg±wgÚ»%”>¹?“ãÛþ?§èû0Ÿñ}(æø>Ì ñ}%}2…~›MB!„BÃO?§þ/vn]xÄMÖÇ—h&ò›ñbûÕeo”G!„B1,¸dã3òkúªŸ†ìGßjîר ß#AÖgò;ñ4~:7G !„B¿‘£À¿°ç_ËšL½9!¿‹Êg¦ „B!d8ü´ÞÕ_„°·Éœã´gòçà×YOÐ „B!„B!„B!„B!„B!„B!„üøL#×0»¾ž~^ÝÀõøyuàïÍþ-ìÁÖ²þkÏþ!ñ³ùÞEœÿ4û Ëì˜óm\ëøü.Åÿòq(þsmîMìç×éÎü¦2Sä{o`ª.9w÷oãå’B! þLËÈÕ¿ž=3búÌ„µDÓcض†¿Û#ä㸹DÙÐ| Κý†á"¾Qó­6†4­º_GÕþárß1"Ô—÷ž)÷÷ëh˜öo*3XYÿÓñÂןcÛüKãßá}@!„o¦q:ÎÆhZã]Î}¤éÿS8Ô ¬A˜ü x”o¶(|ƒ§_*~¤Pö6徆{¿Kÿi=: ØŒ˜B!ce Œ­À ®~óSñoìÈ?sb:mšv )ï_=ò»§=»³€ûeÓ€.«°m¸¥Œ°I_ZC߇±y~<‰xdá"éZHÉSo¿YÄ«aì&¶ô£o7Æ®1\γ¬îËÔÒ7ø”á:ž›Î3Ø{Á}B›–>]v)ùžWOÀùœiõåe~Í©g*êÿ3îëñF’^ÉÏP=Õ霊Ø&TîCå­¤Ò_PùY5næq•Rpï3Ÿæø[‚Ÿ°G-“3«>ä-3ºnˆø>‹¼o¤.6ÜàÇ)P÷UœBL+û‡Î*žPuѦÑú1•’iù”V竪¼—‘wòmªEÒ³€´ç}ê4N¨ç‹)¶Íû¾–÷C=CËûjÑ ·ÄˆB!#²ŒFƼW£®¹Ê#€àF7„|£àÑõOÁîÄ›oÆÝ] 1±p×1ê˜@”«-’Æóƒò¯®üé™°.L0oúbB¦ã¾NQvýë óàI÷uÚ»Ÿj¸hüílxl‚¡üð#ü»Æ–új+›çóÜ”I×â ×eˆúsÆŠ3óÈ'íöQÙ=-}µH¾=q‘5Ú7šOþœe¦N ¼Ix]ØJ~»­›ÆòÝßÛC9×îLÝ÷åíÞ¸yC8BS Ö'ãn báÕ”×Y“ή±¥¾š{5%„:ú°(3g9ËŒ¦áâKKªðÃÚ&ï(õ*Þúù[ó.ŒÕw›>o¿“€ý® Hm<ù×4ùÔ ¼Wb#áeÇvÀfZøÞÞƒ‹9ì%i<Ìx:¼[žõg> ªo¶y àPݺv<³—BùQöT#Ç Êa…pšö ù%Fu#­a°±3‡x¼©¸,¨F ÈuŸ«€@ºÀ³54Äzh ‡À>.~”oBÍ#£M§«ªü=ÊHßüÌ ¸F›ˆ[ á¾£1˜WWШë¡ñìÝù‘‹K¸Ó╆I¤ë –$í“ðo^uLÃÖ „{‡ÿ×"áuo y,é¼u_GH_>¯ÜΩp³6£:Uù+6¸‰4¶ßá¯î$z€ k黃;‰¬«òr=€ÞÆß.ÙÜIêîNJ:§•ß+Ê.Ç(w=„µë’‘`©›Óq?t}x‡[™±§„¹îìzrÉHò´òoʨâ2áûŠ<~FYóa¬!Ü›ˆžTÂ~S…»¢ÊVùVBì!²é’ˆúeƉ*3õ”2c)+»^ºd†D¶yG=©ϼpýR}Ê÷ân”Ý5÷0’ŸäKHkÿuzÔ+]¯»JÕ"é(#‡Y,@Ø7¨iëã¯"nv§©ŒúÞEþTùµËR&]2òYÔ³µŒü+!.· `çÂk€ŒðvJè¿á{–%€C³"Ô+ê»Ú8NÞ×βùž3,ß@[_š‘ºH!„ob °˜PÜAßàÿ—L%»ƒÐ¶á=£qP \J,,ªYÛ…×¼Iãl3ð[É%#ÃÃà‹HC'kÊâKÎôåÅ7ø\2õ.¯¾‰)-ŽõHàæ€ñ*!Oö‡À+1"âX¨Kºæ#â6-?Öà&4eÒNgíAà‡òíÉõåÙô¦ŠòÙÍ™o5Óp‹Ævm€Ê»-K‡Ž¬Ú5u$ÖgË·tЄ:ŠÕû`JuØxO§Ô%B!„ü EÕàV׌‡.¹dcÝ‹5½ûë!°m¸-º|;•’¾Ô—ŒR¾+;äÀ± µ[– 5«hˆëu²¯Càm—¾cµQ‘tMæÈ·˜ œIùMÄjVž½e¤O6¡ºUyõî’5ÎypBK¯¾ƒ»¬ó}ÓpˆE4ÆõZ÷^Îú2v ªŒÔ­Ê^3GÜÇ)€ïräñœKßL®=¤î¤ˆÓ¬÷JÕåÛUºk:iBAó8¡pb¸žÒ±Vƒ~Ë‘_• {t2êH-öÇJôž§ä}G…ÕÈoîM!„üøÆÆý˜°G¦ö…Ö·‰Øn¤\Ö¯yˆjYoõ 1ÐÌh<öBjX<ïòM_4}š²KFѼÐl¡\Qð†r›eCAF‘î!ô–!xCà-Õ•üÖ£$1a”G·RÄÌŽ²gÙ%Ëòä›MŸ¬·~GCÙ§oþvÀB ÂñD‰Òë1 `E>-È¿ie×Ý!° ë-¯U£ó7 à[ˆÐ´ü-«²™UfÀï·+cÀ±ú¾x7Œ*€C{ŒQËŒŒ´ü*Ž(€Å¶±e)2¢­7¦+äÀG)ñžf“ƒBù~ªhœ~“)§§cÀÒí¡á§?ø®=šfI5Ò¦#Bb²ÑìPj„ëÆÍZ¤a»S‹°¶ ž¼-!Ô³ÒB¦£‡ÖµJ‡B5§–)Ÿ¡QC½Ny6EHn#]5—l›B¿5€^LI§Äg XÂYüvaá/.~^µÞT*”¾­”pîÀ îëôҢ˷ãú ¸ë¾®s× øãpUuŠh¦\ÿfM¿K‹€ MamÀîEUf6î·À‡)¢Q¦äÎ¥ø÷êÂ3tæÑÉàÿ•µ¬¡ú.S·³ŽíD‡–/\#®å_hzñC,3)Š‘z=Ÿ£C “£Ž¼ºxçï£KFîõ²˳ +í{Z„ÝF=}B!9‘]ˆ§#£#Šk# `ç’‘F½qTÛ…7„‘F¬u;rá]~·U| .ÙÐi"’®E%bl£Ø?æòOù¼GXöÌR-ꥡ´™‘¾­ˆ8h¸dS±ZNÜŒv$wÊO.Uʸ÷à’‘Û ,)×6Ïû”Æuv|2¶,¸d³¶¹1` çÁ½)eOa?bû¥@ƒÖN7•8.ÊÇ€XÊX% Øß]ú´ÏДï˜~s_7<*(‘7¨–M”ìúFÙ¨îò›°Ôëµ@ÙØ äãI ðUÕß´2ó6€> Ôý“@Ǥԃ´ÑÌ£HçÝ™²Y3æPĸð);âîÐ÷'cÇPhòp+R¿g]²#ù8°tN¬w«&=òÎ87énÞ±ªcß>B!„|óø(¿B¤m¨ì~ ñ§¡—%€õTè­€h:E<|ø=Ä­®Ôro‚òÐ}=&gî^®M¯cÓÅó‡hŒÜF\¬Á?‡°žà~Ë%çT.˜¾ÒÈzF:|ãj X5™Ì)€3—ˆÇâðj:Bn -t,¼«Ž‘%¨›HûƒKÎ;Þ ”‹+Õ¨µ6]„ÿbËM—¬ÝÍ!Œò`‡|‘cNZðû5€AŒˆ8.IDATPÆõôóØë¶6á_©ô­£¡+i‘|;pÉÒ‚<5_9?XÊó¹Ë7 vM={’!€•`m"7*ßOÀºÓéåc[Ùtþ›°lN÷„r^Â%ëæ/UY?Ubeö•©ë‹²)efG‰¹<ïEñóR¥û(ö›é| ¡8’wᥩ+—Ìj¸PïP}‡î¡¾nâ½"G¿é½l¢ ôÔ»D¿÷䨳KøáÓ#SèÏMzz.{q^\QeôõàXå¿î”ÎÍkó~x1aM©xÀ­Ô[Çc!„e£W—Œ „¦mžº|uìÃ]5ÅÍ4Ü\ªÆD ‘{Äã „ZàÙ3ü."pÏ}æ7…8?!m7.<}Zλ”óFÐê÷?^g ²g„Õq_§ãåM_ˆ4°zãÂ{aIc¹elßtÉ™®ºbÓ%gÔv‘æZDÜ_¨t]ºþi™U4 ¥!~¿¥á½Èó®²cȦsÊ–/H·ÝŒ«)cÕ@¾¥uþÈFDgÍ@¯ |Él‰˜½¦Tú¶•hºU‚Ù—ÛYäWGuLÄò­jX6¡ÚÁÝ"Ð=ºdį©Ë%¤µ«„z÷]ÿr‰X}Ø7~`{e[ŽL9ÎÊgÿ}÷uz©í;׿AÞ½KÎu–øm¸d=ð‹ª_Ö™R|>¬š4Þ(1-ç‰ç¡ªòVfp¬:m}? ”ßSÞõ?”ÏÓ¦ž‰^?2‚}ȻʔœŸ{|ÙQòð^uò•å)¯Íbi •³ ÜJ<бÛÅ\vܾE^ïªá}ù¨ÄtÌOB!„B! ¡5ׄB!„B0!„B!„BL!„B!„ü¡ø5Á~]o¦ „B!„B!„B!„B!„B!„B!„±ãÏ õgúó0ýYŽ•1øéÏmôçdú3'ðÿÉ€;¿~Ìo¢ò7œ…èã97ä³u<_eqË?TŸ<÷•Bb”Pާi B!„ŸÇ‹Š'÷kÏ7üÛ3ÂcPöàOè:4nÛ¸_û låãy<‚xæN©ƒÑù¼ºêïã?¨¬¬^ûÌ"25”ã6MA!„ò³øÑÈ×ÏëÁ%£Ó=7Ühåw—Ÿ×î>¯™Ïë¿mR“¿\R00!„BÈo` 1;o÷ׇ-~$94MÕß{1¢†˜P `B!„òíxqq=f?oS°ÁvŠžƒ°°ë…+¸¿fÑ„ºÅ>‡?-\~ÝíÉçõˆt®â¹¸íBdÍ›°üˆõ~{„µDw{ôyÝÃ.×د½ö£á—ˆ‹OÃYD$û´ÂOïîôóš5n|~úyÞílìÓ4ø?àþF œYe³¸ŸŠ„ãóäáÜãÿyׯ"ö ”Ap6ì¨ò¼)ÓðãN¥ÍŠé)ØùþùwUº&U<euyó¨lbÃ|¿1q.gØLžAùz@\ *}'¸©Gäßu$}¶®^)w¡8Ú:)´L]‘23‰°½+*N«¨*¬b ÿÆ™>x¶‰²ø¨ÊåJ múý"õ)TîJ¨7p·täÀ%„s«ÞU-ÆìPAYx@Xí@\ÄÎ6}«ÊÏ£ó\aØøÊûd^½·«x¯ˆýÏÜ×}*ðën®P ü$B!ä;)£¶‹†ÒP»n´ÍYDÐúFØb s_SîÐHiH€J8hH½!]"\{ø¿æîvàîBÅ»y7 éS¸½†{ÆsN<·=—löŠøétѰ}‡ÜA¸o¸×0¢´Gp·dÄȳ¤"v?ðÜ3Òr¬Ò³jÏ;~ÛÇ3/ˆÓ¢ ç~‹”éí÷9²Çʾ{°“Ägk\@ãYçÕ%þ¾3`Y¥MÂìáªÃͼrsw:]Yx]ÝßUyÿbêÔ…Ê÷6þ}GœÓl×Pi{C<¯•ÒéÛSåP —,QhC ¼#/‹Ê®gª~íwUSCu¢ƒßlÙ쯪F×·¶ÊÃ+#ôbéÓA‡9ÒãL=»‹8¿âÞšIÛ#~»U*ðCwt\«ûRoŸr `™Msbìrx> .mÄçaﵫ@úÖMÓ+.Ù#Bû·á’DM·W¤÷L½Ï¦UÙºÇýc”­kÇ„Bù&•0zDƒDDÚ» æ¡€ý‡j4ùFQ+"¬GÀJœ•Mã[70g”û…@ã®…¿ð÷QD´e5Ò.‘æ)cëW“.¶vžwý›…?^4L(w%4x_UºU#´ Üiñ/LàÞþ®"Þ¦ñ[E¹…sl›ˆÙûÔBÁS˜¹@oâïmãתÉÃ’KÖº—eâßÀ]û.Âa*EøM Þܘ0dýúûÃ}Ý@K6Ž›É!€ŸUY(ãzMÉ»GäSq<5þn˜zÔtá ë–y7ˆ–òV€**?#öXCú6MúÒl{yï\Ò¶mÞ{ÒW1á®êm–ž‰”íC¤±fÞŸS¥3fSu¢…ìlÓ·„¿õ¨÷‘K6HÔïå+Ø^—™®yO-»6\xyt•!„BÈ7ÑPb÷L5<êhh¾»ÑF‚h8u]ÿ.ÐW¦4ª~Hi|Û)€oFPiTcï# ‚&ràr¤®ô îR ŽEN# ^­xo‘1±‡M“L«Ô"h%Îz$;5º™â‡¶Ñ‚ ¯ã½5ù“%€ï ŒB£¦wÔÕMÕmª‘Yž~¾(“¶,´RD–ŒºN*|ãúg]öÈy#"ž›)ék©¸PMÝ.˜°;°]hùÊxiH<è\ ™J[Cúòض‚¼ mü÷¤ê‰¤íÝ}QÞQù,*Ïÿæsà)%LmÇW¨q.Ðù¢:^$}°ºÊ] 6<2¿ Ímãnß”Áv º“iŸg¤‹B!äÛðK !khË$³7J´Ç$€Ï#ïn¤¡×Éð÷:Òh•†pš–ÆÝvà·åHºdú È.)>6âë÷ôuaÄql“(+FBöá_OiŒÛp ‘†}3G™¨C(ËôZé(DòS8Tn¥ŒÍäˆW BAΰ–iêYXâvÈ')÷ËÆ­Ô…]—ï|i©—ë‘ΕË@ØóÌ® »‹:>oòR 'y³C `+Àî#uuÐô­ ¾<år×”ËNŽ÷KÛ”“^¤|–\¾)Ð*-w°ýL$Ìb$Þr¦¯kÂíªw·Ìš¹UéY2»™R÷µý .™òüá’õÞ<™B!ߎ¿«Ào÷uÚ_Êhü¥Ÿ$ á•1 àã1 à´y7C‹@ÙHùMÒUQÂHÖ˜ž¹d´õØØçq]­1à´–ÅF{Æm,i¸ Äö:.оBŸEÂÙ àzFù]V=äÏKFpÓð…jèÇ.=õ~vx1"§š£|5#uê&%ì¦ñçÐ%kQeÝòdŽŽ;â8¨•ÁÇŒ|&}G)é QtÉ~„çèyR§½CóàÊä‰*—b‡² ÓeäAþèz§Ó§Ó#Ë3¤ãR65ÜuÉ返݀XÒµ {÷Tœ.G‚ !„òͼ¹ðHLÃ=Ð?ÜIq##›xÁ<7ùCø²/xÊEöÒ¨o¹þ韲9Ù©yn%‡ýGÀ±#±t¾nA¯){ÛÑÀǰϧÛH8"f*hä‡Ê”ÄyÞ%k}x³®Äp;‡>Ì)²C"g^Åw,ñ›â0§â~¦ò!&Jw×9ðêUˆÔûö˜ÓBlxè„ðñaü)Ÿ7ø1HRN.Í;¶íú×[ÛJ<[)é{2é™PïèsõŽ˜WõèÙõO“DÛoÿ&\¥tB!„Œ Ùx¤©ƒ6Fd³¡—! èù l§y®ÿŽ­åœuù6ÁòÉÐNȧ¦q,KYMƒ±ž"26áÏâ°lþµpwhòl,ÏÚÑ8ÙDª7€–Ý”mY“M“MÞíD…ˆîFJú/e–Ùxk+ð¼YT‡Ÿ\ÿîÛRwbùœe_&göÆØ¡‰cOu†ÉHáL@¬<ÁêD+¹dd/KÇ6ÿj(¡7®ô¥ù&¬éÔê!€O"ås-‡^†Èœ¼¯ŽL˜v}tݸ“2<‘#}y*;:·Uþ¿©÷ÉÒxåÇæ÷ŒËî<%„B™4Ðn• ™EÃëÉõLžºx/~H¨JÃiá,¹dwèN Ñ(¢FFzð\ A9Žç»pé÷לj$>äÀªáYA£QDµn_‘2²bmt¢\I5{p_ƒ.¸d½ëºKvéÝÀ½«b&ÞQi)(ûÞ*åÀ³.9âfZå§Œ>êQók¸]C¸%%ì7”`ÐÇü”]ÿšÒ¦~(ßUØê÷µýZ&?«.ižQÂB„àæX§o i+ ïªC¦ˆòò¢„•ŽãŽÊI߬ê 8tŒ]««òár\‡Û—lª6é’£rjôGLŸKéäÙ2^#à)¿IUÇ_ràºzvJ•Ç#^B¢Ó<©Êâ¤éhØ2ïÿ‡ˆÞVå~6ÐÔsýëŽó `9Yoçß“g.¼!„BÈØYrýëËd}ØL@,}äôsU 9{»þu^í€hÛ1ψpéþ€–FÚ“‰Ã©Ë^,ÈZ¹ÕX´ãiÕ~qÉ9¿›h>¹þ£ŒN¶ìš|E‹8ë¹pýS,GÀ¾§ìò[ºþ«òàXùí¹¯3biÛ ”ÅUÞo]2º»m:„>Œh­!¯×lê‘Åå@œ¥Ó$Ï9À!ûV•8Ñ×ëmŸsýëŽå:7õr!P‡ß\²ÞÜ™3íîR ®¬2 ËÛgѤï*’¾zÎô¥\UbðUu¸íºd$·< Žåõ¶Ë7zÍ%Çéwa¨Ìžw/®ÊbZ§ïùdÓ'â]ê’.“-Þ|p)Ðæý(éÚæç˜B!?…Œ²6Ñè 5ÂcGÄÄ(à™&r+.¼ÁO þÚÆ©âÅÇ„ŠÃ¤¡m¦]x½à¬ûºÆµñ§€dÓ%#Á³.}#›®U\—lV6v_BúH¤:Ü–6Y…ûÐζ“[NGò.dQ-¶¥w2â_žMÐĶócEåoÕý¼®¸>ä 3T®}6¿ÙF,›„B!ä?GÓýÚe´Áxı˷;ëÜ’Ÿcy£é@Tþd¹Ê¦¥8´¿ÙN,›„B!„ø/¡ý—àŠŒß–7㣿ƒŸÀ,›„B!䟣è~MõBwåóªfà2þ_4̧Õß2Ù?³úy-~^Ü“)¤uvY=;ƒûˈ£¥?›W»™V"gÓ}®Z‚¿MÄÉú/iôÿV·¦KŸN-ñ]‚Y¸¬„ÌeĦ³ð³ ;塦òjÏ®¿'#6 &ì%ØÌ?fU˜YñôÏ/(w „bZå} qoò©„üÓn³˜…½?LyÕx2b7§âRØCÒ6›’6›ÎÐTêJFùÔ¸¤Êçô€õ~A•ƒ‰1—ÍiŸ¹”´B!„òcø†í3ºr½»_SDcXÆÍ€‚~ã½òâ°ë’©¨r½ñ*W¢@8D<­›I%fìo:=¯æ÷g×?R,iÜFœz¸dD¬`DØe ¼ë Ü0Ïh›úgn¿çy2ò½alÔƒÙ ¤½n„Üc ìWø²pHÛ]¤“HuöùöÈ£…@Ù¹ Øà8‡øžÔûÝe³ªÊ¶¾ŽL¸¸;Uiüœã«—B!„üž!Bêªq+âqjLø bn ÂHFGßÑž‡¸]S"øB¸¢ÛŽ>¸/£I x7*ûp§G·æqïZ‰eÿ›4¾«8”¸Ü1BÐßkÁ]E5úÓp¿y7gø ÷%>Mü]R'9ð Ä`EÙì~Ïáþ–ëŸæZ€ø}qÉæG%äÍ;òQ§ûeh þÍ*ñ,¶¬Ãݲ¹ÏŸ¸ÛS~ž*ñ.¶< Ør~Þ©rZC¾¾»ô ª&`oñ¯j:MöÊÁ Êp1R6Uœ ÊÍ;Ò3ˆ^ ”ÏÄéÍ%#ªZ  ®%eÓÝŒpL‡‘ñ½À³s)e³€2à㲊¿KªÌí›´‰=uZžaÓ2_¿„B!ä'©¸ð¿Iˆ¹ú˜ð‡ûº²ˆF;Z÷p_Ľsü½­êΈ‡€l¨{×–¡é«"&tC;ôÞÀ"Ä“ˆMA¥½–‘6ÄÞ[·"Ü&sà@¼?âðE¥ÓÇõ2ð¬<ÿ’#7TǃtN\Â-ÛÕ]2’hÝÝ[žFl[…8Ëž±5À!ûìšû¶>EÊø:Dâ ø6.EÊçiŽòy«ÊgZ™;t ´T‡B¨l.ºdf„å¶/gØS:c6ù &„B!?Í£Wh°‡ŽìU?¥‰€ xÍðwÎ%£™‡XÅ!(ñö¢ÂÊÝãž½^ñ›NcH¶TÃ^FìBBgHTb3/›n»TD£W]ßüÉ»AÙx2¢1–‡ó)åC:^æ”;¦œ-¦¤IlùŠø„òñ1R†òà÷€Û5SŽl}XuÉß=—¾¶9MKgJl„ÿN¥«‘""·#ÂÓ™Ž ±ýFJµeSÊôzÀî2u|I¥-T÷¥C낯_B!„òÓøQ·K׿†óÖ¬QðMNbAš¿k®ªñ:3¢Ï àšûºnÑ^]“Æ¥”e—¾CöÖø*b¯v\Ëis+€ëaz­ì«KÖðfù*óîëzÕ®É×´]»›&M9®ap7GP(Ï·UL??É‘÷:Ì錼í¨8§ÕÁ´Ž§Ä¶ z­ñÊl!¥lç°{SÅ· ÿ9å7B!„B¾Ù¥ù\5Š·2ðZNÜù,LA|Ü)!\ÍÀ²¦1tM˜4†Fv7”¿ibc{H,ÓœC£Ú2ºšgx\sɆ_‡HÿDQgH¼¬ï.:j|•á… 2ý·–rý¤ü¨ëŽêœyréS‘;ÆövM´F¦ïg à —ÿø¯òøÄ%›¼íåÀ3)v/©´Ý¤”ù+¾v !„BÈO2Æò”¹ïä»û:5Õ àv๟Àó.¼>¶eDAhDQ6²àç¢Ich3¡ا!`7ÅÒîò à“€€m¤ˆê¥oÀ­áÿ0¤–]'2Ê‹<[_ªÓ$ke ˜µô8°Ï‹õÀs2%x.§. ó)$‹.G~ME„h=§ÖñZ‰t|´r–ÏËŒŽ/ß+Ó ˆ]™z§ÿ–½ïe³ Á[1ù¾m:š.àÇ4_Á„B!ä§‘·_÷ë§>@`ù†ìL¤Áï\²NõBæ àûÀˆãDF[‰Ö¢ r¿ä’3‰/ð¬ŒPz![6£‡çÅ6þï'#.gpÿZ»Ë#€oU¬ñî§ÒîÂÏWø;Ÿáß(x v|A¸-ˆÉžŠgm@¼î’3·qݪp»Fü?«€[—¿¤Ã.¸d#§k¤ùÌ%Ç2MdØHF2Ÿ\2ú>¬žVù„ŽÇñ°aVP奶òëR V±q7P>Ÿs”9ÙÙúÎÔ{îœéܱeS¦X˦_û.9ãwͤM¦ÓK]»sñQ~B!„B¾ÊÓwhÄëcvæÐ×÷JhüÞAØøÑß*„EK¹Û3 kqÐrá5ÇÆŸ¼S"Ûâþu Š*îÛN]4îÛ®ÿh$;ðã×¾ O-Dï!ܼM—p¯’‘Óo׿¦³ûˆ£)õy 7fó=có9t(H‡†„+å`6Ã?±Åœ‘bïØ¿¬ü(¸ûûåÇQ_@G.»{9ì-e`6?Ê({¶ü‡êÄô=âr‰´eíÝeÓIòKlÜPåóub"gÝ_S¶»‡v{eÁÇsÙØäa>¢œÎEÒ6ÜÅ¿‹|íB!„òg!¸MSü^øm¸ðÇ2Â_øÇÒufÚ!„B!Àÿ¸ö"×M^øûÿÚ¹±^ÌûÑÓ `B!„BðY¿ü %kPý݉(²æ6íØ# `B!„BÈPƒkÐ?Ž_3ê7i:†Pô›/ÿ±4nºd]{áÍÇ&ÒI!„B!„B!„B!„B!„B!„B!„Áid\Ó#øíÏõüø3BOñÿ¹Hì9¼ ¿sýfÓq“®¿®%„B!ä7ñ‘qu†…§Ê¿Ûí‹úûÌGÙù·ö—Ù΋ùßy„Mv#Ü™B!„ßD#r]A\-áç&žõ"¸¢îW?¯s÷õx¡¿UÿfJLL!„B‘e«Ý!Ÿ¿þ¼Þ\øèÏ?QSSB!„B~'~®Ÿ®üè†?{õæózwý£¿V`7SðD‚]\Åý–Mˆõ„íýÙÇ57¯î×tå– Ã»í}^÷î×Y³šÆçu‰ç^ êuœO!äešø¾ú͇zÿo?¯ 㿤qnŸqùéáõ€ÍVàÏâ›W¯ þ=„áÓ5°ëìó€p®;añì"Ÿ}:OT¼—á߬ynG¥Ys€çÅ®-Øÿñè¾%óÜlò†•s^c M<0na'M ñ©!½/ǯe/ |Jy4åRØ@~I 9pî|Ø*ìCä—Í»EtÈxwW.YO?§žQnCõ~y/u¢í¾®qo¢Þ¼">§òZA~="oð·}¬™„B!„ŒCˆªùü)ÐÕ ÷V7ñwø«áþ±º÷ö;ÓÏJ4ª{h¤ï">Hã„§çw%¸çð÷=DÍḊ²{Ê¿c%~êˆCþ —Lû>2BBâ~1ÐB\ž]ÿhx noñÿÄ¿—C¯ÃÍ%ÒÑVÂuÎØõá·ðÜÜ-›Î ±Íü”ôu!˜ê.<ƒ@Ök¡XBZñwñxƒ¿m.Y;nmrò¶»½»ìÛ>”Ðk£Œ^ãþºrw¬òã noáîÏŸ!ì.î뎔]ÕAÒ‚oð³›³N<âù5„#‚²È»7Äï^u|¼#,ÿì6~û@¾é<:t{ž©tÚô\›÷ŒÍïTùßDÞJý,˜ü;W~I=œâk˜B!„ü54@;#úS€HÓ›iÝ£A<ホ**€µ[ñ»4uå^4-a&e#ºh°kdè%„ˆmÄï™xj¬G6§‘§ø»ÿ®ÝTZÒŽkÇD‡¶«·¤ùY…}¡bGcÅòü#0ƒß{°‘°d:\DH.›ò$b\f%HÇ3¶ë¹ðH¬ ”™y†Ì¨˜4*w>üWÜ_S÷'” óL"¾g&ì5ÕYG_™|{mònR¥¥ì’‘é²Igq“‘Û^ï/ÙMªü³é©"œ•V`KùVq´åÃ3 ûs‡lB!„ò#ìG„ç°L¢q}ÓcÀwá÷á¾Nãî¡ñò÷ЈÕ›V—rthÒ¸p{å’5ÔMߌì>‡¾€ØYˆV›þÓÀo[F,Ö]x„®eòLlXQ¿÷Ð1ÒS¢îÈüÝ…À¶˜2"SgWSÒ•&€¯÷Wñ[Óä¯Q¾N)[c·P]z@‡¦Ë(¹Î;[æV\ÿŒͼë߈î!P'ÄïE”ky7ÌÜá· Ÿ[—>YF‰W†È?B!„BF¦‡ã¢ŒÆ®L—}RbT|À݈xèdø[Cü>Tc~; ü¬n¨´u—>Vª™"(ö”=Ä6õ<„Œª}@{q½i„½¤;E,ÙÑÎ&âyá’Q[gsø{Eåǹf³J ž˜ü¹M„RF!€eôó qœÈ)€÷§Œ0Gœ¬ØÞPk‘øˆ=^!˜›ðk)n‰·äßi¤õø:&„B!ßMžÝŸO]¾¢—]2Ñ7xW!6\2•ò4"n¤Qÿî’ÑÃ:ž}Eãø»°Œºž@HT½vYo–%#¹"n ”«r\LÝ`ŸN¿öÖ€Í(!9è0hÃÝ´K6bÊ>VB¬fDJǤ_S‚åЈ+-Þd4·;ÉV}V²L}¶y4¯Â[B;—LÞB¼üµîÂ;/‡°ì°< ›ì:FÀâî7U”‡›p6­¢BŽoªe`‡|‘QWÉÓÂ×»ŠÏºä˜")³Ë.9;»ˆëî¶à¦®ÊˆL¡®"~]äseåÜt\òoþŸðuL!„B¾“ZŠ´ üœ~.¢ñüa®ÄX1EÜ84†ßÔs¯’ÝÀ¡wwŸ=ª-ÇîØcmD¬ëg»®zpS‰íöÙ}Ýñ¹¤ÄŒ\—o tI‰ }]»d=fMÝÓyöaX0i³v¹rÉ4g;âyÆE•·C àªéëÒeï*,îôîärnaŒ8dûKäe^¼gìýh:GÒpÑ%gðêtú•²q+4:®·®]oUu`éëØØ<ä×›ëßd­ê¾î/³¸+4!„BùV .™Z𯄠oÆ”FÂo ÷Ю¶eøk§ßV ¬æU£xÂõ¯C¬¹ðºÄª ¯Ÿœp_wš-Dü‘Q·%ÞLHDΜûº™U÷}GÀL mz£¯Ò³¶å‚KvŽ® 5Øq!WÝàã9 w±õžåWÍøSäm1yó'­ŒL" ØBwvÌàÙ‰H:k#–-oSÊ߬ݪµà¯âùÙ@úóÔ]_ïY”ÙéåpÞÅwm¿–T1LþB!„Bþ2b;]ÿj.ß €…¿!­¡Y„B!„BLLL!„B!*~¯_:ûÄeqÙûØþoHë&â9ÁªB!„B!„B!„B!„B!„B!„B!„üçñG—ThB‚ȱXSîëqD?…?žh2òÛâ×p\;L!„BHj£úÊýÚuÖ_/Ÿ×öüŽòK_ïŸ×ÃçµÿCB[âAúñ¶_£þ,ÝÙÜf›(¿R–ËßÖÊnˆgÄEãÏÚ½Ô·[÷ë|]B!„Bð#E¯¸¶Ü¯Ý‰ÏЀ>Qx®;üvï¾8ÌkŠÀFüzaØü‡íUDý®Ì+œßILOã7=¼‹{^ï n¾ï!Ÿýo-yB!„B~±ƒFò²¹ƒFÿ0#]iÂÓ‹^m^¥þ-|ŒQ7àß¿,€kn´¡qåO "\X…ÛkžQáãý7K,ö„B!„ü•ý@cY³‡ûSß < ¨AHyü(×.öœû5-Û߯ü,BÄ·!ÆŠ à2…~3`ï‹pÓRqÖLãq¸ ·Ö޲žÔÇsa¶!T )b³w )î¼ëp·¦ÄQY Ö;ü¿ªž›Qþ¯äèü¨!ÞÞ¿]•Æf†MC̆EÄCò4ŸªJïFJ8Øm×|ޏL"2£¡aü/›4NFò­†kå´0„ö÷UZ?¯7—¾ÞWFèïùª#„B!ä—pøpýkB h0û)”¥Àmü-ÿê5ÃÞ푹ßCÃ^‹”'üöQðà’u‘Y¬áï¶‹pßM&ñ›L7•é¥WF˜ù´û¹S÷uMf[¹kâÞÒ£ÝÝ»—]2jþŠðEÄVMZv÷7e“Wt 4q’‘ÛSåÖ>£ð¯¦Ò×S6}C¼vsä‡w‹«‡¼|Äg=’wÛ‘,Óï_pIþ•rt…òqI•ƒ®ŠÇ~@Ъ|û0å7.!]˪“À»; >NñuG!„BþëøQ¶s4®! î!<–‡ô3M•˜[6BêÙ%›)ÍBP¼AÉÈšŒÆ*±~‡ø.(Áx¦ÄFSH»Ÿò=aÄÒ;]¢P‡áÃÝ€ÿ—&íïˆó´Ïþ~Å`ïç*Â()±¯7:ºp_×Ù.àÙuoÏž)Q>»>»dtÖ ¬Å€@Ÿ†H|Ȱ_Ã}=§lZäIÖ\ÒÑp­Ò!ÏêÞ¢rWUywŽû+ÊO)#‹¦â]•¥µˆ}dS7ÆC÷uÝ­tæœÃ^YÓÅCx~”LÇÕfŽú(ËVùº#„B!ÿuDȽ ý¢àõ°ÝëÌ%£‹—L¼aü¹Æ}»Ãð3`m㦤Ғ†–É€°óáûi²k‘ø9—ŒΘ´Û¾î7Œ¶ëJ«Êv"üd1&l攽B£öëèt˜Œ¬-Ü[4Ï-äè à3”¥z óã W––ÎøkÊÖoîë(¸äý½J‡n;–t8ÔÀ'.<ªZ€(~Uå[::Š9ëOHš{m—íõz¤ŽB!„òŸCÖúî«ú ñÏ.ÿºÍ]÷hˆ—ùÙˆ¸,’l´íâSJÏràû‚LDR5ðے뉋~7#¸@"€eíŽKÎx•K„«Œ6Ê(ã KF3ßðüZ$­yð‹ê °ÀýD†¾ Ü/Û¼»øf^’÷ÕQ°°¡ì¢¼2 ~Ä•V§f”½¯¨?!Ü5¾5€ÞtùG‹ !„Bùg)Aô„ç3.¼žqœÀµˆv)x/òlÚóÖ¯¬‘¯Rüiq4nÜNéLÐkRíÈñ kå@Ÿu{í²Ï‘ à´]¦%=syr•÷«€Žå}Í…×ñÚkk@ÜË‘ÆF{äÉŸz “gÅåÕ•NîM!„BþÓHÃz'òû»ŸÀòìÔ8k«Lw m–$Ók7¾IË÷ªKv¶—ƒ׿6zP,øÓ5ˆLÙPª> ö*7÷û)Y%cÿÿóŒ<«(ØÈ°á ØÇ16Ê-#ÎÓcÀ¾l=òé-%BÁ%t•øÊ#„B!ÿe*)"¢’!0þ,SC+åÙZ6+:d7a™nº÷…oÀ )³¸?¥ìš–ëmäG,W"k ÂÔͳ沧نð  ®;ˆ±b†~ ÄgÞõOåõ/.|¤Ð#üÐé•9Öª6 ¾tý›šÙò¯ÏÐU_ºðnÏ"ò×Rü’²{Ä×!„B!Ic½aîËæPz¤e—oÍáO `½±’^·ºêòí-+FÂöSu'\2Ú¦ÏDVW ºq `Áë¹þQn/.o‘w“ÆŽZè!HõfQO®m;"¤vS„¿À;´qº–SŒÉ.ÐÛôöT:dmëADôíáï²KŽwÒe¬ê’ÑÑê€X:^NMí.å£ à¢Kv ·ø8?£ ´L§BIåßSD¨B!„òŸ£Ž²oD_@xÝGDa7§°ýIì R{9§.96è!g<$œ;“þ=#ld—lÆ„“ÿ{&GÚ‡ÀžY¤M6¹:qÉ™²›FìÊÎÙWp× ˆbqóŒûee«¾qÉ‘JiT\²n¸ë’éÒbÓ{ü_ìrë²§âŠà—cžŽ•ÐÓ2—lvuoâ}eá¢òó yøð3¯v.™ZÝEØWªUÆ$€eÔ;&`']r¾±ØëÖ%g߸á6²#„B!äŸÅ ?‚t‰†·¡ sö\¾M–Z9Ý KpoùköŒ8!¿øŸAh® %<×È ¥Ú%ÇÑ\ºdó©¬?¯µ8‚_r®¾¼¿þÜÜM÷ëÚŸ`ÐóˆIB9`Ë=š¥Ê7ú;›B!„2¥Ï«óy}|^OŸ×õçõæ~íÂ;9¤Ÿâ_ìz‡þn$dpñõ°%wfþ…ï:qßÛ¹ÒFÙ­ÑÜ„B!„Œ=4´÷?¯îM@ìÜ«{ãžÞß…Ïë"xšøä8`7 à„ìCL!„BÈ_„ÉêE„î àKß <7ðû0000!„B!?Ù?ð·Q…gÈMˆ«úçué’©ÒŸWõóšù¼nqÏOÏ>r_×(o¹_S¸½›üWo | ÷‚Œˆû{ûˆÃ:Vþyw7î×(·ÄÙ§KF¼Wáß¼yî÷gÌý3¤Å㧨ûQ{Nî£òÿ¶ QO*]>N‹¶¸F§Èâ²g°Á¿sÉTösØGS‚^TüÎrйk¤Å²‡ð'RÒwëÂço([} Œ†qsŠkñ}uáΟefqšÅoUäá³ ë ñ,˜òt¢ì܃}êx鸄ÊÐ ¯B!„¢Dîaà·Iüvö ¸…ß[¦±ÿÑ»pý½+ˆ‘#Ü¿Âýí€Xð ‰ß^•McnNñìšx‹ÆNÏ«øMÒÙTþ­*‘µ†ß—gwñoÏÖ×@ÚJxvw!‚ÞÐ9±*évTÞú8¬ã¹÷€ø³öô·•ì Ì7ø¹›‰ðŠøûÝ%ªµ †ŸHÑUb_sla,}&}{ª3e îî¿SfŸ‘>_Æ>¯©@<¦‘ð§8Ñ!ÒCܚț{¸ÝRùü€°Zp·ƒçUÇŽÀspó l8ƒtܪ²v([„B!„%ºº.<¢ú#ypÍ\shô¿¡1_5ý#ãÏîoÕƒÀôL@\šgç\2*–×'s¯1Ò2øÍõÈ p^•ý៵çüÑÝ;<+̺dôZÛ|ň:©^0þ_ã~IÅã6ÐáñhìéRÄf(O툷ˆïª)7ëÆˆµ£1 à<é›VÎt*HG‚MßúGÇŽ­@YÒÓ¦óÇvÝÏxì1t ÁÙ Ä'‹˜î¹¯Sk%ïf•Íß\x î-Ò8œ'}bã¹Ào»ømZ¥ïÝå;þ+V&T„P5U<ë;w–î­]W•ø-D³üY¾Ê!„BÉÆ •##Peýã“m tÛ\ªÅHc¿žCˆY¼y6íyÍ”ë_Gú?§‚§x~Þ}9œ‚ÛS—žò_ðŒëŸ>} [/w/FhuÝבOmCˆ³.Yƒ«§ëN €»)áêø¾«<Ò—Ø¡<œ'}'.™Zoã"Ï®d¤o\„`ÝG‡’^WÞ ØL¯_3v7ïªÓÈž \rÉÈ¿LÑ? t$B!„B uˆ±e4¬Kîû6ÁÊoƒà]ß-÷8gĽµ€{;\1yZuý›zi»ÖMúí.×vú÷´K¦þÏñõF!„BH?7,vÍæ5ÄRùÀuÞèÈ‹Œ^F< .©µ\àY½k³Ý,Ì?/Sœ‹. Þ „#Ç8éÑÜ%ŽºÆ^H?BÄ»pÏ_Dò»÷x/"ÔÊ(OOa?À.%—ŒÌ×\2J~Ißþ¿è⻜wŒÀD—Xü+E:’díµHÇ’”±£H¨¨Î é°¹BZmÝJé"„B!ä?MÓ%Ó+ýè‘_›*k'7¢8HøIì9P‚ÄöÍ»ä(ž¬xì+á1 láÙ3#Nd³°9ØIDò–)oèP˜Çs³xæ- |ŠJ¤k1¥w°n!€KŽ(ÚE\§]2]—#?.q^2}¡ü•3” #à]åß¹4i~Dyðe ¸/ û4sÔ ôÒ1Ñ2åíet’¯5B!„BÒ…‡Œlþ­#GeÄbÈôÏây;¥T°Œʺ阊ðg&‡Øü ›Ì ™ú=Jü+{Ú…EÊól%Gúfs¤¯7³cÌ“J@ N 3 –ãùÜŽ*V °ñœË·ÎšB!„BR…Jì`B!„B!„˜B!„Bù›ðÓJýÑMA!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!£ñ?wS+šZ':òIEND®B`‚slurm-slurm-21-08-5-1/doc/html/intel_knl.shtml000066400000000000000000000373621416043614100211010ustar00rootroot00000000000000

Intel Knights Landing (KNL) User and Administrator Guide

Overview

This document describes the unique features of Slurm on the computers with the Intel Knights Landing processor. You should be familiar with the Slurm's mode of operation on Linux clusters before studying the relatively few differences in Intel KNL system operation described in this document.

User Tools

The desired NUMA and MCDRAM modes for a KNL processor should be specified using the -C or --constraints option of Slurm's job submission commands: salloc, sbatch, and srun. Currently available NUMA and MCDRAM modes are shown in the table below. Each node's available and current NUMA and MCDRAM modes are visible in the "available features" and "active features" fields respectively, which may be seen using the scontrol, sinfo, or sview commands. Note that a node may need to be rebooted to get the desired NUMA and MCDRAM modes and nodes may only be rebooted when they contain no running jobs (i.e. sufficient resources may be available to run a pending job, but until the node is idle and can be rebooted, the pending job may not be allocated resources). Also note that the job will be charged for resources from the time of resource allocation, which may include time to reboot a node into the desired NUMA and MCDRAM configuration.

Slurm supports a very rich set of options for the node constraint options (exclusive OR, node counts for each constraint, etc.). See the man pages for the salloc, sbatch and srun commands for more information about the constraint syntax. Jobs may specify their desired NUMA and/or MCDRAM configuration. If no NUMA and/or MCDRAM configuration is specified, then a node with any possible value for that configuration will be used.

Type Name Description
MCDRAMcacheAll of MCDRAM to be used as cache
MCDRAMequalMCDRAM to be used partly as cache and partly combined with primary memory
MCDRAMflatMCDRAM to be combined with primary memory into a "flat" memory space
NUMAa2aAll to all
NUMAhemiHemisphere
NUMAsnc2Sub-NUMA cluster 2
NUMAsnc4Sub-NUMA cluster 4 (NOTE)
NUMAquadQuadrant (NOTE)

Jobs requiring some or all of the KNL high bandwidth memory (HBM) should explicitly request that memory using Slurm's Generic RESource (GRES) options. The HBM will always be known by Slurm GRES name of "hbm". Examples below demonstrate use of HBM.

Sorting of the free cache pages at step startup using Intel's zonesort module can be configred as the default for all steps using the "LaunchParameters=mem_sort" option in the slurm.conf file. Individual job steps can enable or disable sorting using the "--mem-bind=sort" or "--mem-bind=nosort" command line options for srun. Sorting will be performed only for the NUMA nodes allocated to the job step.

NOTE: Slurm provides limited support for restricting use of HBM. At some point in the future, the amount of HBM requested by the job will be compared with the total amount of HBM and number of memory-containing NUMA nodes available on the KNL processor. The job will then be bound to specific NUMA nodes in order to limit the total amount of HBM available to the job, and thus reserve the remaining HBM for other jobs running on that KNL processor.

NOTE: Slurm can only support homogeneous nodes (e.g. the same number of cores per NUMA node). KNL processors with 68 cores (a subset of KNL models) will not have homogeneous NUMA nodes in snc4 mode, but each NUMA node will have either 16 or 18 cores. This will result in Slurm using the lower core count, finding a total of 256 threads rather than 272 threads and setting the node to a DOWN state.

Accounting

If a node requires rebooting for a job's required configuration, the job will be charged for the resource allocation from the time of allocation through the lifetime of the job, including the time consumed for booting the nodes. The job's time limit will be calculated from the time that all nodes are ready for use. For example, a job with a 10 minute time limit may be allocated resources at 10:00:00. If the nodes require rebooting, they might not be available for use until 10:20:00, 20 minutes after allocation, and the job will begin execution at that time. The job must complete no later than 10:30:00 in order to satisfy its time limit (10 minutes after execution actually begins). However, the job will be charged for 30 minutes of resource use, which includes the boot time.

Sample Use Cases

$ sbatch -C flat,a2a -N2 --gres=hbm:8g --exclusive my.script
$ srun --constraint=hemi,cache -n36 a.out
$ srun --constraint=flat --gres=hbm:2g -n36 a.out

$ sinfo -o "%30N %20b %f"
NODELIST       ACTIVE_FEATURES  AVAIL_FEATURES
nid000[10-11]
nid000[12-35]  flat,a2a         flat,a2a,snc2,hemi
nid000[36-43]  cache,a2a        flat,equal,cache,a2a,hemi

Network Topology

Slurm will optimize performance using those resources available without rebooting. If node rebooting is required, then it will optimize layout with respect to network bandwidth using both nodes currently in the desired configuration and those which can be made available after rebooting. This can result in more nodes being rebooted than strictly needed, but will improve application performance.

Users can specify they want all resources allocated on a specific count of leaf switches (Dragonfly group) using Slurm's --switches option. They can also specify how much additional time they are willing to wait for such a configuration. If the desired configuration can not be made available within the specified time interval, the job will be allocated nodes optimized with respect to network bandwidth to the extent possible. On a Dragonfly network, this means allocating resources over either single group or distributed evenly over as many groups as possible. For example:

srun --switches=1@10:00 N16 a.out

Note that system administrators can disable use of the --switches option or limit the amount of time the job can be deferred using the SchedulerParameters max-switch-wait option.

Booting Problems

If node boots fail, those nodes are drained and the job is requeued so that it can be allocated a different set of nodes. The nodes originally allocated to the job will remain available to the job, so likely a small number of additional nodes will be required.

System Administration

Four important components are required to use Slurm on an Intel KNL system.

  1. Slurm needs a mechanism to determine the node's current topology (e.g. how many NUMA exist and which cores are associated with each NUMA). Slurm relies upon Portable Hardware Locality (HWLOC) for this functionality. Please install HWLOC before building Slurm.
  2. The node features plugin manages the available and active features information available for each KNL node.
  3. A configuration file is used to define various timeouts, default configuration, etc. The configuration file name and contents will depend upon the node features plugins used. See the knl.conf man page for more information.
  4. A mechanism is required to boot nodes in the desired configuration. This mechanism must be integrated with existing Slurm infrastructure for rebooting nodes on user request (--reboot) plus (for Cray systems only) power saving (powering down idle nodes and restarting them on demand).

In addition, there is a DebugFlags option of "NodeFeatures" which will generate detailed information about KNL operations.

The KNL-specific available and active features are configured differently based upon the plugin configured.
For the knl_cray plugin, KNL-specific available and active features are not included in the "slurm.conf" configuration file, but are set and the managed by the NodeFeatures plugin when the slurmctld daemon starts.
For the knl_generic plugin, KNL-specific features should be defined in the "slurm.conf" configuration file. When the slurmd daemon starts on each compute node, it will update the available and active features as needed.
Features which are not KNL-specific (e.g. rack number, "knl", etc.) will be copied from the node's "Features" configuration in "slurm.conf" to both the available and active feature fields and not modified by the NodeFeatures plugin.

NOTE: For Dell KNL systems you must also include the SystemType=Dell option for successful operation and will likely need to increase the SyscfgTimeout to allow enough time for the command to successfully complete. Experience at one site has shown that a 10 second timeout may be necessary, configured as SyscfgTimeout=10000.

Slurm does not support the concept of multiple NUMA nodes within a single socket. If a KNL node is booted with multiple NUMA, then each NUMA node will appear in Slurm as a separate socket. In the slurm.conf configuration file, set node socket and core counts to values which are appropriate for some NUMA mode to be used on the node. When the node boots and the slurmd daemon on the node starts, it will report to the slurmctld daemon the node's actual socket (NUMA) and core counts, which will update Slurm data structures for the node to the values which are currently configured. Note that Slurm currently does not support the concept of differing numbers of cores in each socket (or NUMA node). We are currently working to address these issues.

Mode of Operation

  1. The node's configured "Features" are copied to the available and active feature fields.
  2. The node features plugin determines the node's current MCDRAM and NUMA values as well as those which are available and adds those values to the node's active and available feature fields respectively. Note that these values may not be available until the node has booted and the slurmd daemon on the compute node sends that information to the slurmctld daemon.
  3. Jobs will be allocated nodes already in the requested MCDRAM and NUMA mode if possible. If insufficient resources are available with the requested configuration then other nodes will be selected and booted into the desired configuration once no other jobs are active on the node. Until a node is idle, its configuration can not be changed. Note that node reboot time is roughly on the order of 20 minutes.

Cray Configuration

On Cray systems, NodeFeaturesPlugins should be configured as "knl_cray".

The configuration file will be named "knl_cray.conf". The file will include the path to the capmc program (CapmcPath), which is used to get a node's available MCDRAM and NUMA modes, change the modes, power the node down, reboot it, etc. Note the "CapmcTimeout" parameter is the time required for the capmc program to respond to a request and NOT the time for a boot operation to complete.

Power saving mode is integrated with rebooting nodes in the desired mode. Programs named "capmc_resume" and "capmc_suspend" are provided to boot nodes in the desired mode. The programs are included in the main Slurm RPM and installed in the "sbin" directory and must be installed on the Cray "sdb" node. If powering down of idle nodes is not desired, then configure "ResumeProgram" in "slurm.conf" to the path of the "capmc_resume" file and configure "SuspendTime" to a huge value (e.g. "SuspendTime=30000000" will only power down a node which has been idle for about one year).

Note that getting a compute node's current MCDRAM and NUMA mode, modifying its MCDRAM and NUMA mode, and rebooting it are operations performed by the slurmctld daemon on the head node.

The GresTypes configuration parameter should include "hbm" to identify High Bandwidth Memory (HBM) as being a consumable resources on compute nodes. Additional GresTypes can be specified as needed in a comma separated list. The amount of HBM on each node should not be configured in a Slurm configuration file, but that information will be loaded by the knl_cray plugin using information provided by the capmc program.

Sample knl_cray.conf file

# Sample knl_cray.conf
CapmcPath=/opt/cray/capmc/default/bin/capmc
CapmcTimeout=2000	# msec
DefaultNUMA=a2a         # NUMA=all2all
AllowNUMA=a2a,snc2,hemi
DefaultMCDRAM=cache     # MCDRAM=cache

Sample slurm.conf File

# Sample slurm.conf
NodeFeaturesPlugins=knl_cray
DebugFlags=NodeFeatures
GresTypes=hbm
#
ResumeProgram=/opt/slurm/default/sbin/capmc_resume
SuspendProgram=/opt/slurm/default/sbin/capmc_suspend
SuspendTime=30000000
ResumeTimeout=1800
...
Nodename=default Sockets=1 CoresPerSocket=68 ThreadsPerCore=4 RealMemory=128000 Feature=knl
NodeName=nid[00000-00127] State=UNKNOWN

Generic Cluster Configuration

All other clusters should have NodeFeaturesPlugins configured to "knl_generic". This plugin performs all operations directly on the compute nodes using Intel's syscfg program to get and modify the node's MCDRAM and NUMA mode and uses the Linux reboot program to reboot the compute node in order for modifications in MCDRAM and/or NUMA mode to take effect. Make sure that RebootProgram is defined in the slurm.conf file. This plugin currently does not permit the specification of ResumeProgram, SuspendProgram, SuspendTime, etc. in slurm.conf, however that limitation may be removed in the future (the ResumeProgram currently has no means of changing the node's MCDRAM and/or NUMA mode prior to reboot).

NOTE:The syscfg program reports the MCDRAM and NUMA mode to be used when the node is next booted. If the syscfg program is used to modify the MCDRAM or NUMA mode of a node, but it is not rebooted, then Slurm will be making scheduling decisions based upon incorrect state information. If you want to change node state information outside of Slurm then use the following procedure:

  1. Drain the nodes of interest
  2. Change their MCDRAM and/or NUMA mode
  3. Reboot the nodes, then
  4. Restore them to service in Slurm

Sample knl_generic.conf File

# Sample knl_generic.conf
SyscfgPath=/usr/bin/syscfg
DefaultNUMA=a2a         # NUMA=all2all
AllowNUMA=a2a,snc2,hemi
DefaultMCDRAM=cache     # MCDRAM=cache

Sample slurm.conf File

# Sample slurm.conf
NodeFeaturesPlugins=knl_generic
DebugFlags=NodeFeatures
GresTypes=hbm
RebootProgram=/sbin/reboot
...
Nodename=default Sockets=1 CoresPerSocket=68 ThreadsPerCore=4 RealMemory=128000 Feature=knl
NodeName=nid[00000-00127] State=UNKNOWN

Last modified 9 October 2019

slurm-slurm-21-08-5-1/doc/html/job_array.shtml000066400000000000000000000340601416043614100210620ustar00rootroot00000000000000

Job Array Support

Overview

Job arrays offer a mechanism for submitting and managing collections of similar jobs quickly and easily; job arrays with millions of tasks can be submitted in milliseconds (subject to configured size limits). All jobs must have the same initial options (e.g. size, time limit, etc.), however it is possible to change some of these options after the job has begun execution using the scontrol command specifying the JobID of the array or individual ArrayJobID.

$ scontrol update job=101 ...
$ scontrol update job=101_1 ...

Job arrays are only supported for batch jobs and the array index values are specified using the --array or -a option of the sbatch command. The option argument can be specific array index values, a range of index values, and an optional step size as shown in the examples below. Note that the minimum index value is zero and the maximum value is a Slurm configuration parameter (MaxArraySize minus one). Jobs which are part of a job array will have the environment variable SLURM_ARRAY_TASK_ID set to its array index value.

# Submit a job array with index values between 0 and 31
$ sbatch --array=0-31    -N1 tmp

# Submit a job array with index values of 1, 3, 5 and 7
$ sbatch --array=1,3,5,7 -N1 tmp

# Submit a job array with index values between 1 and 7
# with a step size of 2 (i.e. 1, 3, 5 and 7)
$ sbatch --array=1-7:2   -N1 tmp

A maximum number of simultaneously running tasks from the job array may be specified using a "%" separator. For example "--array=0-15%4" will limit the number of simultaneously running tasks from this job array to 4.

Job ID and Environment Variables

Job arrays will have two additional environment variable set. SLURM_ARRAY_JOB_ID will be set to the first job ID of the array. SLURM_ARRAY_TASK_ID will be set to the job array index value. SLURM_ARRAY_TASK_COUNT will be set to the number of tasks in the job array. SLURM_ARRAY_TASK_MAX will be set to the highest job array index value. SLURM_ARRAY_TASK_MIN will be set to the lowest job array index value. For example a job submission of this sort
sbatch --array=1-3 -N1 tmp
will generate a job array containing three jobs. If the sbatch command responds
Submitted batch job 36
then the environment variables will be set as follows:

SLURM_JOB_ID=36
SLURM_ARRAY_JOB_ID=36
SLURM_ARRAY_TASK_ID=1
SLURM_ARRAY_TASK_COUNT=3
SLURM_ARRAY_TASK_MAX=3
SLURM_ARRAY_TASK_MIN=1

SLURM_JOB_ID=37
SLURM_ARRAY_JOB_ID=36
SLURM_ARRAY_TASK_ID=2
SLURM_ARRAY_TASK_COUNT=3
SLURM_ARRAY_TASK_MAX=3
SLURM_ARRAY_TASK_MIN=1

SLURM_JOB_ID=38
SLURM_ARRAY_JOB_ID=36
SLURM_ARRAY_TASK_ID=3
SLURM_ARRAY_TASK_COUNT=3
SLURM_ARRAY_TASK_MAX=3
SLURM_ARRAY_TASK_MIN=1

All Slurm commands and APIs recognize the SLURM_JOB_ID value. Most commands also recognize the SLURM_ARRAY_JOB_ID plus SLURM_ARRAY_TASK_ID values separated by an underscore as identifying an element of a job array. Using the example above, "37" or "36_2" would be equivalent ways to identify the second array element of job 36. A set of APIs has been developed to operate on an entire job array or select tasks of a job array in a single function call. The function response consists of an array identifying the various error codes for various tasks of a job ID. For example the job_resume2() function might return an array of error codes indicating that tasks 1 and 2 have already completed; tasks 3 through 5 are resumed successfully, and tasks 6 through 99 have not yet started.

File Names

Two additional options are available to specify a job's stdin, stdout, and stderr file names: %A will be replaced by the value of SLURM_ARRAY_JOB_ID (as defined above) and %a will be replaced by the value of SLURM_ARRAY_TASK_ID (as defined above). The default output file format for a job array is "slurm-%A_%a.out". An example of explicit use of the formatting is:
sbatch -o slurm-%A_%a.out --array=1-3 -N1 tmp
which would generate output files names of this sort "slurm-36_1.out", "slurm-36_2.out" and "slurm-36_3.out". If these file name options are used without being part of a job array then "%A" will be replaced by the current job ID and "%a" will be replaced by 4,294,967,294 (equivalent to 0xfffffffe or NO_VAL).

Scancel Command Use

If the job ID of a job array is specified as input to the scancel command then all elements of that job array will be cancelled. Alternately an array ID, optionally using regular expressions, may be specified for job cancellation.

# Cancel array ID 1 to 3 from job array 20
$ scancel 20_[1-3]

# Cancel array ID 4 and 5 from job array 20
$ scancel 20_4 20_5

# Cancel all elements from job array 20
$ scancel 20

# Cancel the current job or job array element (if job array)
if [[-z $SLURM_ARRAY_JOB_ID]]; then
  scancel $SLURM_JOB_ID
else
  scancel ${SLURM_ARRAY_JOB_ID}_${SLURM_ARRAY_TASK_ID}
fi

Squeue Command Use

When a job array is submitted to Slurm, only one job record is created. Additional job records will only be created when the state of a task in the job array changes, typically when a task is allocated resources or its state is modified using the scontrol command. By default, the squeue command will report all of the tasks associated with a single job record on one line and use a regular expression to indicate the "array_task_id" values as shown below.

$ squeue
 JOBID     PARTITION  NAME  USER  ST  TIME  NODES NODELIST(REASON)
1080_[5-1024]  debug   tmp   mac  PD  0:00      1 (Resources)
1080_1         debug   tmp   mac   R  0:17      1 tux0
1080_2         debug   tmp   mac   R  0:16      1 tux1
1080_3         debug   tmp   mac   R  0:03      1 tux2
1080_4         debug   tmp   mac   R  0:03      1 tux3

An option of "--array" or "-r" has also been added to the squeue command to print one job array element per line as shown below. The environment variable "SQUEUE_ARRAY" is equivalent to including the "--array" option on the squeue command line.

$ squeue -r
 JOBID PARTITION  NAME  USER  ST  TIME  NODES NODELIST(REASON)
1082_3     debug   tmp   mac  PD  0:00      1 (Resources)
1082_4     debug   tmp   mac  PD  0:00      1 (Priority)
  1080     debug   tmp   mac   R  0:17      1 tux0
  1081     debug   tmp   mac   R  0:16      1 tux1
1082_1     debug   tmp   mac   R  0:03      1 tux2
1082_2     debug   tmp   mac   R  0:03      1 tux3

The squeue --step/-s and --job/-j options can accept job or step specifications of the same format.

$ squeue -j 1234_2,1234_3
...
$ squeue -s 1234_2.0,1234_3.0
...

Two additional job output format field options have been added to squeue:
%F prints the array_job_id value
%K prints the array_task_id value
(all of the obvious letters to use were already assigned to other job fields).

Scontrol Command Use

Use of the scontrol show job option shows two new fields related to job array support. The JobID is a unique identifier for the job. The ArrayJobID is the JobID of the first element of the job array. The ArrayTaskID is the array index of this particular entry, either a single number of an expression identifying the entries represented by this job record (e.g. "5-1024"). Neither field is displayed if the job is not part of a job array. The optional job ID specified with the scontrol show job or scontrol show step commands can identify job array elements by specifying ArrayJobId and ArrayTaskId with an underscore between them (eg. <ArrayJobID>_<ArrayTaskId>).

The scontrol command will operate on all elements of a job array if the job ID specified is ArrayJobID. Individual job array tasks can be modified using the ArrayJobID_ArrayTaskID as shown below.

$ sbatch --array=1-4 -J array ./sleepme 86400
Submitted batch job 21845

$ squeue
 JOBID   PARTITION     NAME     USER  ST  TIME NODES NODELIST
 21845_1    canopo    array    david  R  0:13  1     dario
 21845_2    canopo    array    david  R  0:13  1     dario
 21845_3    canopo    array    david  R  0:13  1     dario
 21845_4    canopo    array    david  R  0:13  1     dario

$ scontrol update JobID=21845_2 name=arturo
$ squeue
 JOBID   PARTITION     NAME     USER  ST   TIME  NODES NODELIST
 21845_1    canopo    array    david  R   17:03   1    dario
 21845_2    canopo   arturo    david  R   17:03   1    dario
 21845_3    canopo    array    david  R   17:03   1    dario
 21845_4    canopo    array    david  R   17:03   1    dario

The scontrol hold, holdu, release, requeue, requeuehold, suspend and resume commands can also either operate on all elements of a job array or individual elements as shown below.

$ scontrol suspend 21845
$ squeue
 JOBID PARTITION      NAME     USER  ST TIME  NODES NODELIST
21845_1    canopo    array    david  S 25:12  1     dario
21845_2    canopo   arturo    david  S 25:12  1     dario
21845_3    canopo    array    david  S 25:12  1     dario
21845_4    canopo    array    david  S 25:12  1     dario
$ scontrol resume 21845
$ squeue
 JOBID PARTITION      NAME     USER  ST TIME  NODES NODELIST
21845_1    canopo    array    david  R 25:14  1     dario
21845_2    canopo   arturo    david  R 25:14  1     dario
21845_3    canopo    array    david  R 25:14  1     dario
21845_4    canopo    array    david  R 25:14  1     dario

scontrol suspend 21845_3
$ squeue
 JOBID PARTITION      NAME     USER  ST TIME  NODES NODELIST
21845_1    canopo    array    david  R 25:14  1     dario
21845_2    canopo   arturo    david  R 25:14  1     dario
21845_3    canopo    array    david  S 25:14  1     dario
21845_4    canopo    array    david  R 25:14  1     dario
scontrol resume 21845_3
$ squeue
 JOBID PARTITION      NAME     USER  ST TIME  NODES NODELIST
21845_1    canopo    array    david  R 25:14  1     dario
21845_2    canopo   arturo    david  R 25:14  1     dario
21845_3    canopo    array    david  R 25:14  1     dario
21845_4    canopo    array    david  R 25:14  1     dario

Job Dependencies

A job which is to be dependent upon an entire job array should specify itself dependent upon the ArrayJobID. Since each array element can have a different exit code, the interpretation of the afterok and afternotok clauses will be based upon the highest exit code from any task in the job array.

When a job dependency specifies the job ID of a job array:
The after clause is satisfied after all tasks in the job array start.
The afterany clause is satisfied after all tasks in the job array complete.
The aftercorr clause is satisfied after the corresponding task ID in the specified job has completed successfully (ran to completion with an exit code of zero).
The afterok clause is satisfied after all tasks in the job array complete successfully.
The afternotok clause is satisfied after all tasks in the job array complete with at least one tasks not completing successfully.

Examples of use are shown below:

# Wait for specific job array elements
sbatch --depend=after:123_4 my.job
sbatch --depend=afterok:123_4:123_8 my.job2

# Wait for entire job array to complete
sbatch --depend=afterany:123 my.job

# Wait for corresponding job array elements
sbatch --depend=aftercorr:123 my.job

# Wait for entire job array to complete successfully
sbatch --depend=afterok:123 my.job

# Wait for entire job array to complete and at least one task fails
sbatch --depend=afternotok:123 my.job

Other Command Use

The following Slurm commands do not currently recognize job arrays and their use requires the use of Slurm job IDs, which are unique for each array element: sbcast, sprio, sreport, sshare and sstat. The sacct, sattach and strigger commands have been modified to permit specification of either job IDs or job array elements. The sview command has been modified to permit display of a job's ArrayJobId and ArrayTaskId fields. Both fields are displayed with a value of "N/A" if the job is not part of a job array.

System Administration

A new configuration parameter has been added to control the maximum job array size: MaxArraySize. The smallest index that can be specified by a user is zero and the maximum index is MaxArraySize minus one. The default value of MaxArraySize is 1001. The maximum MaxArraySize supported in Slurm is 4000001. Be mindful about the value of MaxArraySize as job arrays offer an easy way for users to submit large numbers of jobs very quickly.

The sched/backfill plugin has been modified to improve performance with job arrays. Once one element of a job array is discovered to not be runnable or impact the scheduling of pending jobs, the remaining elements of that job array will be quickly skipped.

Slurm creates a single job record when a job array is submitted. Additional job records are only created as needed, typically when a task of a job array is started, which provides a very scalable mechanism to manage large job counts. Each task of the job array will share the same ArrayJobId but will have their own unique ArrayTaskId. In addition to the ArrayJobId, each job will have a unique JobId that gets assigned as the tasks are started.

Last modified 3 December 2021

slurm-slurm-21-08-5-1/doc/html/job_exit_code.shtml000066400000000000000000000123361416043614100217110ustar00rootroot00000000000000

Job Exit Codes

A job's exit code (aka exit status, return code and completion code) is captured by Slurm and saved as part of the job record. For sbatch jobs, the exit code that is captured is the output of the batch script. For salloc jobs, the exit code will be the return value of the exit call that terminates the salloc session. For srun, the exit code will be the return value of the command that srun executes.

Any non-zero exit code will be assumed to be a job failure and will result in a Job State of FAILED with a Reason of "NonZeroExitCode".

The exit code is an 8 bit unsigned number ranging between 0 and 255. While it is possible for a job to return a negative exit code, Slurm will display it as an unsigned value in the 0 - 255 range.

Job Step Exit Codes

When a job contains multiple job steps, the exit code of each executable invoked by srun is saved individually to the job step record.

Signaled Jobs

When a job or step is sent a signal that causes its termination, Slurm also captures the signal number and saves it to the job or step record.

Displaying Exit Codes and Signals

Slurm displays a job's exit code in the output of the scontrol show job and the sview utility. Slurm displays job step exit codes in the output of the scontrol show step and the sview utility.

When a signal was responsible for a job or step's termination, the signal number will be displayed after the exit code, delineated by a colon(:).

Database Job/Step Records

The Slurm control daemon sends job and step records to the Slurm database when the Slurm accounting_storage plugin is installed. Job and step records sent to the Slurm db can be viewed using the sacct command. The default sacct output contains an ExitCode field whose format mirrors the output of scontrol and sview described above.

Derived Exit Code and Comment String

After reading the above description of a job's exit code, one can imagine a scenario where a central task of a batch job fails but the script returns an exit code of zero, indicating success. In many cases, a user may not be able to ascertain the success or failure of a job until after they have examined the job's output files.

The job includes a "derived exit code" field. It is initially set to the value of the highest exit code returned by all of the job's steps (srun invocations). The job's derived exit code is determined by the Slurm control daemon and sent to the database when the accounting_storage plugin is enabled.

In addition to the derived exit code, the job record in the Slurm database contains a comment string. This is initialized to the job's comment string (when AccountingStoreFlags parameter in the slurm.conf contains 'job_comment') and can only be changed by the user.

A new option has been added to the sacctmgr command to provide the user the means to modify these two fields of the job record. No other modification to the job record is allowed. For those who prefer a simpler command specifically designed to view and modify the derived exit code and comment string, the sjobexitmod wrapper has been created (see below).

The user now has the means to annotate a job's exit code after it completes and provide a description of what failed. This includes the ability to annotate a successful completion to jobs that appear to have failed but actually succeeded.

The sjobexitmod command

The sjobexitmod command is available to display and update the two derived exit fields of the Slurm db's job record. sjobexitmod can first be used to display the existing exit code / string for a job:

> sjobexitmod -l 123
JobID Account NNodes NodeList     State ExitCode DerivedExitCode Comment
----- ------- ------ -------- --------- -------- --------------- -------
123        lc      1     tux0 COMPLETED      0:0             0:0
If a change is desired, sjobexitmod can modify the derived fields:
> sjobexitmod -e 49 -r "out of memory" 123

 Modification of job 123 was successful.

> sjobexitmod -l 123
JobID Account NNodes NodeList     State ExitCode DerivedExitCode Comment
----- ------- ------ -------- --------- -------- --------------- -------
123        lc      1     tux0 COMPLETED      0:0            49:0 out of memory

The existing sacct command also supports the two new derived exit fields:

> sacct -X -j 123 -o JobID,NNodes,State,ExitCode,DerivedExitcode,Comment
JobID   NNodes      State ExitCode DerivedExitCode        Comment
------ ------- ---------- -------- --------------- --------------
123          1  COMPLETED      0:0            49:0  out of memory

Last modified 15 April 2015

slurm-slurm-21-08-5-1/doc/html/job_launch.shtml000066400000000000000000000176431416043614100212260ustar00rootroot00000000000000

Job Launch Design Guide

Overview

This guide describes at a high level the processes which occur in order to initiate a job including the daemons and plugins involved in the process. It describes the process of job allocation, step allocation, task launch and job termination. The functionality of tens of thousands of lines of code has been distilled here to a couple of pages of text, so much detail is missing.

Job Allocation

The first step of the process is to create a job allocation, which is a claim on compute resources. A job allocation can be created using the salloc, sbatch or srun command. The salloc and sbatch commands create resource allocations while the srun command will create a resource allocation (if not already running within one) plus launch tasks. Each of these commands will fill in a data structure identifying the specifications of the job allocation requirement (e.g. node count, task count, etc.) based upon command line options and environment variables and send the RPC to the slurmctld daemon. The UID and GID of the user launching the job will be included in a credential which will be used later to restrict access to the job, so further steps run in the allocation will need to be launched using the same UID and GID as the one used to create the allocation. If the new job request is the highest priority, the slurmctld daemon will attempt to select resources for it immediately, otherwise it will validate that the job request can be satisfied at some time and queue the request. In either case the request will receive a response almost immediately containing one of the following:

  • A job ID and the resource allocation specification (nodes, cpus, etc.)
  • A job ID and notification of the job being in a queued state OR
  • An error code

The process of selecting resources for a job request involves multiple steps, some of which involve plugins. The process is as follows:

  1. Call job_submit plugins to modify the request as appropriate
  2. Validate that the options are valid for this user (e.g. valid partition name, valid limits, etc.)
  3. Determine if this job is the highest priority runnable job, if so then really try to allocate resources for it now, otherwise only validate that it could run if no other jobs existed
  4. Determine which nodes could be used for the job. If the feature specification uses an exclusive OR option, then multiple iterations of the selection process below will be required with disjoint sets of nodes
  5. Call the select plugin to select the best resources for the request
  6. The select plugin will consider network topology and the topology within a node (e.g. sockets, cores, and threads) to select the best resources for the job
  7. If the job can not be initiated using available resources and preemption support is configured, the select plugin will also determine if the job can be initiated after preempting lower priority jobs. If so then initiate preemption as needed to start the job

Step Allocation

The srun command is always used for job step creation. It fills in a job step request RPC using information from the command line and environment variables then sends that request to the slurmctld daemon. It is important to note that many of the srun options are intended for job allocation and are not supported by the job step request RPC (for example the socket, core and thread information is not supported). If a job step uses all of the resources allocated to the job then the lack of support for some options is not important. If one wants to execute multiple job steps using various subsets of resources allocated to the job, this shortcoming could prove problematic. It is also worth noting that the logic used to select resources for a job step is relatively simple and entirely contained within the slurmctld daemon code (the select plugin is not used for job steps). If the request can not be immediately satisfied due to a request for exclusive access to resources, the appropriate error message will be sent and the srun command will retry the request on a periodic basis. (NOTE: It would be desirable to queue the job step requests to support job step dependencies and better performance in the initiation of job steps, but that is not currently supported.) If the request can be satisfied, the response contains a digitally signed credential (by the cred plugin) identifying the resources to be used.

Task Launch

The srun command builds a task launch request data structure including the credential, executable name, file names, etc. and sends it to the slurmd daemon on node zero of the job step allocation. The slurmd daemon validates the signature and forwards the request to the slurmd daemons on other nodes to launch tasks for that job step. The degree of fanout in this message forwarding is configurable using the TreeWidth parameter. Each slurmd daemon tests that the job has not been cancelled since the credential was issued (due to a possible race condition) and spawns a slurmstepd program to manage the job step. Note that the slurmctld daemon is not directly involved in task launch in order to minimize the overhead on this critical resource.

Each slurmstepd program executes a single job step. Besides the functions listed below, the slurmstepd program also executes several SPANK plugin functions at various times.

  1. Performs MPI setup (using the appropriate plugin)
  2. Calls the switch plugin to perform any needed network configuration
  3. Creates a container for the job step using a proctrack plugin
  4. Change user ID to that of the user
  5. Configures I/O for the tasks (either using files or a socket connection back to the srun command
  6. Sets up environment variables for the tasks including many task-specific environment variables
  7. Fork/exec the tasks

Job Step Termination

There are several ways in which a job step or job can terminate, each with slight variation in the logic executed. The simplest case is if the tasks run to completion. The srun will note the termination of output from the tasks and notify the slurmctld daemon that the job step has completed. slurmctld will simply log the job step termination. The job step can also be explicitly cancelled by a user, reach the end of its time limit, etc. and those follow a sequence of steps very similar to that for job termination, which is described below.

Job Termination

Job termination can either be user initiated (e.g. scancel command) or system initiated (e.g. time limit reached). The termination ultimately requires the slurmctld daemon to notify the slurmd daemons on allocated nodes that the job is to be ended. The slurmd daemon does the following:

  1. Send a SIGCONT and SIGTERM signal to any user tasks
  2. Wait KillWait seconds if there are any user tasks
  3. Send a SIGKILL signal to any user tasks
  4. Wait for all tasks to complete
  5. Execute any Epilog program
  6. Send an epilog_complete RPC to the slurmctld daemon

Last modified 9 June 2021

slurm-slurm-21-08-5-1/doc/html/job_submit_plugins.shtml000066400000000000000000000334311416043614100230110ustar00rootroot00000000000000

Job Submit Plugin API

Overview

This document describes Slurm job submit plugins and the API that defines them. It is intended as a resource to programmers wishing to write their own Slurm job submit plugins. This is version 100 of the API.

Slurm job submit plugins must conform to the Slurm Plugin API with the following specifications:

const char plugin_name[]="full text name"

A free-formatted ASCII text string that identifies the plugin.

const char plugin_type[]="major/minor"

The major type must be "job_submit." The minor type can be any suitable name for the type of job submission package. We include samples in the Slurm distribution for

  • all_partitions — Set default partition to all partitions on the cluster.
  • defaults — Set default values for job submission or modify requests.
  • logging — Log select job submission and modification parameters.
  • lua — Interface to Lua scripts implementing these functions (actually a slight variation of them). Sample Lua scripts can be found with the Slurm distribution in the directory contribs/lua. The default installation location of the Lua scripts is the same location as the Slurm configuration file, slurm.conf.
  • partition — Sets a job's default partition based upon job submission parameters and available partitions.

const uint32_t plugin_version
If specified, identifies the version of Slurm used to build this plugin and any attempt to load the plugin from a different version of Slurm will result in an error. If not specified, then the plugin may be loaded by Slurm commands and daemons from any version, however this may result in difficult to diagnose failures due to changes in the arguments to plugin functions or changes in other Slurm functions used by the plugin.

Slurm can be configured to use multiple job_submit plugins if desired, however the lua plugin will only execute one lua script named "job_submit.lua" located in the default script directory (typically the subdirectory "etc" of the installation directory).

API Functions

All of the following functions are required. Functions which are not implemented must be stubbed.

int init (void)

Description:
Called when the plugin is loaded, before any other functions are called. Put global initialization here.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

void fini (void)

Description:
Called when the plugin is removed. Clear any allocated storage here.

Returns: None.

Note: These init and fini functions are not the same as those described in the dlopen (3) system library. The C run-time system co-opts those symbols for its own initialization. The system _init() is called before the Slurm init(), and the Slurm fini() is called before the system's _fini().

int job_submit(struct job_descriptor *job_desc, uint32_t submit_uid, char **error_msg)

Description:
This function is called by the slurmctld daemon with job submission parameters supplied by the salloc, sbatch or srun command. It can be used to log and/or modify the job parameters supplied by the user as desired. Note that this function has access to the slurmctld's global data structures, for example to examine the available partitions, reservations, etc.

Arguments:
job_desc (input/output) the job allocation request specifications.
submit_uid (input) user ID initiating the request.
error_msg (output) If the argument is not null, then a plugin generated error message can be stored here. The error message is expected to have allocated memory which Slurm will release using the xfree function. The error message is always propagated to the caller, no matter the return code.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

int job_modify(struct job_descriptor *job_desc, job_record_t *job_ptr, uint32_t modify_uid)

Description:
This function is called by the slurmctld daemon with job modification parameters supplied by the scontrol or sview command. It can be used to log and/or modify the job parameters supplied by the user as desired. Note that this function has access to the slurmctld's global data structures, for example to examine the available partitions, reservations, etc.

Arguments:
job_desc (input/output) the job allocation request specifications.
job_ptr (input/output) slurmctld daemon's current data structure for the job to be modified.
modify_uid (input) user ID initiating the request.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

Lua Functions

The Lua functions differ slightly from those implemented in C for better ease of use. Sample Lua scripts can be found with the Slurm distribution in the directory contribs/lua. The default installation location of the Lua scripts is the same location as the Slurm configuration file, slurm.conf. Reading and writing of job environment variables using Lua is possible by referencing the environment variables as a data structure containing named elements. For example:
if (job_desc.environment.LANGUAGE == "en_US") then
....

NOTE: Only sbatch sends the environment to slurmctld. salloc and srun do not send the environment to slurmctld, so job_desc.environment is not available in the job_sumit plugin for these jobs.

int slurm_job_submit(job_desc_msg_t *job_desc, List part_list, uint32_t submit_uid)

Description:
This function is called by the slurmctld daemon with job submission parameters supplied by the salloc, sbatch or srun command. It can be used to log and/or modify the job parameters supplied by the user as desired. Note that this function has access to the slurmctld's global data structures, for example to examine the available partitions, reservations, etc.

Arguments:
job_desc (input/output) the job allocation request specifications.
part_list (input) List of pointer to partitions which this user is authorized to use.
submit_uid (input) user ID initiating the request.

Returns:
slurm.SUCCESS — Job submission accepted by plugin.
slurm.FAILURE — Job submission rejected due to error (Deprecated in 19.05).
slurm.ERROR — Job submission rejected due to error.
slurm.ESLURM_ACCESS_DENIED — Job submission rejected due to access denied.
slurm.ESLURM_ACCOUNTING_POLICY — Job submission rejected due to accounting policy.
slurm.ESLURM_INVALID_ACCOUNT — Job submission rejected due to invalid account.
slurm.ESLURM_INVALID_LICENSES — Job submission rejected due to access licenses.
slurm.ESLURM_INVALID_TIME_LIMIT — Job submission rejected due to invalid time limit.
slurm.ESLURM_JOB_MISSING_SIZE_SPECIFICATION — Job submission rejected due to missing size specification.
slurm.ESLURM_MISSING_TIME_LIMIT — Job submission rejected due to missing time limit.

int slurm_job_modify(job_desc_msg_t *job_desc, job_record_t *job_ptr, List part_list, int modify_uid)

Description:
This function is called by the slurmctld daemon with job modification parameters supplied by the scontrol or sview command. It can be used to log and/or modify the job parameters supplied by the user as desired. Note that this function has access to the slurmctld's global data structures, for example to examine the available partitions, reservations, etc.

Arguments:
job_desc (input/output) the job allocation request specifications.
job_ptr (input/output) slurmctld daemon's current data structure for the job to be modified.
part_list (input) List of pointer to partitions which this user is authorized to use.
modify_uid (input) user ID initiating the request.

Returns:
Returns from job_modify() are the same as the returns from job_submit().

Lua Job Attributes

The available job attributes change occasionally with different versions of Slurm. To find the job attributes that are available for the version of Slurm you're using, go to the SchedMD github page, and navigate to src/plugins/job_submit/lua/job_submit_lua.c. _job_rec_field() contains the list of attributes available for the job_record (e.g. current record in Slurm). _get_job_req_field() contains the list of attributes available for the job_descriptor (e.g. submission or modification request).

Building

Generally using a LUA interface for a job submit plugin is best: It is simple to write and maintain with minimal dependencies upon the Slurm data structures. However using C does provide a mechanism to get more information than available using LUA including full access to all of the data structures and functions in the slurmctld daemon. The simplest way to build a C program would be to just replace one of the job submit plugins included in the Slurm distribution with your own code (i.e. use a patch with your own code). Then just build and install Slurm with that new code. Building a new plugin outside of the Slurm distribution is possible, but far more complex. It also requires access to a multitude of Slurm header files as shown in the procedure below.

  1. You will need to at least partly build Slurm first. The "configure" command must be executed in order to build the "config.h" file in the build directory.
  2. Create a local directory somewhere for your files to build with. Also create subdirectories named ".libs" and ".deps".
  3. Copy a ".deps/job_submit_*Plo" file from another job_submit plugin's ".deps" directory (made as part of the build process) into your local ".deps" subdirectory. Rename the file as appropriate to reflect your plugins name (e.g. rename "job_submit_partition.Plo" to be something like "job_submit_mine.Plo").
  4. Compile and link your plugin. Those options might differ depending upon your build environment. Check the options used for building the other job_submit plugins and modify the example below as required.
  5. Install the plugin.
# Example:
# The Slurm source is in ~/SLURM/slurm.git
# The Slurm build directory is ~/SLURM/slurm.build
# The plugin build is to take place in the directory
#   "~/SLURM/my_submit"
# The installation location is "/usr/local"

# Build Slurm from ~/SLURM/slurm.build
# (or at least run "~/SLURM/slurm.git/configure")

# Set up your plugin files
cd ~/SLURM
mkdir my_submit
cd my_submit
mkdir .libs
mkdir .deps
# Create your plugin code
vi job_submit_mine.c

# Copy up a dependency file
cp ~/SLURM/slurm.build/src/plugins/job_submit/partition/.deps/job_submit_partition.Plo \
   .deps/job_submit_mine.Plo

# Compile
gcc -DHAVE_CONFIG_H -I~/SLURM/slurm.build -I~/slurm.git \
   -g -O2 -pthread -fno-gcse -Werror -Wall -g -O0       \
   -fno-strict-aliasing -MT job_submit_mine.lo          \
   -MD -MP -MF .deps/job_submit_mine.Tpo                \
   -c job_submit_mine.c -o .libs/job_submit_mine.o

# Some clean up
mv -f .deps/job_submit_mine.Tpo .deps/job_submit_mine.Plo
rm -fr .libs/job_submit_mine.a .libs/job_submit_mine.la \
   .libs/job_submit_mine.lai job_submit_mine.so

# Link
gcc -shared -fPIC -DPIC .libs/job_submit_mine.o -O2         \
   -pthread -O0 -pthread -Wl,-soname -Wl,job_submit_mine.so \
   -o job_submit_mine.so

# Install
cp job_submit_mine.so file \
   /usr/local/lib/slurm/job_submit_mine.so

Last modified 26 July 2021

slurm-slurm-21-08-5-1/doc/html/jquery.min.js000066400000000000000000002505171416043614100205070ustar00rootroot00000000000000/*! jQuery v3.1.0 | (c) jQuery Foundation | jquery.org/license */ !function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.1.0",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null!=a?a<0?this[a+this.length]:this[a]:f.call(this)},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"label"in b&&b.disabled===a||"form"in b&&b.disabled===a||"form"in b&&b.disabled===!1&&(b.isDisabled===a||b.isDisabled!==!a&&("label"in b||!ea(b))!==a)}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(_,aa),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=V.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(_,aa),$.test(j[0].type)&&qa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&sa(j),!a)return G.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||$.test(a)&&qa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext,B=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,C=/^.[^:#\[\.,]*$/;function D(a,b,c){if(r.isFunction(b))return r.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return r.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(C.test(b))return r.filter(b,a,c);b=r.filter(b,a)}return r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType})}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(D(this,a||[],!1))},not:function(a){return this.pushStack(D(this,a||[],!0))},is:function(a){return!!D(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var E,F=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,G=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||E,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:F.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),B.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};G.prototype=r.fn,E=r(d);var H=/^(?:parents|prev(?:Until|All))/,I={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function J(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return J(a,"nextSibling")},prev:function(a){return J(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return a.contentDocument||r.merge([],a.childNodes)}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(I[a]||r.uniqueSort(e),H.test(a)&&e.reverse()),this.pushStack(e)}});var K=/\S+/g;function L(a){var b={};return r.each(a.match(K)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?L(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function M(a){return a}function N(a){throw a}function O(a,b,c){var d;try{a&&r.isFunction(d=a.promise)?d.call(a).done(b).fail(c):a&&r.isFunction(d=a.then)?d.call(a,b,c):b.call(void 0,a)}catch(a){c.call(void 0,a)}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==N&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:M,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:M)),c[2][3].add(g(0,a,r.isFunction(d)?d:N))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(O(a,g.done(h(c)).resolve,g.reject),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)O(e[c],h(c),g.reject);return g.promise()}});var P=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&P.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var Q=r.Deferred();r.fn.ready=function(a){return Q.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,holdReady:function(a){a?r.readyWait++:r.ready(!0)},ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||Q.resolveWith(d,[r]))}}),r.ready.then=Q.then;function R(){d.removeEventListener("DOMContentLoaded",R),a.removeEventListener("load",R),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",R),a.addEventListener("load",R));var S=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)S(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0, r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){W.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=V.get(a,b),c&&(!d||r.isArray(c)?d=V.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return V.get(a,c)||V.access(a,c,{empty:r.Callbacks("once memory").add(function(){V.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,ja=/^$|\/(?:java|ecma)script/i,ka={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ka.optgroup=ka.option,ka.tbody=ka.tfoot=ka.colgroup=ka.caption=ka.thead,ka.th=ka.td;function la(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&r.nodeName(a,b)?r.merge([a],c):c}function ma(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=la(l.appendChild(f),"script"),j&&ma(g),c){k=0;while(f=g[k++])ja.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var pa=d.documentElement,qa=/^key/,ra=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,sa=/^([^.]*)(?:\.(.+)|)/;function ta(){return!0}function ua(){return!1}function va(){try{return d.activeElement}catch(a){}}function wa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)wa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ua;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(pa,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(K)||[""],j=b.length;while(j--)h=sa.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.hasData(a)&&V.get(a);if(q&&(i=q.events)){b=(b||"").match(K)||[""],j=b.length;while(j--)if(h=sa.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&V.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(V.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c-1:r.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h\x20\t\r\n\f]*)[^>]*)\/>/gi,ya=/\s*$/g;function Ca(a,b){return r.nodeName(a,"table")&&r.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a:a}function Da(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ea(a){var b=Aa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(V.hasData(a)&&(f=V.access(a),g=V.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&za.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(m&&(e=oa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(la(e,"script"),Da),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=la(h),f=la(a),d=0,e=f.length;d0&&ma(g,!i&&la(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(T(c)){if(b=c[V.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[V.expando]=void 0}c[W.expando]&&(c[W.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return S(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(la(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return S(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!ya.test(a)&&!ka[(ia.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function Xa(a,b,c,d,e){return new Xa.prototype.init(a,b,c,d,e)}r.Tween=Xa,Xa.prototype={constructor:Xa,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=Xa.propHooks[this.prop];return a&&a.get?a.get(this):Xa.propHooks._default.get(this)},run:function(a){var b,c=Xa.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Xa.propHooks._default.set(this),this}},Xa.prototype.init.prototype=Xa.prototype,Xa.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},Xa.propHooks.scrollTop=Xa.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=Xa.prototype.init,r.fx.step={};var Ya,Za,$a=/^(?:toggle|show|hide)$/,_a=/queueHooks$/;function ab(){Za&&(a.requestAnimationFrame(ab),r.fx.tick())}function bb(){return a.setTimeout(function(){Ya=void 0}),Ya=r.now()}function cb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=aa[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function db(a,b,c){for(var d,e=(gb.tweeners[b]||[]).concat(gb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?hb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&r.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(K); if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),hb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ib[b]||r.find.attr;ib[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=ib[g],ib[g]=e,e=null!=c(a,b,d)?g:null,ib[g]=f),e}});var jb=/^(?:input|select|textarea|button)$/i,kb=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return S(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):jb.test(a.nodeName)||kb.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});var lb=/[\t\r\n\f]/g;function mb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,mb(this)))});if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=mb(c),d=1===c.nodeType&&(" "+e+" ").replace(lb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=r.trim(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,mb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=mb(c),d=1===c.nodeType&&(" "+e+" ").replace(lb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=r.trim(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,mb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(K)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=mb(this),b&&V.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":V.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+mb(c)+" ").replace(lb," ").indexOf(b)>-1)return!0;return!1}});var nb=/\r/g,ob=/[\x20\t\r\n\f]+/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":r.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(nb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:r.trim(r.text(a)).replace(ob," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type,g=f?null:[],h=f?e+1:d.length,i=e<0?h:f?e:0;i-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(r.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var pb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!pb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,pb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(V.get(h,"events")||{})[b.type]&&V.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&T(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!T(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=V.access(d,b);e||d.addEventListener(a,c,!0),V.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=V.access(d,b)-1;e?V.access(d,b,e):(d.removeEventListener(a,c,!0),V.remove(d,b))}}});var qb=a.location,rb=r.now(),sb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var tb=/\[\]$/,ub=/\r?\n/g,vb=/^(?:submit|button|image|reset|file)$/i,wb=/^(?:input|select|textarea|keygen)/i;function xb(a,b,c,d){var e;if(r.isArray(b))r.each(b,function(b,e){c||tb.test(a)?d(a,e):xb(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)xb(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(r.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)xb(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&wb.test(this.nodeName)&&!vb.test(a)&&(this.checked||!ha.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:r.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(ub,"\r\n")}}):{name:b.name,value:c.replace(ub,"\r\n")}}).get()}});var yb=/%20/g,zb=/#.*$/,Ab=/([?&])_=[^&]*/,Bb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Cb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Db=/^(?:GET|HEAD)$/,Eb=/^\/\//,Fb={},Gb={},Hb="*/".concat("*"),Ib=d.createElement("a");Ib.href=qb.href;function Jb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(K)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Kb(a,b,c,d){var e={},f=a===Gb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Lb(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Mb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Nb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:qb.href,type:"GET",isLocal:Cb.test(qb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Hb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Lb(Lb(a,r.ajaxSettings),b):Lb(r.ajaxSettings,a)},ajaxPrefilter:Jb(Fb),ajaxTransport:Jb(Gb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Bb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||qb.href)+"").replace(Eb,qb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(K)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Ib.protocol+"//"+Ib.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Kb(Fb,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Db.test(o.type),f=o.url.replace(zb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(yb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(sb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Ab,""),n=(sb.test(f)?"&":"?")+"_="+rb++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Hb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Kb(Gb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Mb(o,y,d)),v=Nb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Ob={0:200,1223:204},Pb=r.ajaxSettings.xhr();o.cors=!!Pb&&"withCredentials"in Pb,o.ajax=Pb=!!Pb,r.ajaxTransport(function(b){var c,d;if(o.cors||Pb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Ob[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("